fix(UML-1780): Перемещена перезарядка DMA в прерывание
This commit is contained in:
parent
1a4929e96b
commit
8f643cd992
@ -28,7 +28,25 @@ using namespace free_rtos;
|
||||
void free_rtos::rxIsrHandler(void *appData)
|
||||
{
|
||||
EthRxFlow * rx_flow = (EthRxFlow *)appData;
|
||||
EnetDma_PktQ rxReadyQ;
|
||||
uint32_t readyQCount;
|
||||
int32_t status;
|
||||
|
||||
if (rx_flow != nullptr) {
|
||||
status = EnetDma_retrieveRxPktQ(rx_flow->dma_handle_, &rxReadyQ);
|
||||
EnetAppUtils_assert(status == ENET_SOK);
|
||||
|
||||
readyQCount = EnetQueue_getQCount(&rxReadyQ);
|
||||
|
||||
if(readyQCount == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reload DMA with a new rx free queue as fast as possible
|
||||
rx_flow->reloadDmaRxPktQ(readyQCount);
|
||||
|
||||
EnetQueue_append(&rx_flow->rx_ready_pktq_, &rxReadyQ);
|
||||
|
||||
rx_flow->sem_[EthRxFlow::e_signalRxPkt].post();
|
||||
}
|
||||
}
|
||||
@ -47,6 +65,7 @@ free_rtos::EthRxFlow::EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_s
|
||||
passive_mode_{false}
|
||||
{
|
||||
EnetQueue_initQ(&rx_free_pktq_);
|
||||
EnetQueue_initQ(&rx_ready_pktq_);
|
||||
}
|
||||
|
||||
void free_rtos::EthRxFlow::initRxFreePktQ(uint32_t qCount, void * appPriv)
|
||||
@ -118,7 +137,6 @@ void free_rtos::EthRxFlow::reloadDmaRxPktQ(uint32_t qCount)
|
||||
|
||||
void free_rtos::EthRxFlow::rxProcessPktTask()
|
||||
{
|
||||
EnetDma_PktQ rxReadyQ; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
EnetDma_Pkt* rxPktInfo; /// <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int32_t status;
|
||||
|
||||
@ -128,19 +146,12 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
||||
status = sem_[e_signalRxPkt].pend(e_signalRxPkt_timeout_ticks_);
|
||||
|
||||
if(status != SystemP_SUCCESS) {
|
||||
EnetAppUtils_print("rx_flow %u: Warning ! No rx packets timeout.\r\n", id_);
|
||||
//EnetAppUtils_print("rx_flow %u: Warning ! No rx packets timeout.\r\n", id_);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> rxReadyQ
|
||||
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
||||
EnetAppUtils_assert(status == ENET_SOK);
|
||||
|
||||
// Reload DMA with a new rx free queue as fast as possible
|
||||
reloadDmaRxPktQ(EnetQueue_getQCount(&rxReadyQ));
|
||||
|
||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_ready_pktq_);
|
||||
|
||||
while(rxPktInfo != nullptr)
|
||||
{
|
||||
@ -164,7 +175,7 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
||||
EnetQueue_enq(&rx_free_pktq_, &rxPktInfo->node);
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_ready_pktq_);
|
||||
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
++rx_pkt_counter_;
|
||||
|
||||
@ -50,7 +50,7 @@ private:
|
||||
e_signalTotal
|
||||
};
|
||||
|
||||
static constexpr e_signalRxPkt_timeout_ticks_ = 1500;
|
||||
static constexpr uint32_t e_signalRxPkt_timeout_ticks_ = SystemP_WAIT_FOREVER;
|
||||
|
||||
uint32_t id_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool open_; /// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> dma <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@ -70,6 +70,7 @@ private:
|
||||
uint32_t rx_flow_idx_;
|
||||
EnetDma_RxChHandle dma_handle_;
|
||||
EnetDma_PktQ rx_free_pktq_;
|
||||
EnetDma_PktQ rx_ready_pktq_;
|
||||
|
||||
bool passive_mode_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user