Hi!
I want to send data over UART with using the DMA Controller. Directly sending data over "UART_transmitData(EUSCI_A0_MODULE,sendData)" is working. Now I configured the DMA, but it doesn't work. I hope you can help me.
My global variables in a struct globalVar
uint8_t sendBufferUart[8]; uint8_t controlTable[1024];
Here is the code for configuration the dma:
//DMA configuration DMA_enableModule(); DMA_setControlBase(ptrGlobalVar->controlTable); DMA_assignChannel(DMA_CH0_EUSCIA0TX); DMA_disableChannelAttribute(DMA_CH0_EUSCIA0TX, UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK); DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX, UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1); DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX, UDMA_MODE_BASIC, ptrGlobalVar->sendBufferUart ,(void*) UART_getTransmitBufferAddressForDMA(EUSCI_A0_MODULE), 8);
DMA_assignInterrupt(DMA_INT0,0);
Here is the code for Change buffer and sending code:
uint16_t time4MsStamp = globalVar.FourMsCounter + globalVar.OneSecCounter*250; //dma controller for sending data with less cpu using uint8_t *ptrBufferBeginning; ptrBufferBeginning = globalVar.sendBufferUart; ptrBufferBeginning[0] = 0xF0; //first start byte ptrBufferBeginning[1] = 0x0F; //second start byte ptrBufferBeginning[2] = time4MsStamp; ptrBufferBeginning[3] = time4MsStamp >> 8; ptrBufferBeginning[4] = globalVar.curADCresult; ptrBufferBeginning[5] = globalVar.curADCresult >>8; ptrBufferBeginning[6] = 0x00; ptrBufferBeginning[7] = 0xFF; DMA_enableChannel(DMA_CHANNEL_0); DMA_requestChannel(DMA_CHANNEL_0);
Best regards,
Emru