jturnsek commented on PR #11020:
URL: https://github.com/apache/nuttx/pull/11020#issuecomment-1916196596

   @davids5 I am working on imxrt117x where I also have found some problems 
with edma. I am using edma with Flexio driver to get ADC samples in. My driver 
is using the same logic as imxrt_serial rxdma logic and SOMETIMES I am getting 
corrupted data. Especially when the system is stressed. What  I have found out 
so far is that DONE flag is sometimes not set when it should be., although 
interrupt is triggered. Because I am relying on DONE flag passed to my callback 
function, I get wrong context in. If the system is not stressed, DONE flag is 
set every done-interrupt, half-interrupt has DONE flag set to zero. Looking 
further with the debugger, I've noticed that when DONE flag was not set, 
destination address was a few words ahead. This lead me to conclusion that my 
interrupt routine servicing is delayed a little bit and eDMA ran a little bit 
further, activating new major loop. From the documentation:
   
   _Channel Done
   This field indicates whether the eDMA has completed the major loop. The eDMA 
engine sets the value of
   this field to 1 when the CITER count reaches zero. The value of this field 
is reset to 0 by the hardware
   (when the channel is activated) or by software._
   
   one can see that DONE flag can be reset by hardware. Because imxrt_edma is 
checking DONE status quite a few times and is also influencing on 
imxrt_dmach_getcount which is then used in imxrt_serial, maybe this could also 
be a reason to get missing characters. What do you think? I think imxrt_edma 
driver should be revised here.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to