I have been using the edma3 on the dm6435 to do subframe extraction (see spru987 section 3.2) successfully for some time now using my own code. I recently tried to use the data sorting example (section 3.3) to rotate an image 90 degrees CCW in memory. It works... for some images. And it almost works for the other images, leaving a few columns of junk in the rotated image. I tried looking through spru987 but couldn't find any alignment or size requirements for the transfer. The image that "works" has length & width that are multiples of 32 bytes, and the one that "almost works" has been passed through a binomial filter that culls pixels from the side, so a 478 x 1582 input image results in a 1582 x 478 image whose last 16 columns are junk. I have looked at the edma registers using code composer and didn't see any error bits set, but there are obviously a LOT of registers to look at. Also, this is the only active edma channel (channel 7) in use at the time.
Any idea what is causing this and how to solve it?
edit: here is my param setup:
param.opt =
(1 << 23) | // Chain intermediate xfers (1 = yes)
(0 << 22) | // Chain on last xfer in set (1 = yes)
(0 << 21) | // Intermediate xfer interrupts (1 = yes)
(1 << 20) | // Xfer complete interrupts (1= yes)
(0 << 18) | // Reserved bits
(ROI_ROTATE_DMA_CHANNEL << 12) | // TCC code (chain to self)
(0 << 11) | // Intermediate xfer end (1 = yes)
(0 << 4) | // FIFO width/ reserved, not applicable
(0 << 3) | // Static (1 = static, no chain/link updates)
(1 << 2) | // A-B sync transfers (1 = A-B, 0 = A)
(0 << 1) | // Inc destination address mode only (must be 0)
(0 << 0); // Inc source address mode only (must be 0)
param.src = (Uint32)pSrc;
param.a_cnt = 1;
param.b_cnt = sCols;
param.dst = (Uint32)(pDest + ((Int32)(sCols - 1) * (Int32)sRows));
param.src_bidx = 1;
param.dst_bidx = -1 * sRows;
param.link = 0xffff;
param.bcntrld = 0;
param.src_cidx = sCols;
param.dst_cidx = 1;
param.ccnt = sRows;