11.2.3. 编程指南

11.2.3.1. 初始化

步骤1:系统初始化

  • 总线时钟:配置APB时钟。

  • 模块时钟:在CMU中使能UART模块时钟,释放模块复位。

  • IO 配置:配置GPIO复用为UART功能,配置UART引脚上拉模式。

  • 波特率配置:请参考 操作模式

步骤2:控制器参数配置

  • 通过UART_LCR配置数据宽度、停止位、校验类型。

  • 通过UART_FCR复位和使能FIFO,配置触发条件。

  • 通过UART_MCR配置流控方式。

步骤3:中断配置

  • 使用对应中断向量号配置UART中断。

  • 在DMA模式
    • 配置UART_IER为0x00关闭中断。

    • 配置UART_HSK为0xE5选择握手模式。

    • 配置UART_FCR.DMAM选择DMA模式。

    • 设置DMA模块参数及DMA中断请求。

  • 在中断模式
    • 配置UART_IER使能对应中断。

11.2.3.2. 查询模式

发送

  • 向寄存器UART_THR写入数据。

  • 检查UART_USR.TFNF的值,UART_USR.TFNF等于1则可以继续写入,UART_USR.TFNF等于0需等待发送完成。

接收

  • 检查UART_USR.RFNE的值。

  • UART_USR.RFNE等于1时从寄存器UART_RBR中读回接收数据。

  • UART_USR.RFNE等于0完成数据接收。

11.2.3.3. 中断模式

发送

  • 配置UART_IER.ETBEI为1以使能UART发送中断。

  • 向寄存器UART_THR写入数据。

  • 当FIFO中的数据达到触发条件,UART发送中断产生。

  • 检查UART_USR.TFE判断发送FIFO是否为空,当UART_USR.TFE等于1表示发送完成。

  • 配置UART_IER.ETBEI为0关闭中断。

接收

  • 配置UART_IER.ERBFI为1以使能UART接收中断。

  • 当FIFO中的数据达到触发条件,UART接收中断产生。

  • 从UART_RBR中读取接收数据。

  • 检查UART_USR.RFNE,当UART_USR.RFNE等于1则继续读取接收数据。

../../../_images/uart-irq.png

图 11.13 UART IRQ 流程图

11.2.3.4. DMA模式

发送

  • 在初始化流程中配置DMA中断。

  • 配置DMA通道,包括传输源地址,目的地址,传输数据长度,传输类型等,详情参考DMA章节。

  • 在DMA模块中使能发送。

  • 在DMA模块中检查是否发送完成,完成后关闭UART DMA发送。

接收

  • 配置DMA通道,包括传输源地址,目的地址,传输数据长度,传输类型等,详情参考DMA章节。

  • 在DMA模块中使能接收。

  • 在DMA模块中检查是否接收完成,完成后关闭UART DMA接收。

../../../_images/uart-drq.png

图 11.14 UART DRQ 流程图