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发不出来