Synopsys APB UART协议总结及实例操作

一、概述

本文主要讲解Synopsys APB UART Databook中常见寄存器的功能,讲述UART读写流程。

二、协议解析

2.1 常用字段解析
字段说明
Start bit固定 1 bit,低电平
Data bits5 / 6 / 7 / 8
ParityNone / Even / Odd
Stop bits1 / 1.5 / 2
错误含义
Parity Error校验位错误
Framing ErrorStop bit 不正确
Overrun ErrorFIFO 满,数据被覆盖
BreakRX 线长时间为 0
2.2 具体寄存器解析
OffsetDLAB寄存器全名
0x00RBR / THRRX Buffer / TX Holding
0x01DLLDivisor Latch Low
0x10IERInterrupt Enable
0x11DLMDivisor Latch High
0x2xIIR ® / FCR (W)Interrupt ID / FIFO Control
0x3xLCRLine Control
0x4xMCRModem Control
0x5xLSRLine Status
0x6xMSRModem Status
0x7xSCRScratch

DLAB 是用来“切换寄存器含义”的一位开关,用于寄存器复用的场景。
位置:LCR[7]
名称:Divisor Latch Access Bit
作用:决定 offset 0x0 / 0x1 访问的是“数据寄存器”还是“波特率分频寄存器”

信号用途是否实时
RTS / CTS数据流控✅ 实时
DTR / DSR状态指示❌ 非实时
1. RBR / THR(0x0)

RBR – Receive Buffer Register(只读)
读一个字节
从 RX FIFO 取数据

THR – Transmit Holding Register(只写)
写一个字节
推入 TX FIFO
Note:读0x0则是从rx buffer中取数据,写则是写tx buffer。

📌 特点:
不直接访问 FIFO
FIFO 深度由硬件管理

2. DLL / DLM(0x0 / 0x1,DLAB=1)

用途:波特率设置
公式:
baud = input_clock / (16 × divisor)
divisor = (DLM << 8) | DLL

📌 示例:
input_clock = 1.8432 MHz
baud = 115200
divisor = 1

Note:
baud中16的含义是每隔 16 个 sample_clk 取 1 次

sample_clk:  |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|
start bit:   0 0 0 0 0 0 0 [0] 0 0 0 0 0 0 0 0
                              ↑ 第 8 个 sample

data bit 0:  x x x x x x x [D0] x x x x x x x x
                               ↑ 再过 16
3. IER – Interrupt Enable Register(0x1)
Bit名称含义
0ERBFIRX data available
1ETBEITX holding empty
2ELSILine status
3EDSSIModem status
4. IIR / FCR(0x2,重点混用)

IIR(读)

Bit含义
00 = 有中断
3:1中断类型
7:6FIFO 状态

FCR(写)

Bit含义
0FIFO enable
1RX FIFO reset
2TX FIFO reset
7:6RX trigger level

📌 同 offset 不同方向
读 → IIR
写 → FCR

5. LCR – Line Control Register(0x3)

决定帧格式 & DLAB

Bit含义
1:0Data bits
2Stop bits
3Parity enable
4Even parity
7DLAB

📌 改波特率流程:

设置 DLAB=1
写 DLL/DLM
清 DLAB
6. MCR – Modem Control Register(0x4)
Bit含义
0 DTR
1RTS
4Loopback

📌 RTS 用于 硬件流控
📌 Loopback 用于自测

7. LSR – Line Status Register(0x5)⭐

调试最常用寄存器

Bit含义
0Data Ready
1Overrun Error
2Parity Error
3Framing Error
5THR Empty
6TX Empty

📌 判断:
能不能写
有没有数据
有没有丢数据

8. MSR – Modem Status Register(0x6)
Bit含义
0ΔCTS
1ΔDSR
4CTS
5DSR
7DCD

📌 DSR / CTS 的实时状态在这里

9. SCR – Scratch Register(0x7)

无功能
驱动测试用
可当软件标记

三、读写流程

3.1 写流程

在这里插入图片描述

3.2 读流程

在这里插入图片描述

3.3 简化流程总结

1️⃣ 初始化 UART

  • disable interrupt
  • set DLAB
  • set baud rate
  • clear DLAB
  • set frame format
  • enable FIFO
  • set RX trigger
  • enable interrupt

2️⃣ 发送数据
while (!(LSR & THR_EMPTY));
write(THR, ch);

3️⃣ 接收数据
if (LSR & DATA_READY)
ch = read(RBR);

四、其他相关链接

1. Synopsys APB I2C协议总结
2. SPI协议详细总结附实例图文讲解通信过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值