Part Number:TM4C1294NCPDT
Tool/software: Code Composer Studio
Hii,
I'am transferring data from memory to uart by using udma controller.If i'am enabling the loop back by using (HWREG(UART1_BASE + UART_O_CTL) |= UART_CTL_LBE) then we are able to see the data in ui8RxBufA,ui8RxBufB buffers but we are not able to get the transferred data in uart com port.
#define MEM_BUFFER_SIZE 1024
#define UART_TXBUF_SIZE 256
#define UART_RXBUF_SIZE 256
static uint8_t g_ui8TxBuf[UART_TXBUF_SIZE];
static uint8_t g_ui8RxBufA[UART_RXBUF_SIZE];
static uint8_t g_ui8RxBufB[UART_RXBUF_SIZE];
static uint32_t g_ui32RxBufACount = 0;
static uint32_t g_ui32RxBufBCount = 0;
void UART1IntHandler(void)
{
uint32_t ui32Status;
uint32_t ui32Mode;
ui32Status = UARTIntStatus(UART1_BASE, 1);
UARTIntClear(UART1_BASE, ui32Status);
ui32Mode = uDMAChannelModeGet(UDMA_CHANNEL_UART1RX | UDMA_PRI_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
g_ui32RxBufACount++;
uDMAChannelTransferSet(UDMA_CHANNEL_UART1RX | UDMA_PRI_SELECT,UDMA_MODE_PINGPONG,(void *)(UART1_BASE + UART_O_DR),g_ui8RxBufA, sizeof(g_ui8RxBufA));
}
ui32Mode = uDMAChannelModeGet(UDMA_CHANNEL_UART1RX | UDMA_ALT_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
g_ui32RxBufBCount++;
uDMAChannelTransferSet(UDMA_CHANNEL_UART1RX | UDMA_ALT_SELECT,UDMA_MODE_PINGPONG,(void *)(UART1_BASE + UART_O_DR),g_ui8RxBufB, sizeof(g_ui8RxBufB));
}
if(!uDMAChannelIsEnabled(UDMA_CHANNEL_UART1TX))
{
uDMAChannelTransferSet(UDMA_CHANNEL_UART1TX | UDMA_PRI_SELECT,UDMA_MODE_BASIC, g_ui8TxBuf,(void *)(UART1_BASE + UART_O_DR),sizeof(g_ui8TxBuf));
uDMAChannelEnable(UDMA_CHANNEL_UART1TX);
}
}
void InitUART1Transfer(void)
{
uint_fast16_t ui16Idx;
for(ui16Idx = 0; ui16Idx < UART_TXBUF_SIZE; ui16Idx++)
g_ui8TxBuf[ui16Idx] = 'A';
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART1);
UARTConfigSetExpClk(UART1_BASE, ui32SysClkFreq, 115200,UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE);
UARTFIFOLevelSet(UART1_BASE, UART_FIFO_TX4_8, UART_FIFO_RX4_8);
UARTEnable(UART1_BASE);
UARTDMAEnable(UART1_BASE, UART_DMA_RX | UART_DMA_TX);
HWREG(UART1_BASE + UART_O_CTL) |= UART_CTL_LBE;
IntEnable(INT_UART1);
///////receiving parameter
uDMAChannelAttributeDisable(UDMA_CHANNEL_UART1RX,UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK);
uDMAChannelControlSet(UDMA_CHANNEL_UART1RX | UDMA_PRI_SELECT,UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_4);
uDMAChannelControlSet(UDMA_CHANNEL_UART1RX | UDMA_ALT_SELECT,UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_4);
uDMAChannelTransferSet(UDMA_CHANNEL_UART1RX | UDMA_PRI_SELECT,UDMA_MODE_PINGPONG,(void *)(UART1_BASE + UART_O_DR),g_ui8RxBufA, sizeof(g_ui8RxBufA));
uDMAChannelTransferSet(UDMA_CHANNEL_UART1RX | UDMA_ALT_SELECT,UDMA_MODE_PINGPONG,(void *)(UART1_BASE + UART_O_DR),g_ui8RxBufB, sizeof(g_ui8RxBufB));
/////////transimitting paramter
uDMAChannelAttributeDisable(UDMA_CHANNEL_UART1TX,UDMA_ATTR_ALTSELECT | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK);
uDMAChannelAttributeEnable(UDMA_CHANNEL_UART1TX, UDMA_ATTR_USEBURST);
uDMAChannelControlSet(UDMA_CHANNEL_UART1TX | UDMA_PRI_SELECT,UDMA_SIZE_8 | UDMA_SRC_INC_8 |UDMA_DST_INC_NONE | UDMA_ARB_4);
uDMAChannelTransferSet(UDMA_CHANNEL_UART1TX | UDMA_PRI_SELECT,UDMA_MODE_BASIC, g_ui8TxBuf,(void *)(UART1_BASE + UART_O_DR),sizeof(g_ui8TxBuf));
uDMAChannelEnable(UDMA_CHANNEL_UART1RX);
uDMAChannelEnable(UDMA_CHANNEL_UART1TX);
UARTIntEnable(UART1_BASE, UART_INT_DMATX | UART_INT_DMATX);
}
int main(void)
{
ui32SysClkFreq = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000);
SysCtlPeripheralClockGating(true);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UDMA);
IntEnable(INT_UDMAERR);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
InitUART1Transfer();
}
![]()
Thanks and Best Regards,
Anamika