I am supporting a legacy product that is using the 21065L. I would like to replace a memcpy() with a DMA copy to improve the throughput.
The original code is:
UNSIGNED32 *extMem = 0x10000000;
UNSIGNED32 *intMem = 0x0000D000;
memcpy(extMem, intMem, 100);
The DMA code is:
// DMA off
*pDMAC1 = 0;
// set DMA control regs
*pIIEP1 = (UNSIGNED32)(intMem); // internal RAM
*pIMEP1 = 1; // single increment
*pCEP1 = 100; // count
*pEIEP1 = (UNSIGNED32)(extMem); // external RAM
*pEMEP1 = 1; // single increment
*pECEP1 = 100; // count
// turn DMA on
*pDMAC1 = (DEN | TRAN | MASTER);
// wait for DMA to finish, to keep the same flow as with memcpy
while ((*pDMASTAT & DMA7ST) != 0);
When I run this, nothing happens. It doesn't hang, it just falls through with no memory writes at all.
I'm sure it's something simple, as I'm not familiar with this device.