Is it possible to manually set up transfers outside of the LLD?
Does wince 6 have a ACPY function?
I stole this code from somewhere and can't get it to work aaargh
VOID Edma3Init()
{
RETAILMSG(TRUE, (TEXT("DEVICE_EDMA3Init+\r\n")));
// following init lines from http://processors.wiki.ti.com/index.php/Programming_EDMA_without_EDMA3LLD_package
EDMA30->QUEPRI = 0x10;
EDMA30->QWMTHRA =(16<<8u)|(16 & 0xFF);
EDMA30->QEMCR = 0xFFFFFFFF;
EDMA30->IECR = 0xFFFFFFFF;
EDMA30->ICR = 0xFFFFFFFF;
EDMA30->CCERRCLR = 0xFFFFFFFF;
EDMA30->QDMAQNUM=0x0;
// step 1. set up parameters in PARAM0
EDMA3PARAM0->OPT = 0x0010000c; // AB sync, static, TCC=0
EDMA3PARAM0->SRC_DST_BIDX = ACNT << 16; // set DST BIDX = ACNT, SRC = 0
EDMA3PARAM0->LINK_BCNTRLD = 0xffff; // null link address
EDMA3PARAM0->SRC_DST_CIDX = 0;
EDMA3PARAM0->CCNT = 1;
EDMA30->QCHMAP[0] = 3 << 2; // QDMA0 mapped to PARAM0, trigger on DST reg update
EDMA30->QEESR = 1; // enable events for QDMA0
RETAILMSG(TRUE, (TEXT("DEVICE_EDMA3Init-\r\n")));
}
// QDMA function using AB sync transfer
VOID NandEdmaRead(UINT8 *src, UINT8 *pDest, UINT32 numBytes)
{
UINT32 numB = numBytes / ACNT;
RETAILMSG(TRUE, (TEXT("LOCAL_QDMA_from_NAND+\r\n")));
// step 1. set source register
EDMA3PARAM0->SRC = (UINT32) src;
// step 2. set count
EDMA3PARAM0->A_B_CNT = ACNT | (numB << 16);
// step 3. set destination address
// also triggers QDMA transfer
EDMA3PARAM0->DST = (UINT32) pDest;
// step 4. wait until QDMA finished, TCC 0
// wait for the nand chip to finish
EDMA30->ESR = 1;
// check the edma30 register
while (0 == (EDMA30->IPR & 1));
// step 4a. clear TCC 0
EDMA30->ICR = 1;
RETAILMSG(TRUE, (TEXT("LOCAL_QDMA_from_NAND-\r\n")));
}