Hi,
I try to modify uart_edma example project to a SYSBIOS project on OMAPL138 LCDK. When I find some problems, I have to back to look into detail about EDMA configuration.
The example project has the following code:
..........................
int main(void)
{
volatile char enter[] = "\r\nPlease Enter 20 bytes from keyboard\r\n";
volatile char buffer[RX_BUFFER_SIZE];
unsigned int buffLength = 0;
/* Initialize EDMA3 Controller */
EDMA3Initialize();
/* Initialize UART */
UARTStdioInit();
/* Request DMA Channel and TCC for UART Transmit*/
EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,
EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX,
EVT_QUEUE_NUM);
/* Registering Callback Function for TX*/
cb_Fxn[EDMA3_CHA_UART2_TX] = &callback;
/* Request DMA Channel and TCC for UART Receive */
EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,
EDMA3_CHA_UART2_RX, EDMA3_CHA_UART2_RX,
EVT_QUEUE_NUM);
/* Registering Callback Function for RX*/
cb_Fxn[EDMA3_CHA_UART2_RX] = &callback;
/* Used for bCnt */
buffLength = strlen((const char *) enter);
/* Transmit Data for Enter Message */
UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX,
enter, buffLength);
/* Enabling UART in DMA Mode*/
UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \
UART_DMAMODE | \
UART_FIFO_MODE );
/* Wait for control to return from call-back function */
I try to split to one time 39 char EDMA transmission to two separate times EDMA transmission, but it fails. The code is:
/* Transmit Data for Enter Message */
UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX,
enter, buffLength-10);
/* Enabling UART in DMA Mode*/
UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \
UART_DMAMODE | \
UART_FIFO_MODE );
/* Transmit Data for Enter Message */
UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX,
enter+10, 10);
/* Enabling UART in DMA Mode*/
UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \
UART_DMAMODE | \
UART_FIFO_MODE );
In fact, it will send out the last 10 char if it continues run, or the first 29 char if steps over. Could you tell me the reason?
Thanks,