从站邻近设备的代码正常工作,和正常转发的代码能同时工作不会产生fifo上下溢出
This commit is contained in:
@@ -39,12 +39,13 @@ void disable_mtimer_int()
|
|||||||
|
|
||||||
void set_mtimer(uint32_t delta_t)
|
void set_mtimer(uint32_t delta_t)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
uint64_t t;
|
uint64_t t;
|
||||||
|
|
||||||
t = read_mtimer();
|
t = read_mtimer();
|
||||||
t += delta_t;
|
t += delta_t;
|
||||||
set_mtimecmp(t);
|
set_mtimecmp(t);
|
||||||
#if 0
|
#else
|
||||||
uint64_t t;
|
uint64_t t;
|
||||||
|
|
||||||
t = *(volatile uint64_t *)(CLINT_BASE + CLINT_MTIME_LOW);
|
t = *(volatile uint64_t *)(CLINT_BASE + CLINT_MTIME_LOW);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ extern volatile uint32_t * const mtimecmp_low;
|
|||||||
|
|
||||||
extern volatile uint32_t mtimer_int_flag;
|
extern volatile uint32_t mtimer_int_flag;
|
||||||
|
|
||||||
uint64_t read_timer(void);
|
uint64_t read_mtimer(void);
|
||||||
void set_mtimecmp(uint64_t value) ;
|
void set_mtimecmp(uint64_t value) ;
|
||||||
void enable_mtimer_int();
|
void enable_mtimer_int();
|
||||||
void disable_mtimer_int();
|
void disable_mtimer_int();
|
||||||
|
|||||||
@@ -121,18 +121,23 @@ uint32_t HLM_poll(uint32_t mode)
|
|||||||
#define DETECT_DEVICE_PKT_LEN 4
|
#define DETECT_DEVICE_PKT_LEN 4
|
||||||
#define DETECT_DEVICE_PKT_TX_LEN (DETECT_DEVICE_PKT_LEN + 4)
|
#define DETECT_DEVICE_PKT_TX_LEN (DETECT_DEVICE_PKT_LEN + 4)
|
||||||
#define MAGIC_NUM 0xa53fd1a0U
|
#define MAGIC_NUM 0xa53fd1a0U
|
||||||
|
#define DETECT_DEV_INTERVAL ((200)/CLINT_MTIME_TICK_PERIOD)
|
||||||
|
|
||||||
uint32_t HLM_slave_poll(void)
|
uint32_t HLM_slave_poll(void)
|
||||||
{
|
{
|
||||||
uint32_t rx_index = 0;
|
uint32_t rx_index = 0;
|
||||||
uint32_t tx_pkt_len;
|
uint32_t tx_pkt_len;
|
||||||
uint32_t rx_pkt_len = 0;
|
uint32_t rx_pkt_len = 0;
|
||||||
|
|
||||||
uint32_t down_rx_start = 0;
|
uint32_t down_rx_work = 0;
|
||||||
uint32_t detect_start = 0;
|
uint32_t detect_work = 0;
|
||||||
|
|
||||||
uint32_t status;
|
uint32_t hlm_status;
|
||||||
uint32_t is_terminal = 1;
|
uint32_t is_terminal = 1;
|
||||||
uint32_t detect_status = 1;
|
uint32_t detect_result = 0;
|
||||||
|
|
||||||
|
uint64_t stamp_time;
|
||||||
|
uint64_t cur_time;
|
||||||
|
|
||||||
//填充检测下行设备的包
|
//填充检测下行设备的包
|
||||||
uint32_t detect_pkt = MAGIC_NUM;
|
uint32_t detect_pkt = MAGIC_NUM;
|
||||||
@@ -140,14 +145,15 @@ uint32_t HLM_slave_poll(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
*rx0_rxTxPair = 1;
|
*rx0_rxTxPair = 1;
|
||||||
*rx0_rxTimerAim = 0; //240;
|
*rx0_rxTimerAim = 0;// 280;
|
||||||
*rx1_rxTxPair = 0;
|
*rx1_rxTxPair = 0;
|
||||||
*rx1_rxTimerAim = 0;
|
*rx1_rxTimerAim = 0;
|
||||||
*plic_enable_0_31 = 0;
|
*plic_enable_0_31 = 0;
|
||||||
|
|
||||||
|
|
||||||
set_mtimer(100);
|
stamp_time = read_mtimer();
|
||||||
enable_mtimer_int();
|
//set_mtimer(150);
|
||||||
|
//enable_mtimer_int();
|
||||||
|
|
||||||
|
|
||||||
#ifdef __riscv_e
|
#ifdef __riscv_e
|
||||||
@@ -158,27 +164,37 @@ uint32_t HLM_slave_poll(void)
|
|||||||
{
|
{
|
||||||
if (is_terminal)
|
if (is_terminal)
|
||||||
{//是终节点
|
{//是终节点
|
||||||
status = *HLM_status;
|
hlm_status = *HLM_status;
|
||||||
if ((!down_rx_start) && (status & HLM_RX0_VALID))
|
if ((!down_rx_work) && (hlm_status & HLM_RX0_VALID))
|
||||||
down_rx_start = 1;
|
{
|
||||||
|
down_rx_work = 1;
|
||||||
for (i = 0; i < HLM_RX0_FIFO_LEFT(status); i++)
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < HLM_RX0_FIFO_LEFT(hlm_status); i++)
|
||||||
{
|
{
|
||||||
if (down_rx_start)
|
|
||||||
{//处理上行接收
|
|
||||||
uint32_t data;
|
uint32_t data;
|
||||||
|
if (down_rx_work)
|
||||||
|
{//处理上行接收
|
||||||
|
|
||||||
data = *rx0_rxFifo;
|
data = *rx0_rxFifo;
|
||||||
if (rx_index == 0)
|
if (rx_index == 0)
|
||||||
{
|
{
|
||||||
rx_pkt_len = (data >> 20) + 4;
|
rx_pkt_len = (data >> 20) + 4;
|
||||||
*tx1_txLen = rx_pkt_len;
|
*tx1_txLen = rx_pkt_len;
|
||||||
|
//rx_pkt_len += 4; //最后是一个0,接收入队列,但不写入tx_fifo
|
||||||
}
|
}
|
||||||
|
|
||||||
rx_index++;
|
rx_index++;
|
||||||
*tx1_txFifo = data;
|
|
||||||
if (rx_pkt_len <= (rx_index * 4))
|
if (rx_pkt_len >= (rx_index * 4))
|
||||||
{
|
{
|
||||||
down_rx_start = 0;
|
*tx1_txFifo = data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
down_rx_work = 0;
|
||||||
|
rx_index = 0;
|
||||||
|
//*rx0_softReset = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -186,32 +202,51 @@ uint32_t HLM_slave_poll(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detect_start)
|
if (down_rx_work == 0)
|
||||||
{
|
{
|
||||||
*tx0_txLen = DETECT_DEVICE_PKT_TX_LEN;
|
if ((detect_work == 1))
|
||||||
*tx0_txFifo = (DETECT_DEVICE_PKT_LEN << 20) | 1;
|
{
|
||||||
|
detect_work = 2;
|
||||||
|
|
||||||
|
*tx0_txLen = (DETECT_DEVICE_PKT_TX_LEN);
|
||||||
|
*tx0_txFifo = ((DETECT_DEVICE_PKT_LEN << 20) | 1);
|
||||||
*tx0_txFifo = detect_pkt;
|
*tx0_txFifo = detect_pkt;
|
||||||
detect_start = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & HLM_RX1_VALID)
|
if ((detect_work == 2) && (HLM_RX1_FIFO_LEFT(hlm_status) >= 2))
|
||||||
{
|
{
|
||||||
uint32_t data;
|
uint32_t data;
|
||||||
uint32_t num;
|
uint32_t num;
|
||||||
|
uint32_t dummy;
|
||||||
|
|
||||||
data = *rx1_rxFifo;
|
data = *rx1_rxFifo;
|
||||||
num = *rx1_rxFifo;
|
num = *rx1_rxFifo;
|
||||||
if ((data & 0x1) && (num == MAGIC_NUM))
|
for (i = 0; i < HLM_RX1_FIFO_LEFT(hlm_status) - 2; i++)
|
||||||
{
|
dummy = *rx1_rxFifo;
|
||||||
|
|
||||||
*rx1_softReset = 1;
|
*rx1_softReset = 1;
|
||||||
*tx0_softReset = 1;
|
*tx0_softReset = 1;
|
||||||
detect_status = 1;
|
|
||||||
|
if (((data & 0xff) == 0x1) && (num == MAGIC_NUM))
|
||||||
|
detect_result = 1;
|
||||||
|
|
||||||
|
detect_work = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (detect_work == 0)
|
||||||
|
{
|
||||||
|
cur_time = read_mtimer();
|
||||||
|
if ((cur_time - stamp_time) >= DETECT_DEV_INTERVAL)
|
||||||
|
{
|
||||||
|
stamp_time = cur_time;
|
||||||
|
detect_work = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mtimer_int_flag)
|
if ((detect_work == 3))
|
||||||
{
|
{
|
||||||
mtimer_int_flag = 0;
|
detect_work = 0;
|
||||||
detect_start = 1;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user