Hey all -
I'm using the OMAP-L138 with the C674x DSP. McBSP interfaces to the EDMA through a FIFO. Under normal operation my application is working fine, but recently I have found a lockup that can [very] rarely occur.
The lockup happens when there is a soft reset (power is not removed, but the DSP code is reloaded and restarted). The peripheral feeding into the McBSP is not reset and always spamming data.
In the locked up state I can read the SPCR register and find that RRST, RRDY, and RFULL are all set. This means the McBSP has overrun, DRR is not read, RBR is full. I have checked the FIFO and EDMA which appear to have read a DRR value and the DMA has put it in memory. On the DSP I set up some code to manually read the DRR when it is in this locked up state to see if it would kick start the McBSP back up and recover. The McBSP does not respond and SPCR still shows RFULL as set. I have also tried to manually trigger the DMA event to see if that would help and again no change in SPCR.
Looking at virtually all the DMA and McBSP registers between a locked up case and a normal operation case the only difference I can find is that in the DMA IPR register the event in question gets set once (and I clear it) in the locked up state and never again. The IPR event gets repeatedly set in the normal case as I would expect.
I've performed all the debug steps described here http://www.ti.com/lit/ug/sprugp9b/sprugp9b.pdf. I'm still not certain if it's a DMA problem or a McBSP problem, but since the RFULL/DRR is not clearing when I manually read the register I suspect McBSP.
So since this only happens during this special reset and very rarely, I feel like there is something wrong with how I shutdown. When I shutdown I just stop the DMA and disable, clear all events and interrupts in the Delete() IOM function.
I hope I've provided enough information (not likely) and posted this in the correct forum - if not please ask. Please and thank you for any help you can provide :)