I'm putting the polish on a Delfino-based measurement system developed under CCS and SYS/BIOS, and have come up with an unexplained DMA stall when linking the McBSP (configured as a clock-stop SPI provider) to Channel 1 (McBSP TX) and Channel 2 (McBSP RX)). I queue up a SPI TX/RX by configuring both channels and their DMA buffers, then forcing the DMA via software start the transfer process. I repost the SPI service routine when the RX channel interrupts the CPU (the SPI transaction is guaranteed through if the McBSP intakes the SPI frame). There are maybe 10 - 20 SPI transactions per second. Anywhere between 10 seconds and a minute, the DMA and McBSP experience a stall in the RX path--that is, there are still bytes to be read from the McBSP RX channel, and the status of the DMA channel indicates there are still pending transfer counts, and the RUNSTS for the channel is still logic high. PERINT flag is also asserted. A logic analyzer says the SPI packet made it out on the transmit side and also made it into the RX side. I've looked at the SPI signals, and all timing relationships and waveforms are good. The SPI BRG is only operating at 1 MHz, and the bus length is about an inch, so I really don't think I'm looking at spurious noise as the cause. There are no errors posted in the McBSP either, that indicate an overrun.
It is like the DMA channel just decided not to service the McBSP RX side anymore, mid-transaction. The PERINT flag is set, like the McBSP is requesting service, but the DMA just forgot about it.
I've combed the errata for the chip, and found nothing that would explain this throttling. Any ideas?