Hello,
I use a TMDXEVM6657LE Evaluation Module to test the C6657's DMA.
My test program simulates a 50MHz-McBSP with 40us-cycle that receives 12Byte per cycle.
The timer releases an Interrupt each 640ns (32 bittimes @ 50MHz) and timerIrq() calls mcbsp0RcvDummy().
mcbsp0RcvDummy() is used to write to dummyMcbspSrc (used as dummy DataReceiveRegister) and triggers the Event (MCMSP0_REVT).
The MCMSP0_REVT triggers the EDMA channel 36, that copies the data wordwise into a 2*12 byte ping-pong buffer (m_mcbspBuffer[PING_AND_PONG][12]).
When the transfer into m_mcbspBuffer[] is finished, a second DMA-transfer is started by chaining. The data from m_mcbspBuffer[PING] is copied into the circular buffer dummyRing[PING], the data from m_mcbspBuffer[PONG] is copied into the circular buffer dummyRing[PONG].
That's how I expected it to work. What I see is the following:
Wen the timer-ISR triggers the McBSP-event, BCNT and DST in PaRam-set 100 (assigned to channel 36) are updated (as expected), but no data is transfered from dummyMcbspSrc to m_mcbspBuffer[].
When one m_mcbspBuffer[] is full, channel 40 is chained by PING and 41 by by PONG. BCNT and DST in PaRam-set 110 for PING and 111 for PONG are updated (as expected), but no data is transfered from m_mcbspBuffer[] to dummyRing[].
My first suspicion was something with MPU. But everthing is at default setting, so I couldn't find anything there.
I attached the complete project as zip-file, so you might reproduce the behaviour.
Thanks,
Norbert