I'm following the UART DMA example in LPCOpen for the LPC15xx.
I have a descriptor that looks like this:
/* Descriptor for the channels we need */
dmaRXDesc[0].source = DMA_ADDR(&LPC_USART0->RXDATA);
dmaRXDesc[0].dest = DMA_ADDR(&RxBuf[0] + RX_BUF_SIZE - 1);
dmaRXDesc[0].next = DMA_ADDR(NULL);
dmaRXDesc[0].xfercfg = DMA_XFERCFG_SETINTA
| DMA_XFERCFG_WIDTH_8
| DMA_XFERCFG_SRCINC_0
| DMA_XFERCFG_DSTINC_1
| DMA_XFERCFG_XFERCOUNT(RX_BUF_SIZE);
When I call
Chip_DMA_SetupChannelTransfer(LPC_DMA, DMAREQ_USART0_RX, dmaRXDesc[StartDescIdx].xfercfg);
the active flag for the channel gets set immediately. I don't understand this. If I haven't set DMA_XFERCFG_CFGVALID, shouldn't I have to do something else to make the channel active?
I want to do all the DMA configuration in advance, and then have the UART ISR trigger the pre-configured DMA transfer to start. (I'm monitoring RXBRK and RXDELTABRK in the UART ISR to control when the DMA transfer should start.)
Hi Joseph,
Apologies for the delay, are you still having problems with the DMA?
Thanks in advance for your response!
Best Regards,
Carlos Mendoza
Technical Support Engineer