This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

uarte dma switch moment

nRF52810

1,

Conditions: Two dma buffers are used, SHORT = TASK_STARTRX, 1M baud rate (10us / B)

Phenomenon: At END_RX interrupt, I called GPIO0 = low. With the logic analyzer, when RXD pin receives num =  MAXCOUNT, GPIO0 will be pulled low after about 15.6us

Question: I guess at the time of dma buffer switching, there should be at least one byte will be lost, because 15.6us> 10us, but the actual is not lost, all the bytes stored in the next complete dma buffer

2,

Conditions: two dma buffer, SHORT = TASK_STARTRX, 1M baud rate (10us / B), the initiative to call TASK_STOPRX

Phenomenon: At END_RX interrupt, I called GPIO0 = low. With the logic analyzer,after i call TASK_STOPRX, about 74us, GPIO0 will be pulled low

Question: I guess the two methods that generate END_RX interrupts are definitely different, and the data is lost when the latter switches the buffer, 74us> 10us, about 6 bytes lost, but why?

3,

Guess: The first case RX receiver is always open, so when switching the data will be buffered into the hardware FIFO, but will not be lost; The second case will turn off the RX receiver, leading to END_RX interrupt before the trigger , All the data will not be cached into the hardware FIFO, but directly lost,Is this so? I was rewriting the driver and I was very puzzled

Related