I am currently working on a project based on the TM4C129ENCPDT where I need to receive and process serial data from an SSI in real time. In order to do so, I am using a uDMA configured for ping pong mode to move data from the SSI data register to a suitable buffer in internal RAM.
The ping pong setup should ensure that data is continuously copied from the SSI with no data loss.
The SSI needs to run at a clock frequency of 16 MHz and my core clock frequency is set to 96 MHz. With a SSI receive FIFO depth of eight 16 bit units, this means that an empty receive FIFO will be filled in 16*8*(1/(16000000 Hz)) = 8*(10^-6) s = 8 us or 768 core clock cycles.
What happens if another part of my code running in the processor core blocks RAM access for 768 core clock cycles? Based on actual testing, my best guess is that since uDMA access to RAM is always prioritised lower than processor core access to RAM, the uDMA will not be able to empty the SSI FIFO, and a SSI receive overflow (RXOR) will occur. Obviously, this receive overflow ruins my real time capability.
It seems strange that such an overflow condition can arise when the presence of a ping pong uDMA mode suggests that uDMA could or should in fact be used for real time purposes.
Does anyone have any enlightening thoughts on the matter? Am I understanding and using the architecture correctly? Could I do anything to let my uDMA outrank the processor core for RAM access?