From 80010b89e950c847404bfc105dfaa90a36325ff2 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 12 Feb 2025 17:52:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E7=85=A7=E7=8A=B6=E6=80=81=E5=AF=84?= =?UTF-8?q?=E5=AD=98=E5=99=A8=E9=87=8C=E5=90=84=E4=B8=AAfifo=E7=9A=84?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E5=AD=97=E8=8A=82=E5=B7=A5=E4=BD=9C=EF=BC=8C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81=E5=AE=8C=E6=88=90=E3=80=82?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=B8=BB=E7=AB=99=E6=AD=A3=E5=B8=B8=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/sw/src/halfLvdsMacSvr.c | 48 ++++++++++++++++++++------------------ tb/sw/tl2cdr/tl2cdr.h | 4 ++++ 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/tb/sw/src/halfLvdsMacSvr.c b/tb/sw/src/halfLvdsMacSvr.c index 921ae1a..60394d0 100644 --- a/tb/sw/src/halfLvdsMacSvr.c +++ b/tb/sw/src/halfLvdsMacSvr.c @@ -77,32 +77,34 @@ uint32_t HLM_poll(uint32_t mode) { status = *HLM_status; - if (((tx_index * 4) < tx_pkt_len) && (!(status & HLM_TX0_FIFO_FULL))) + for (i = 0; i < HLM_TX_FIFO_LEN - HLM_TX0_FIFO_LEFT(status); i++) { - *tx0_txFifo = tx_data_ptr[tx_index]; - tx_index++; - } - - status = *HLM_status; - - if (((tx_index * 4) < tx_pkt_len) && (!(status & HLM_TX0_FIFO_FULL))) - { - *tx0_txFifo = tx_data_ptr[tx_index]; - tx_index++; - } - - if ((rx_start) && (status & HLM_RX1_VALID)) - { - rx_data_ptr[rx_index] = *rx1_rxFifo; - if (rx_index == 0) - rx_pkt_len = (rx_data_ptr[rx_index] >> 20) + 4; - - rx_index++; - if (rx_pkt_len <= (rx_index * 4)) + if ((tx_index * 4) < tx_pkt_len) { - rx_start = 0; - rx_index = 0; + *tx0_txFifo = tx_data_ptr[tx_index]; + tx_index++; + } + else break; + } + + for (i = 0; i < HLM_RX1_FIFO_LEFT(status); i++) + { + //if ((rx_start) && (status & HLM_RX1_VALID)) + if (rx_start) + { + rx_data_ptr[rx_index] = *rx1_rxFifo; + if (rx_index == 0) + rx_pkt_len = (rx_data_ptr[rx_index] >> 20) + 4; + + rx_index++; + + if (rx_pkt_len <= (rx_index * 4)) + { + rx_start = 0; + rx_index = 0; + break; + } } } diff --git a/tb/sw/tl2cdr/tl2cdr.h b/tb/sw/tl2cdr/tl2cdr.h index 53764d3..93e4258 100644 --- a/tb/sw/tl2cdr/tl2cdr.h +++ b/tb/sw/tl2cdr/tl2cdr.h @@ -47,6 +47,10 @@ #define HLM_RX0_VALID (1U<<6U) #define HLM_RX1_VALID (1U<<7U) +#define HLM_RX0_FIFO_LEFT(s) (((s) >> 8) & 0x1f) +#define HLM_RX1_FIFO_LEFT(s) (((s) >> (8 + 5)) & 0x1f) +#define HLM_TX0_FIFO_LEFT(s) (((s) >> (8 + 10)) & 0x1f) +#define HLM_TX1_FIFO_LEFT(s) (((s) >> (8 + 15)) & 0x1f) #ifndef __ASSEMBLER__ extern volatile uint32_t * const tx0_softReset;