.. _uart_dma-index: UART_DMA ================== 总览 ---------------- 本示例主要介绍通过UART0使用DMA方式收发数据。 准备及使用步骤 ---------------- - 使用步骤: - 插入将板子的USB电源线,USB电源线默认连接UART0; - 编译 ``customer_app/periperal/demo_uart`` 工程并下载工程,编译命令: ``genromap ``,可选择 ``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个字符并打印。 .. figure:: imgs/image3.png :alt: 应用实例 ---------------- - 通过 ``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);