I'm adapting the DMA BlockMove example to use the ESCIA A to transmit data.
I can transmit over the ESCIA with out DMA. However, nothing is transmitted when attempting to use the DMA engine
I'm sure it's something minor. Any idea why DMA isn't sending data to the ESCIA for transmit?
The inner for loop completes but not the outer while loop
#include "MPC5566.h"
#include "esci.h"
const uint8_t SourceData[] = {"Hello WorldDMA\r\n"};
uint8_t Destination = 0;
void initTCD18(void) {
EDMA.TCD[18].SADDR = (vuint32_t) &SourceData;
EDMA.TCD[18].SSIZE = 0;
EDMA.TCD[18].SOFF = 1;
EDMA.TCD[18].SLAST = -12;
EDMA.TCD[18].SMOD = 0;
EDMA.TCD[18].DADDR = (vuint32_t) &Destination;
EDMA.TCD[18].DSIZE = 0;
EDMA.TCD[18].DOFF = 0;
EDMA.TCD[18].DLAST_SGA = 0;
EDMA.TCD[18].DMOD = 0;
EDMA.TCD[18].NBYTES = 1;
EDMA.TCD[18].BITER = 12;
EDMA.TCD[18].CITER = 12;
EDMA.TCD[18].D_REQ = 1;
EDMA.TCD[18].INT_HALF = 0;
EDMA.TCD[18].INT_MAJ = 0;
EDMA.TCD[18].CITERE_LINK = 0;
EDMA.TCD[18].BITERE_LINK = 0;
EDMA.TCD[18].MAJORE_LINK = 0;
EDMA.TCD[18].E_SG = 0;
EDMA.TCD[18].BWC = 0;
EDMA.TCD[18].START = 0;
EDMA.TCD[18].DONE = 0;
EDMA.TCD[18].ACTIVE = 0;
}
int main(void) {
volatile int i = 0;
esci_init_default(ESCI_A_ID);
esci_setBaudRate(ESCI_A_ID, 9600);
WriteUARTN("hello world2\r\n", 13);
initTCD0();
EDMA.CR.R = 0x0000E400;
EDMA.CPR[18].R = 0x0;
EDMA.SERQR.R = 18;
EDMA.SSBR.R = 18;
while (EDMA.TCD[18].CITER != 1)
{
while ((EDMA.TCD[18].START == 1) | (EDMA.TCD[18].ACTIVE == 1)) {}
EDMA.SSBR.R = 18;
}
for (;;)
{
i++;
}
}