This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

tms320c5517 uart dma 发送数据发不出来?

Expert 2137 points


void UART_INIT()
{
CSL_Status status;
CSL_UartObj uartObj;

CSL_UartSetup uartSetup =
{
/* Input clock freq in MHz */
// 72000000,
// 199066406,
200000000,
/* Baud rate */
115200,
/* Word length of 8 */
CSL_UART_WORD8,
/* To generate 1 stop bit */
0,
/* Disable the parity */
CSL_UART_DISABLE_PARITY,
/* Disable fifo */
/* Enable trigger 14 fifo */
// CSL_UART_FIFO_DMA1_DISABLE_TRIG14,
/* enable trigger 14 fifo */
CSL_UART_FIFO_DMA1_ENABLE_TRIG14,
// CSL_UART_FIFO_DISABLE,
/* Loop Back enable */
CSL_UART_NO_LOOPBACK,
/* No auto flow control*/
CSL_UART_NO_AFE ,
/* No RTS */
CSL_UART_NO_RTS ,
};

UART_init(&uartObj,CSL_UART_INST_0,UART_POLLED);

/* Handle created */
hUart = (CSL_UartHandle)(&uartObj);

/* Configure UART registers using setup structure */
status = UART_setup(hUart,&uartSetup);
UART_Str("\n");
if(CSL_SOK != status)
{
UART_Str("UART_setup failed \n");
}
else
{
UART_Str("UART_setup Successful\n");
}

/* Enable the UART Events */
UART_eventEnable(hUart, CSL_UART_RECVOR_REG_DATA_INTERRUPT); //串口接收中断打开
}

/** brief Configures Dma*\param chanNum - Dma channel number * \return Dma handle **/
CSL_DMA_Handle CSL_configDmaForUart(CSL_DMA_ChannelObj *dmaChanObj, CSL_DMAChanNum chanNum)
{
CSL_DMA_Handle dmaHandle;
CSL_Status status;

dmaHandle = NULL;

/* Initialize Dma */
status = DMA_init();
if (status != CSL_SOK)
{
UART_Str("DMA_init Failed!\n");
}
else
{
UART_Str("DMA_init Successful!\n");
}

/* Open A Dma channel */
dmaHandle = DMA_open(chanNum, dmaChanObj, &status);
if(dmaHandle == NULL)
{
UART_Str("DMA_open Failed!\n");
}
else
{
UART_Str("DMA_open Successful!\n");
}

/* Configure a Dma channel */
status = DMA_config(dmaHandle, &dmaConfig);
if(status != CSL_SOK)
{
UART_Str("DMA_config Failed!\n");
dmaHandle = NULL;
}
else
{
UART_Str("DMA_config Successful!\n");
}

return(dmaHandle);
}

void DMA_INIT()
{
CSL_Status status;
/* Configure the DMA channel for UART transmit */
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514) || defined(CHIP_C5517) || defined(CHIP_C5535) || defined(CHIP_C5545))
dmaConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
dmaConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
dmaConfig.burstLen = CSL_DMA_TXBURST_1WORD;
dmaConfig.trigger = CSL_DMA_EVENT_TRIGGER;
dmaConfig.dmaEvt = CSL_DMA_EVT_UART_TX;
dmaConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
dmaConfig.chanDir = CSL_DMA_WRITE;
dmaConfig.trfType = CSL_DMA_TRANSFER_IO_MEMORY;
dmaConfig.dataLen = CSL_UART_WRBUF_SIZE;
dmaConfig.srcAddr = (Uint32)guartDmaWriteBuf;
dmaConfig.destAddr = (Uint32)&(hUart->uartRegs->THR);

dmaWrHandle = CSL_configDmaForUart(&dmaWrChanObj, CSL_DMA_CHAN4);
// if(dmaWrHandle == NULL)
// {
// UART_Str("DMA Config for Uart Write Failed!\n");
// }
// else
// {
// UART_Str("DMA Config for Uart Write Successful!\n");
// }

/* Start Dma transfer */
status = DMA_start(dmaWrHandle);
// if(status != CSL_SOK)
// {
// UART_Str("Uart Dma Write Failed!!\n");
// }
// else
// {
// UART_Str("Uart Dma Write Successful!!\n");
// }
/* Check transfer complete status */
while(DMA_getStatus(dmaWrHandle));
}

这是我的程序,uart能正常的发出数据,但是uart dma发不出来