Other Parts Discussed in Thread: OMAPL138
I’m trying to use the EDMA3 to move data received by the McASP via the AFIFO on the OMAPL-138 and am seeing some strange behavior. I’m using 4 McASP (non-contiguous) inputs and data will be received simultaneously on each input in burst mode. I want the EDMA3 to move the data out of the AFIFO after each McASP input has received 4 32-bit values. In the Read FIFO control word I have RNUMDMA set to 4 and RNUMEVT set to 16.
On the EDMA3 side, I have the PaRAM set configured as follows:
- OPT = 0x0010004 (AB-sync)
- SRC = 0x01D0200 (McASP AFIFO address)
- A_B_CNT = 0x0010004 (A = 4, B = 16)
- DST = 0x11819930 (destination buffer address)
- SRC_DST_BIDX = 0x00040000 (DST BIDX = 4, SRC BIDX = 0)
- LINK_BCNTRLD = 0x0000FFFF (Link = 0xFFFF)
- SRC_DST_CIDX = 0x00000000 (SRC/DEST CIDX = 0)
- CCNT = 0x00000001 (CCNT = 1)
With this configuration, when the DMA transfer executes it appears that 20 32-bit values get written to the destination buffer (not the 16 specified by the B value) and most of the values are incorrect. They are the last value read from the AFIFO, which I’m assuming means many more than 16 reads from the AFIFO are being executed.
After much experimenting, I’ve found that setting A to 1 and B to 15 will result in 16 32-bit values being moved from the AFIFO to the destination buffer. I’m struggling to understand why this is. Specifically, I’m wondering:
If A is the size of the data in bytes, why does the value 1 work here, and how does the EDMA know the data is actually 32 bits?
Why does B need to be 15 to move 16 values?
Any explanations or insights about what might be going on would be greatly appreciated!
Dave Hauge