I am streaming audio samples to and from the I2S0 bus using DMA. I have two audio channels in each direction, 32 bit samples, at 96 kHz. This is a total data flow of 12.28 Mb/sec.
Each audio channel has it's own DMA channel. I'm using ping-pong mode, with auto-reload.
I am also set up to stream the audio input out via the USB interface.
When the data buffers from which the DMA controller loads or stores the samples are located in DARAM, the application works perfectly. However, if I move the data buffers to their own blocks in SARAM, things work fine until I start to stream the samples out the USB interface. Then the USB streaming fails, and the DMA halts.
I cannot find any reason for the halt. As far as I can tell, no error conditions are raised. All the DMA channels are still enabled, the I2S0 bus is still running and receiving samples. But none of the DMA source or destination addresses are changing.
I can leave the buffers in DARAM and work around the problem, but still, it is frustrating not to know why the error is happening.
Anyone have any theories?