UART_DMA
总览
本示例主要介绍通过UART0使用DMA方式收发数据。
准备及使用步骤
- 使用步骤:
- 插入将板子的USB电源线,USB电源线默认连接UART0;
- 编译
customer_app/periperal/demo_uart
工程并下载工程,编译命令:genromap <chip name>
,<chip name>可选择BL602
,BL702
;- 打开一个串口终端窗口(波特率为2000000,用于接收和发送uart消息);
- 串口终端输入
demo_hosal_uart_dma
,表示启动 UART_DMA的demo;- 此时demo会通过UART0的DMA TX模式发送 "Please input 16 bytes" 字符串,提示用户需要输入16个字节字符进行下一步;
- 当用户输入 "1234567890123456" 16个字符后,UART0会通过DMA RX方式接收16个字符并打印。
应用实例
- 通过
HOSAL_UART_DEV_DECL
接口定义一个uart_dev的uart设备,并初始化uart_id, tx_pin, rx_pin以及波特率为2000000。
/**
* Define a UART device,
* TX pin : 16
* RX pin : 7
* baud : 2000000
*/
HOSAL_UART_DEV_DECL(uart_dev, uart_id, 16, 7, 2000000);
- 通过
hosal_uart_init
接口初始化硬件uart_dev设备。
/* Uart init device */
hosal_uart_init(&uart_dev);
- 通过
hosal_uart_callback_set
接口设置DMA方式的TX和RX中断回调,该回调只会在DMA传输完成时进入。
/* Set DMA TX RX transmission complete interrupt callback */
hosal_uart_callback_set(&uart_dev, HOSAL_UART_TX_DMA_CALLBACK,
__uart_tx_dma_callback, &uart_dev);
hosal_uart_callback_set(&uart_dev, HOSAL_UART_RX_DMA_CALLBACK,
__uart_rx_dma_callback, &uart_dev);
- 通过
hosal_uart_ioctl
HOSAL_UART_DMA_TX_START以及HOSAL_UART_DMA_RX_START分别启动DMA的TX传输以及RX传输,txdam_cfg和rxdam_cfg分别是DMA的TX配置以及RX配置。其中,txdam_cfg.dma_buf指向的为DMA TX的源地址,txdam_cfg.dma_buf_size为本次DMA TX的传输长度;rxdam_cfg.dma_buf指向的为DMA RX的目的地址,rxdam_cfg.dma_buf_size为本次DMA RX的传输长度。
hosal_uart_dma_cfg_t txdam_cfg = {
.dma_buf = g_tx_buf,
.dma_buf_size = sizeof(g_tx_buf),
};
hosal_uart_dma_cfg_t rxdam_cfg = {
.dma_buf = g_rx_buf,
.dma_buf_size = sizeof(g_rx_buf),
};
/* Start a UART TX DMA transfer */
hosal_uart_ioctl(&uart_dev, HOSAL_UART_DMA_TX_START, &txdam_cfg);
/* Start a UART RX DMA transfer */
hosal_uart_ioctl(&uart_dev, HOSAL_UART_DMA_RX_START, &rxdam_cfg);