I am observing instability with SPI DMA transfers. Here are the details of my application:
-> Audio sampling rate is 48KHz.
-> SPORT0, SPORT2, SPORT4 are configured in receive mode with chained DMA.
-> SPORT1 and SPORT3 are configured in transmit mode with chanined DMA.
-> User interrupt 0 is used for audio processing at different block size in multiples of SPORT DMA size. Audio processing running at this interrupt level is taking around 290 MIPs.
-> SPIB is configured in DMA to communicate with the HOST (PC in my application). SPIB DMA is switched between receive mode and transmit mode on the fly. initially SPIB DMA is configured in receive mode with chaining. once the command is received then SPIB is configured to transmit in single DMA mode.
-> Audio data from the receive SPORT DMA buffers is copied in to Audio processing buffers and vice versa will be happened in SPORT4 ISR. If sufficient audio data is available to process then User Interrupt 0 will be raised.
-> HOST (PC) continously sends command to DSP to update some of the audio configuration parameters and it expects the reply for the command transmitted. On the other side, DSP will receive the command via SPIB in DMA receive mode and transmits the reply command to HOST via SPIB in DMA transmit mode.
The application is working for some duration (2 to 3 hrs) and suddenly SPIB DMA is not responding. i.e. DSP is not getting SPIB DMA receive completion interrupt.
I've attached a file which implements the SPIB communication protocol. Could any one please review my code and suggest me where I am doing wrong?
Thanks in advance for the help.