Hi,
I am implementing EDMA3 with UART receive. I just need EDMA3 to move UART received data to a circular buffer. Software will take data out. No interrupts.
After I setting up the EDMA3 with the UART Rx, I typed a few characters on the Hyper Terminal. The EDMA3 does not move data at all.
I used the platform_test's uart code to initialize UART peripherial.
This is my EDMA PaRAM entry settings. I followed EDMA3 Controller User Guide, SPRUG55A, 3.4.1 Non-bursting Peripherals.
void EDMA3_UART_RX_Setup()
{
CSL_TPCC_ParamsetRegs *edma3_ptr = (CSL_TPCC_ParamsetRegs*)EDMA3_CH_ADDR(EDMA_PARAM_TABLE_NUM_URX0);
edma3_ptr->OPT = CSL_EDMA3_OPT_MAKE(
0, //FALSE, // itcchEn
0, //FALSE, // tcchEn
0, //INTMDT_XFR_COMPLETE_INT_DISABLE, // itcintEn
1, //XFR_COMPLETE_INT_ENABLE, // icintEn
4, //CSL_TPCC2_URXEVT, // tcc
0, //CSL_EDMA3_TCC_NORMAL, // tccMode
0, //CSL_EDMA3_FIFOWIDTH_NONE, // fwid
0, //FALSE, // stat
0, //CSL_EDMA3_SYNC_A, // syncDim
0, //CSL_EDMA3_ADDRMODE_INCR, // dam
0 //CSL_EDMA3_ADDRMODE_INCR // sam );
edma3_ptr->SRC = CSL_UART_REGS;
edma3_ptr->A_B_CNT = CSL_EDMA3_CNT_MAKE(1, RX_BUFFER_SIZE);
edma3_ptr->DST = (Uint32)global_address((Uint32)&Rx_Cir_Buf[0]);
edma3_ptr->SRC_DST_BIDX = CSL_EDMA3_BIDX_MAKE(1, 0);
edma3_ptr->LINK_BCNTRLD = CSL_EDMA3_LINKBCNTRLD_MAKE(0xFFFF, 0);
edma3_ptr->SRC_DST_CIDX = CSL_EDMA3_CIDX_MAKE(0, 0);
edma3_ptr->CCNT = 1;
}
My UART0 settings are here. It is setup by calling UartInit() in C:\ti\pdk_C6657_1_1_2_5\packages\ti\platform\evmc6657l\platform_lib\src\evmc665x_uart.c.
What might be my problems? I have a feeling that my EDMA3 does not get UART's receive event.
Thank you for your time.
Regards,
Steve