2. T113 UART 硬件特性:寄存器映射、FIFO 深度、波特率发生器、中断与 DMA 请求线

全志 T113 芯片内部集成了 8 路独立 UART 控制器(UART0 ~ UART7)。其中 UART0 固定用于调试串口(通常与 SD 卡启动引脚复用),UART1 ~ UART7 可作为通用异步收发接口。本章深入分析 UART 模块的硬件寄存器布局、FIFO 缓冲机制、波特率发生原理以及中断/DMA 请求线的硬件连接,为后续 DMA 模式驱动配置奠定硬件基础。

2.1 UART 模块寄存器映射

每个 UART 控制器占用 4KB 地址空间,基地址由芯片内存映射表定义。UART0 基地址固定为 0x02500000,UART1 ~ UART7 依次偏移 0x10000。寄存器采用 32 位对齐访问,小端字节序。

偏移地址寄存器名称宽度复位值功能描述
0x00USR320x00000060UART 状态寄存器(含 FIFO 状态位)
0x04UCR320x00000000UART 控制寄存器(使能、模式、DMA 使能)
0x08UIBR320x00000000整数波特率分频寄存器
0x0CUFBR320x00000000小数波特率分频寄存器
0x10ULCR320x00000000线路控制寄存器(数据位、停止位、校验)
0x14UMCR320x00000000调制解调器控制寄存器
0x18ULSR320x00000060线路状态寄存器(含错误标志)
0x1CUMSR320x00000000调制解调器状态寄存器
0x20USCR320x00000000Scratch 寄存器(软件暂存)
0x24UTX320x00000000发送保持寄存器 / 发送 FIFO 写入端口
0x28URX320x00000000接收缓冲寄存器 / 接收 FIFO 读取端口
0x2CUIER320x00000000中断使能寄存器
0x30UIIR320x00000001中断标识寄存器(只读,含 FIFO 超时标志)
0x34UFCR320x00000000FIFO 控制寄存器(触发阈值、复位、DMA 模式)
0x38UART_DLCR320x00000000DMA 链路控制寄存器(DMA 请求使能)
关键寄存器提示: 在 DMA 模式下,UFCR 的 bit[3](DMA 模式使能)和 UART_DLCR 的 bit[0](DMA 请求使能)必须同时置 1,否则 DMA 控制器不会收到请求信号。
UART 模块寄存器空间布局(基地址 + 0x00 ~ 0x3C) USR (0x00) UCR (0x04) UIBR (0x08) UFBR (0x0C) ULCR (0x10) UMCR (0x14) ULSR (0x18) UMSR (0x1C) USCR (0x20) UTX (0x24) URX (0x28) UIER (0x2C) UIIR (0x30) UFCR (0x34) UART_DLCR (0x38) 寄存器功能分组 状态组:USR / ULSR / UMSR / UIIR | 控制组:UCR / ULCR / UMCR / UFCR / UART_DLCR 波特率组:UIBR / UFBR | 数据组:UTX / URX | 中断组:UIER / UIIR

2.2 FIFO 深度与触发阈值

T113 UART 的发送和接收各配备 64 字节硬件 FIFO。FIFO 深度直接影响 DMA 传输的效率和中断频率。FIFO 控制寄存器 UFCR 的 bit[5:4] 和 bit[7:6] 分别设置接收和发送 FIFO 的触发阈值。

UFCR bit 域阈值选择接收 FIFO 触发字节数发送 FIFO 触发字节数
bit[5:4] (RX Trigger)001 字节—
0116 字节—
1032 字节—
1148 字节—
bit[7:6] (TX Trigger)00—16 字节空余
01—32 字节空余
10—48 字节空余
11—56 字节空余
DMA 模式推荐配置: 接收触发阈值设为 32 字节(UFCR bit[5:4] = 10),发送触发阈值设为 48 字节空余(UFCR bit[7:6] = 10)。这样 DMA 每次搬运 32 字节,既能减少中断次数,又不会因 FIFO 过满导致溢出。
FIFO 触发阈值与 DMA 搬运流程(接收方向) 接收 FIFO (64 字节) 数据从 RXD 移入 触发阈值:32 字节 FIFO 满标志:64 字节 FIFO 达到阈值 触发 DMA 请求 DMA 控制器 读取 FIFO 数据 每次搬运 32 字节 写入内存缓冲区 DMA 传输完成 触发完成中断 内存 接收缓冲区 环形队列 阈值设置原则:阈值越低,响应越快但中断越频繁;阈值越高,吞吐量越大但延迟增加。DMA 模式下推荐 32 字节平衡点。

2.3 波特率发生器

T113 UART 的波特率发生器基于一个 16 位整数分频器和一个 4 位小数分频器,配合可选的 8 倍或 16 倍过采样模式。波特率计算公式如下:

// 波特率计算公式
// 过采样率 = 16(标准模式)或 8(高速模式)
// 时钟源 = APB 总线时钟(通常 100 MHz 或 200 MHz)

baud_rate = clock_source / (oversample_rate × (div_int + div_frac / 16))

// 其中:
//   div_int  = UIBR 寄存器值(0 ~ 65535)
//   div_frac = UFBR 寄存器值(0 ~ 15)
//   oversample_rate = 16(ULCR bit[7] = 0)或 8(ULCR bit[7] = 1)
目标波特率时钟源 (MHz)过采样率div_intdiv_frac实际波特率误差
11520010016544115207+0.006%
92160010016612921659+0.006%
3000000100843299880-0.04%
40000001008324000000.00%
高速模式注意事项: 当使用 8 倍过采样(ULCR bit[7] = 1)时,最大波特率可达 12.5 Mbps(时钟源 100 MHz)。但此时接收器的抗干扰能力下降,建议在短距离、低噪声环境下使用。DMA 模式下推荐使用 16 倍过采样以保证数据可靠性。
波特率发生器硬件结构 APB 时钟 100 / 200 MHz 16 位整数分频器 UIBR (0 ~ 65535) 4 位小数分频器 UFBR (0 ~ 15) 过采样选择 ×8 / ×16 波特率 = APB_CLK / (oversample × (UIBR + UFBR/16)) 小数分频可将波特率误差控制在 ±0.1% 以内,远优于传统 16 位整数分频器

2.4 中断与 DMA 请求线

每个 UART 控制器独立产生中断请求和 DMA 请求。中断请求线连接到 GIC(通用中断控制器),DMA 请求线连接到 DMA 控制器。两者在硬件上并行存在,驱动可以选择中断模式、DMA 模式或混合模式。

2.4.1 中断请求线

UART 实例中断号 (SPI)中断类型触发方式
UART032SPI电平触发
UART133SPI电平触发
UART234SPI电平触发
UART335SPI电平触发
UART436SPI电平触发
UART537SPI电平触发
UART638SPI电平触发
UART739SPI电平触发

中断使能寄存器 UIER 控制以下中断源的使能:

  • bit[0]:接收数据可用中断(RX 中断)
  • bit[1]:发送保持寄存器空中断(TX 中断)
  • bit[2]:接收线路状态中断(错误中断)
  • bit[3]:调制解调器状态中断
  • bit[4]:FIFO 超时中断(接收 FIFO 非空但未达到阈值时触发)

2.4.2 DMA 请求线

UART 模块为发送和接收分别提供独立的 DMA 请求线。DMA 请求的使能由 UART_DLCR 寄存器控制:

// UART_DLCR 寄存器定义 (偏移 0x38)
// bit[0] : RX_DMA_EN   - 接收 DMA 请求使能
// bit[1] : TX_DMA_EN   - 发送 DMA 请求使能
// bit[2] : RX_DMA_MODE - 接收 DMA 模式 (0: 单次模式, 1: 突发模式)
// bit[3] : TX_DMA_MODE - 发送 DMA 模式 (0: 单次模式, 1: 突发模式)

// DMA 模式配置示例
#define UART_DLCR_RX_DMA_EN    (1 << 0)
#define UART_DLCR_TX_DMA_EN    (1 << 1)
#define UART_DLCR_RX_BURST     (1 << 2)
#define UART_DLCR_TX_BURST     (1 << 3)

// 使能接收和发送 DMA,均使用突发模式
writel(UART_DLCR_RX_DMA_EN | UART_DLCR_TX_DMA_EN |
       UART_DLCR_RX_BURST | UART_DLCR_TX_BURST,
       base + UART_DLCR);
突发模式 vs 单次模式: 突发模式下,DMA 控制器在获得总线控制权后连续搬运多个数据(通常为 4 或 8 个 32 位字),总线利用率更高。单次模式每次只搬运 1 个数据,适合低延迟场景。DMA 驱动中推荐使用突发模式以获得更高吞吐量。
UART 中断与 DMA 请求线硬件架构 UART 控制器 发送 FIFO (64B) 接收 FIFO (64B) 波特率发生器 控制/状态寄存器 中断/DMA 逻辑 中断请求 GIC 中断控制器 SPI #32~39 CPU 核心 中断处理 DMA 请求 DMA 控制器 通道 0~7 内存访问 ← 上一章 📖 返回目录 下一章 →