mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Merge pull request #16 from vDorst/cmd_gpio
Refactor GPIO defines and add cmd `regget`, `regset`, `gpio`.
This commit is contained in:
+193
-12
@@ -13,6 +13,7 @@
|
|||||||
#include "rtl837x_flash.h"
|
#include "rtl837x_flash.h"
|
||||||
#include "rtl837x_phy.h"
|
#include "rtl837x_phy.h"
|
||||||
#include "rtl837x_regs.h"
|
#include "rtl837x_regs.h"
|
||||||
|
#include "rtl837x_sfr.h"
|
||||||
#include "uip/uip.h"
|
#include "uip/uip.h"
|
||||||
|
|
||||||
#pragma codeseg BANK1
|
#pragma codeseg BANK1
|
||||||
@@ -24,6 +25,7 @@ extern __xdata uint8_t isRTL8373;
|
|||||||
extern __xdata uint16_t mpos;
|
extern __xdata uint16_t mpos;
|
||||||
|
|
||||||
extern volatile __xdata uint32_t ticks;
|
extern volatile __xdata uint32_t ticks;
|
||||||
|
extern volatile __xdata uint8_t sfr_data[4];
|
||||||
|
|
||||||
extern __code uint8_t * __code greeting;
|
extern __code uint8_t * __code greeting;
|
||||||
extern __code uint8_t * __code hex;
|
extern __code uint8_t * __code hex;
|
||||||
@@ -31,6 +33,11 @@ extern __code uint8_t * __code hex;
|
|||||||
extern __xdata uint8_t flash_buf[256];
|
extern __xdata uint8_t flash_buf[256];
|
||||||
__xdata uint8_t vlan_names[VLAN_NAMES_SIZE];
|
__xdata uint8_t vlan_names[VLAN_NAMES_SIZE];
|
||||||
__xdata uint16_t vlan_ptr;
|
__xdata uint16_t vlan_ptr;
|
||||||
|
__xdata uint8_t gpio_last_value[8] = { 0 };
|
||||||
|
|
||||||
|
// Temporatly for str to hex convertion value.
|
||||||
|
// Support up to 32_bits.
|
||||||
|
__xdata uint8_t hexvalue[4] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
// Buffer for writing to flash 0x1fd000, copy to 0x1fe000
|
// Buffer for writing to flash 0x1fd000, copy to 0x1fe000
|
||||||
@@ -53,7 +60,20 @@ __code uint8_t phys_to_log_port[6] = {
|
|||||||
|
|
||||||
inline uint8_t isletter(uint8_t l)
|
inline uint8_t isletter(uint8_t l)
|
||||||
{
|
{
|
||||||
return (l >= 'a' && l <= 'z') || (l >= 'A' && l <= 'Z');
|
// return (l >= 'a' && l <= 'z') || (l >= 'A' && l <= 'Z');
|
||||||
|
|
||||||
|
// Make it lowercase
|
||||||
|
l |= 0x20;
|
||||||
|
l -= 'a';
|
||||||
|
return (l <= ('z'-'a'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline uint8_t isnumber(uint8_t l)
|
||||||
|
{
|
||||||
|
// return (l >= '0' && l <= '9');
|
||||||
|
l -= '0';
|
||||||
|
return (l <= ('9'-'0'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,12 +98,56 @@ uint8_t cmd_compare(uint8_t start, uint8_t * __code cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Converts ascii-hex array into value.
|
||||||
|
returns number of hexvalue[] entries has been written.
|
||||||
|
return value = 0 means error.
|
||||||
|
*/
|
||||||
|
uint8_t atoi_hex(uint8_t idx)
|
||||||
|
{
|
||||||
|
uint8_t h_idx = 0;
|
||||||
|
uint8_t val = 0;
|
||||||
|
uint8_t c;
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
c = cmd_buffer[idx];
|
||||||
|
|
||||||
|
if (c == '\0' || c == ' ') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// swap hex nibbles
|
||||||
|
val = (val >> 4) | (val << 4);
|
||||||
|
|
||||||
|
if (c - '0' < 10) {
|
||||||
|
val |= c - '0';
|
||||||
|
} else {
|
||||||
|
c |= 0x20;
|
||||||
|
c -= 'a';
|
||||||
|
if (c > 5) {
|
||||||
|
h_idx = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
val |= c + 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx++;
|
||||||
|
hexvalue[h_idx >> 1] = val;
|
||||||
|
|
||||||
|
if (h_idx & 1 == 1) {
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
h_idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((h_idx + 1) >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t atoi_short(register uint16_t *vlan, register uint8_t idx)
|
uint8_t atoi_short(register uint16_t *vlan, register uint8_t idx)
|
||||||
{
|
{
|
||||||
uint8_t err = 1;
|
uint8_t err = 1;
|
||||||
*vlan = 0;
|
*vlan = 0;
|
||||||
|
|
||||||
while (cmd_buffer[idx] >= '0' && cmd_buffer[idx] <= '9') {
|
while (isnumber(cmd_buffer[idx])) {
|
||||||
err = 0;
|
err = 0;
|
||||||
*vlan = (*vlan * 10) + cmd_buffer[idx] - '0';
|
*vlan = (*vlan * 10) + cmd_buffer[idx] - '0';
|
||||||
idx++;
|
idx++;
|
||||||
@@ -98,7 +162,7 @@ uint8_t parse_ip(register uint8_t idx)
|
|||||||
|
|
||||||
for (b = 0; b < 4; b++) {
|
for (b = 0; b < 4; b++) {
|
||||||
ip[b] = 0;
|
ip[b] = 0;
|
||||||
while (cmd_buffer[idx] >= '0' && cmd_buffer[idx] <= '9') {
|
while (isnumber(cmd_buffer[idx])) {
|
||||||
ip[b] = (ip[b] * 10) + cmd_buffer[idx] - '0';
|
ip[b] = (ip[b] * 10) + cmd_buffer[idx] - '0';
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
@@ -121,7 +185,7 @@ void parse_trunk(void)
|
|||||||
uint8_t w = 2;
|
uint8_t w = 2;
|
||||||
while (cmd_words_b[w] > 0) {
|
while (cmd_words_b[w] > 0) {
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
if (cmd_buffer[cmd_words_b[w]] >= '0' && cmd_buffer[cmd_words_b[w]] <= '9') {
|
if (isnumber(cmd_buffer[cmd_words_b[w]])) {
|
||||||
port = cmd_buffer[cmd_words_b[w]] - '1';
|
port = cmd_buffer[cmd_words_b[w]] - '1';
|
||||||
if (port > maxPort)
|
if (port > maxPort)
|
||||||
goto err;
|
goto err;
|
||||||
@@ -166,9 +230,9 @@ void parse_vlan(void)
|
|||||||
}
|
}
|
||||||
while (cmd_words_b[w] > 0) {
|
while (cmd_words_b[w] > 0) {
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
if (cmd_buffer[cmd_words_b[w]] >= '0' && cmd_buffer[cmd_words_b[w]] <= '9') {
|
if (isnumber(cmd_buffer[cmd_words_b[w]])) {
|
||||||
port = cmd_buffer[cmd_words_b[w]] - '1';
|
port = cmd_buffer[cmd_words_b[w]] - '1';
|
||||||
if (cmd_buffer[cmd_words_b[w] + 1] >= '0' && cmd_buffer[cmd_words_b[w] + 1] <= '9') {
|
if (isnumber(cmd_buffer[cmd_words_b[w] + 1])) {
|
||||||
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
|
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
|
||||||
if (cmd_buffer[cmd_words_b[w] + 2] == 't')
|
if (cmd_buffer[cmd_words_b[w] + 2] == 't')
|
||||||
tagged |= ((uint16_t)1) << port;
|
tagged |= ((uint16_t)1) << port;
|
||||||
@@ -202,23 +266,23 @@ void parse_mirror(void)
|
|||||||
__xdata uint16_t rx_pmask = 0;
|
__xdata uint16_t rx_pmask = 0;
|
||||||
__xdata uint16_t tx_pmask = 0;
|
__xdata uint16_t tx_pmask = 0;
|
||||||
|
|
||||||
if (cmd_buffer[cmd_words_b[1]] < '0' || cmd_buffer[cmd_words_b[1]] > '9') {
|
if (!isnumber(cmd_buffer[cmd_words_b[1]])) {
|
||||||
print_string("Port missing: port <mirroring port> [port][t/r]...");
|
print_string("Port missing: port <mirroring port> [port][t/r]...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mirroring_port = cmd_buffer[cmd_words_b[1]] - '1';
|
mirroring_port = cmd_buffer[cmd_words_b[1]] - '1';
|
||||||
if (cmd_buffer[cmd_words_b[1] + 1] >= '0' && cmd_buffer[cmd_words_b[1] + 1] <= '9')
|
if (isnumber(cmd_buffer[cmd_words_b[1] + 1]))
|
||||||
mirroring_port = (mirroring_port + 1) * 10 + cmd_buffer[cmd_words_b[1] + 1] - '1';
|
mirroring_port = (mirroring_port + 1) * 10 + cmd_buffer[cmd_words_b[1] + 1] - '1';
|
||||||
if (!isRTL8373)
|
if (!isRTL8373)
|
||||||
mirroring_port = phys_to_log_port[mirroring_port];
|
mirroring_port = phys_to_log_port[mirroring_port];
|
||||||
|
|
||||||
uint8_t w = 2;
|
uint8_t w = 2;
|
||||||
while (cmd_words_b[w] > 0) {
|
while (cmd_words_b[w] > 0) {
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
if (cmd_buffer[cmd_words_b[w]] >= '0' && cmd_buffer[cmd_words_b[w]] <= '9') {
|
if (isnumber(cmd_buffer[cmd_words_b[w]])) {
|
||||||
port = cmd_buffer[cmd_words_b[w]] - '1';
|
port = cmd_buffer[cmd_words_b[w]] - '1';
|
||||||
if (cmd_buffer[cmd_words_b[w] + 1] >= '0' && cmd_buffer[cmd_words_b[w] + 1] <= '9') {
|
if (isnumber(cmd_buffer[cmd_words_b[w] + 1])) {
|
||||||
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
|
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
|
||||||
if (!isRTL8373)
|
if (!isRTL8373)
|
||||||
port = phys_to_log_port[port];
|
port = phys_to_log_port[port];
|
||||||
@@ -249,6 +313,87 @@ void parse_mirror(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void parse_regget(void)
|
||||||
|
{
|
||||||
|
uint16_t reg = 0;
|
||||||
|
|
||||||
|
if (cmd_words_b[1] < 0) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t hex_size = atoi_hex(cmd_words_b[1]);
|
||||||
|
|
||||||
|
if (hex_size == 0 || hex_size > 2) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg = hexvalue[0];
|
||||||
|
if (hex_size == 2) {
|
||||||
|
reg <<= 8;
|
||||||
|
reg |= hexvalue[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
print_string("REGGET: ");
|
||||||
|
print_short(reg);
|
||||||
|
print_string(": VAL: ");
|
||||||
|
|
||||||
|
reg_read_m(reg);
|
||||||
|
print_sfr_data();
|
||||||
|
return;
|
||||||
|
|
||||||
|
err:
|
||||||
|
print_string("usage: regget <hexvalue>\n\tlike: regget 0BB0 or regget 0c");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void parse_regset(void)
|
||||||
|
{
|
||||||
|
uint16_t reg = 0;
|
||||||
|
|
||||||
|
if (cmd_words_b[2] < 0) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t hex_size = atoi_hex(cmd_words_b[1]);
|
||||||
|
if (hex_size == 0 || hex_size > 2) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg = hexvalue[0];
|
||||||
|
if (hex_size == 2) {
|
||||||
|
reg <<= 8;
|
||||||
|
reg |= hexvalue[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
hex_size = atoi_hex(cmd_words_b[2]);
|
||||||
|
if (hex_size == 0 || hex_size > 4) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
// zero sfr memory data
|
||||||
|
sfr_set_zero();
|
||||||
|
|
||||||
|
// copy data over sfr memory
|
||||||
|
uint8_t offset = 4 - hex_size;
|
||||||
|
while(hex_size) {
|
||||||
|
hex_size -= 1;
|
||||||
|
sfr_data[offset + hex_size] = hexvalue[hex_size];
|
||||||
|
}
|
||||||
|
print_string("REGSET: ");
|
||||||
|
print_short(reg);
|
||||||
|
|
||||||
|
reg_write_m(reg);
|
||||||
|
|
||||||
|
print_string(": VAL: ");
|
||||||
|
print_sfr_data();
|
||||||
|
return;
|
||||||
|
|
||||||
|
err:
|
||||||
|
print_string("usage: regset <hexvalue> <hexvalue>\n\tlike regset 0b abcd1234.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Parse command into words
|
// Parse command into words
|
||||||
uint8_t cmd_tokenize(void) __banked
|
uint8_t cmd_tokenize(void) __banked
|
||||||
{
|
{
|
||||||
@@ -282,6 +427,33 @@ uint8_t cmd_tokenize(void) __banked
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Print GPIO status
|
||||||
|
void print_gpio_status(void) {
|
||||||
|
for (uint8_t idx = 0; idx < 2; idx++) {
|
||||||
|
reg_read(RTL837X_REG_GPIO_00_31_INPUT + (idx * 4));
|
||||||
|
print_string("GPIO ");
|
||||||
|
write_char(idx + '0');
|
||||||
|
write_char(':');
|
||||||
|
write_char(' ');
|
||||||
|
|
||||||
|
print_byte(SFR_DATA_24);
|
||||||
|
print_byte(SFR_DATA_16);
|
||||||
|
print_byte(SFR_DATA_8);
|
||||||
|
print_byte(SFR_DATA_0);
|
||||||
|
|
||||||
|
write_char(' ');
|
||||||
|
print_byte( gpio_last_value[(idx *4)] ^ SFR_DATA_24);
|
||||||
|
gpio_last_value[(idx *4)] = SFR_DATA_24;
|
||||||
|
print_byte( gpio_last_value[(idx *4) + 1] ^ SFR_DATA_16);
|
||||||
|
gpio_last_value[(idx *4) + 1] = SFR_DATA_16;
|
||||||
|
print_byte( gpio_last_value[(idx *4) + 2] ^ SFR_DATA_8);
|
||||||
|
gpio_last_value[(idx *4) + 2] = SFR_DATA_8;
|
||||||
|
print_byte( gpio_last_value[(idx *4) + 3] ^ SFR_DATA_0);
|
||||||
|
gpio_last_value[(idx *4) + 3] = SFR_DATA_0;
|
||||||
|
write_char('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Identify command
|
// Identify command
|
||||||
void cmd_parser(void) __banked
|
void cmd_parser(void) __banked
|
||||||
@@ -423,10 +595,18 @@ void cmd_parser(void) __banked
|
|||||||
if (cmd_compare(0, "sds")) {
|
if (cmd_compare(0, "sds")) {
|
||||||
print_reg(RTL837X_REG_SDS_MODES);
|
print_reg(RTL837X_REG_SDS_MODES);
|
||||||
}
|
}
|
||||||
|
if (cmd_compare(0, "gpio")) {
|
||||||
|
print_gpio_status();
|
||||||
|
}
|
||||||
|
if (cmd_compare(0, "regget")) {
|
||||||
|
parse_regget();
|
||||||
|
}
|
||||||
|
if (cmd_compare(0, "regset")) {
|
||||||
|
parse_regset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void execute_config(void) __banked
|
void execute_config(void) __banked
|
||||||
{
|
{
|
||||||
__xdata uint32_t pos = CONFIG_START;
|
__xdata uint32_t pos = CONFIG_START;
|
||||||
@@ -445,3 +625,4 @@ void execute_config(void) __banked
|
|||||||
}
|
}
|
||||||
} while (mpos != 0xffff);
|
} while (mpos != 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ void print_reg(uint16_t reg);
|
|||||||
uint8_t sfp_read_reg(uint8_t slot, uint8_t reg);
|
uint8_t sfp_read_reg(uint8_t slot, uint8_t reg);
|
||||||
void reg_bit_set(uint16_t reg_addr, char bit);
|
void reg_bit_set(uint16_t reg_addr, char bit);
|
||||||
void reg_bit_clear(uint16_t reg_addr, char bit);
|
void reg_bit_clear(uint16_t reg_addr, char bit);
|
||||||
|
void sfr_set_zero(void);
|
||||||
void reset_chip(void);
|
void reset_chip(void);
|
||||||
void memcpy(__xdata void * __xdata dst, __xdata const void * __xdata src, uint16_t len);
|
void memcpy(__xdata void * __xdata dst, __xdata const void * __xdata src, uint16_t len);
|
||||||
void memcpyc(register __xdata uint8_t *dst, register __code uint8_t *src, register uint16_t len);
|
void memcpyc(register __xdata uint8_t *dst, register __code uint8_t *src, register uint16_t len);
|
||||||
|
|||||||
+2
-2
@@ -423,13 +423,13 @@ void port_stats_print(void) __banked
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else { // An SFP Module TODO: This is for 1 module devices
|
} else { // An SFP Module TODO: This is for 1 module devices
|
||||||
reg_read_m(RTL837X_REG_GPIO_B);
|
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
|
||||||
if (!(sfr_data[0] & 0x40)) {
|
if (!(sfr_data[0] & 0x40)) {
|
||||||
print_string("SFP OK\t");
|
print_string("SFP OK\t");
|
||||||
} else {
|
} else {
|
||||||
print_string("NO SFP\t");
|
print_string("NO SFP\t");
|
||||||
}
|
}
|
||||||
reg_read_m(RTL837X_REG_GPIO_C);
|
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
|
||||||
if (sfr_data[3] & 0x20) {
|
if (sfr_data[3] & 0x20) {
|
||||||
print_string("Down\t");
|
print_string("Down\t");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+11
-9
@@ -44,22 +44,24 @@
|
|||||||
* Pin configuration (pinmux)
|
* Pin configuration (pinmux)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define RTL837X_PIN_MUX_A 0x7f8c
|
#define RTL837X_PIN_MUX_0 0x7f8c
|
||||||
#define RTL837X_PIN_MUX_B 0x7f90
|
#define RTL837X_PIN_MUX_1 0x7f90
|
||||||
|
|
||||||
#define RTL837X_REG_GPIO_A 0x40
|
// Output Registers
|
||||||
|
#define RTL837X_REG_GPIO_00_31_OUTPUT 0x3c
|
||||||
|
#define RTL837X_REG_GPIO_32_63_OUTPUT 0x40
|
||||||
// BIT 4 resets RTL8224 on 9000-9XH
|
// BIT 4 resets RTL8224 on 9000-9XH
|
||||||
|
|
||||||
#define RTL837X_REG_GPIO_B 0x44
|
// Input Registers
|
||||||
|
#define RTL837X_REG_GPIO_00_31_INPUT 0x44
|
||||||
|
#define RTL837X_REG_GPIO_32_63_INPUT 0x48
|
||||||
// Bit 1e cleared: SFP Module inserted on 9000-6XH (MOD_DEF0 pin)
|
// Bit 1e cleared: SFP Module inserted on 9000-6XH (MOD_DEF0 pin)
|
||||||
|
|
||||||
#define RTL837X_REG_GPIO_C 0x48
|
|
||||||
// BIT 5 set: SIGNAL LOS of SFP module on 9000-6XH (RX_LOS pin)
|
// BIT 5 set: SIGNAL LOS of SFP module on 9000-6XH (RX_LOS pin)
|
||||||
|
|
||||||
#define RTL837X_REG_GPIO_CONF_A 0x50
|
// Direction Registers, 0 = input, 1 = output
|
||||||
// Configures IO direction for bank a
|
#define RTL837X_REG_GPIO_00_31_DIRECTION 0x4c
|
||||||
|
#define RTL837X_REG_GPIO_32_63_DIRECTION 0x50
|
||||||
#define RTL837X_REG_GPIO_EXT 0x63e8
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C controller
|
* I2C controller
|
||||||
|
|||||||
+29
-18
@@ -61,6 +61,7 @@ __xdata uint8_t sbuf[SBUF_SIZE];
|
|||||||
__xdata uint8_t sfr_data[4];
|
__xdata uint8_t sfr_data[4];
|
||||||
|
|
||||||
extern __xdata uint8_t cmd_buffer[SBUF_SIZE];
|
extern __xdata uint8_t cmd_buffer[SBUF_SIZE];
|
||||||
|
extern __xdata uint8_t gpio_last_value[8];
|
||||||
|
|
||||||
__code uint8_t * __code greeting = "\nA minimal prompt to explore the RTL8372:\n";
|
__code uint8_t * __code greeting = "\nA minimal prompt to explore the RTL8372:\n";
|
||||||
__code uint8_t * __code hex = "0123456789abcdef";
|
__code uint8_t * __code hex = "0123456789abcdef";
|
||||||
@@ -380,6 +381,16 @@ void sfr_mask_data(uint8_t n, uint8_t mask, uint8_t set)
|
|||||||
sfr_data[3-n] = b;
|
sfr_data[3-n] = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This zeros all the sfr data fields
|
||||||
|
*/
|
||||||
|
void sfr_set_zero(void) {
|
||||||
|
uint8_t idx = 4;
|
||||||
|
while (idx) {
|
||||||
|
idx -= 1;
|
||||||
|
sfr_data[idx] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Transfer Network Interface RX data from the ASIC to the 8051 XMEM
|
* Transfer Network Interface RX data from the ASIC to the 8051 XMEM
|
||||||
@@ -873,7 +884,7 @@ void sfp_print_info(uint8_t sfp)
|
|||||||
|
|
||||||
void handle_sfp(void)
|
void handle_sfp(void)
|
||||||
{
|
{
|
||||||
reg_read_m(RTL837X_REG_GPIO_B);
|
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
|
||||||
if ((sfp_pins_last & 0x1) && (!(sfr_data[0] & 0x40))) {
|
if ((sfp_pins_last & 0x1) && (!(sfr_data[0] & 0x40))) {
|
||||||
sfp_pins_last &= ~0x01;
|
sfp_pins_last &= ~0x01;
|
||||||
print_string("\n<MODULE INSERTED> ");
|
print_string("\n<MODULE INSERTED> ");
|
||||||
@@ -893,7 +904,7 @@ void handle_sfp(void)
|
|||||||
print_string("\n<MODULE REMOVED>\n");
|
print_string("\n<MODULE REMOVED>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_read_m(RTL837X_REG_GPIO_C);
|
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
|
||||||
if ((sfp_pins_last & 0x2) && (!(sfr_data[3] & 0x20))) {
|
if ((sfp_pins_last & 0x2) && (!(sfr_data[3] & 0x20))) {
|
||||||
sfp_pins_last &= ~0x02;
|
sfp_pins_last &= ~0x02;
|
||||||
print_string("\n<SFP-RX OK>\n");
|
print_string("\n<SFP-RX OK>\n");
|
||||||
@@ -903,7 +914,7 @@ void handle_sfp(void)
|
|||||||
print_string("\n<SFP-RX LOS>\n");
|
print_string("\n<SFP-RX LOS>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_read_m(RTL837X_REG_GPIO_C);
|
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
|
||||||
if ((sfp_pins_last & 0x10) && (!(sfr_data[1] & 0x04))) {
|
if ((sfp_pins_last & 0x10) && (!(sfr_data[1] & 0x04))) {
|
||||||
sfp_pins_last &= ~0x10;
|
sfp_pins_last &= ~0x10;
|
||||||
print_string("\n<MODULE 2 INSERTED> ");
|
print_string("\n<MODULE 2 INSERTED> ");
|
||||||
@@ -989,7 +1000,7 @@ void idle(void)
|
|||||||
handle_sfp();
|
handle_sfp();
|
||||||
|
|
||||||
/* Button pressed on KL-8xhm-x2:
|
/* Button pressed on KL-8xhm-x2:
|
||||||
reg_read(RTL837X_REG_GPIO_C);
|
reg_read(RTL837X_REG_GPIO_32_63_INPUT);
|
||||||
if (!(sfr_data[2] & 0x40))
|
if (!(sfr_data[2] & 0x40))
|
||||||
print_string("Button pressed\n");
|
print_string("Button pressed\n");
|
||||||
*/
|
*/
|
||||||
@@ -1038,12 +1049,12 @@ void setup_external_irqs(void)
|
|||||||
void rtl8224_enable(void)
|
void rtl8224_enable(void)
|
||||||
{
|
{
|
||||||
// Set Pin 4 low
|
// Set Pin 4 low
|
||||||
reg_bit_clear(RTL837X_REG_GPIO_A, 4);
|
reg_bit_clear(RTL837X_REG_GPIO_32_63_OUTPUT, 4);
|
||||||
// Configure Pin as output
|
// Configure Pin as output
|
||||||
reg_bit_set(RTL837X_REG_GPIO_CONF_A, 4);
|
reg_bit_set(RTL837X_REG_GPIO_32_63_DIRECTION, 4);
|
||||||
delay(100);
|
delay(100);
|
||||||
// Set pin 4 high
|
// Set pin 4 high
|
||||||
reg_bit_set(RTL837X_REG_GPIO_A, 4);
|
reg_bit_set(RTL837X_REG_GPIO_32_63_OUTPUT, 4);
|
||||||
delay(500);
|
delay(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1064,9 +1075,9 @@ void setup_clock(void)
|
|||||||
reg_write_m(RTL837X_REG_HW_CONF);
|
reg_write_m(RTL837X_REG_HW_CONF);
|
||||||
|
|
||||||
// Enable serial interface, set bit 0
|
// Enable serial interface, set bit 0
|
||||||
reg_read_m(RTL837X_PIN_MUX_B);
|
reg_read_m(RTL837X_PIN_MUX_1);
|
||||||
sfr_mask_data(0, 0x1, 0x1);
|
sfr_mask_data(0, 0x1, 0x1);
|
||||||
reg_write_m(RTL837X_PIN_MUX_B);
|
reg_write_m(RTL837X_PIN_MUX_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1286,7 +1297,7 @@ void led_config_9xh(void)
|
|||||||
reg_bit_clear(0x65dc, 0x1b);
|
reg_bit_clear(0x65dc, 0x1b);
|
||||||
|
|
||||||
// r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
|
// r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b);
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b);
|
||||||
|
|
||||||
// R6548-0041017f
|
// R6548-0041017f
|
||||||
REG_SET(0x6548, 0x0041017f);
|
REG_SET(0x6548, 0x0041017f);
|
||||||
@@ -1338,13 +1349,13 @@ void led_config(void)
|
|||||||
|
|
||||||
// Set bits 1b/1d of 0x7f8c: r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
|
// Set bits 1b/1d of 0x7f8c: r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
|
||||||
if (nSFPPorts == 2) {
|
if (nSFPPorts == 2) {
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b); // R7f8c-28000000
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b); // R7f8c-28000000
|
||||||
reg_bit_clear(RTL837X_PIN_MUX_A, 0x1c); // R7f8c-28000000
|
reg_bit_clear(RTL837X_PIN_MUX_0, 0x1c); // R7f8c-28000000
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1d); // R7f8c-28000000
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1d); // R7f8c-28000000
|
||||||
} else {
|
} else {
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1d);
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1d);
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1c);
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1c);
|
||||||
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b);
|
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b);
|
||||||
}
|
}
|
||||||
// LED setup
|
// LED setup
|
||||||
// r6520:0021fdb0 R6520-0021e7b0 r6520:0021e7b0 R6520-0021e6b0 r65f8:00000018 R65f8-00000018 R65fc-fffff000 r6600:00000000 R6600-0000000f r65dc:5fffff00 R65dc-7fffff00 r65dc:7fffff00 R65dc-77ffff00
|
// r6520:0021fdb0 R6520-0021e7b0 r6520:0021e7b0 R6520-0021e6b0 r65f8:00000018 R65f8-00000018 R65fc-fffff000 r6600:00000000 R6600-0000000f r65dc:5fffff00 R65dc-7fffff00 r65dc:7fffff00 R65dc-77ffff00
|
||||||
@@ -1620,10 +1631,10 @@ void setup_i2c(void)
|
|||||||
REG_SET(0x041c, 0);
|
REG_SET(0x041c, 0);
|
||||||
|
|
||||||
// HW Control register, enable I2C?
|
// HW Control register, enable I2C?
|
||||||
reg_read_m(RTL837X_PIN_MUX_B);
|
reg_read_m(RTL837X_PIN_MUX_1);
|
||||||
sfr_mask_data(3, 0x20, 0x00); // Clear bit 29
|
sfr_mask_data(3, 0x20, 0x00); // Clear bit 29
|
||||||
sfr_mask_data(0, 0x60, 0x40); // Set bits 5-6 to 0b10
|
sfr_mask_data(0, 0x60, 0x40); // Set bits 5-6 to 0b10
|
||||||
reg_write_m(RTL837X_PIN_MUX_B);
|
reg_write_m(RTL837X_PIN_MUX_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -25,5 +25,5 @@ Other memory:
|
|||||||
Name Start End Size Max
|
Name Start End Size Max
|
||||||
---------------- -------- -------- -------- --------
|
---------------- -------- -------- -------- --------
|
||||||
PAGED EXT. RAM 0 256
|
PAGED EXT. RAM 0 256
|
||||||
EXTERNAL RAM 0x0001 0x1ad8 6872 16777216
|
EXTERNAL RAM 0x0001 0x1ae8 6888 16777216
|
||||||
ROM/EPROM/FLASH 0x0000 0x1c195 45278 16777216
|
ROM/EPROM/FLASH 0x0000 0x1c69f 46879 16777216
|
||||||
|
|||||||
Reference in New Issue
Block a user