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);