云途芯片YTM32B1LE0x_RM文档串口翻译详解
说明
云途芯片原文档(YTM32B1LE0x_RM_v1.5)是全英文的,因为本人英语不好看不懂所以给他翻译了一下,当然只翻译了一下我需要用的的部分,即第十七章串口部分。同时因为本文英文不好所以本文使用了大量的AI翻译。
第十七章 通用串口(UART)
17.1 芯片特定的串口信息
17.1.1 实例化信息
UART模块支持基本的UART功能,包括DMA接口,并支持波特率的×4到×32过采样。
注:不同的过采样率意味着UART模块可以配置为在不同的过采样率下工作,从而适应不同的通信速度要求。例如,如果系统需要更高的数据传输速率,可以选择更高的过采样率来实现。这种灵活性使得UART模块可以用于多种不同的通信场景。
减小过采样的倍数可以产生更精确的波特率,但是减小过采样倍数后,由于采样次数的减少在输入数据发生抖动的时候会导致误码率的增加.
过采样率= 波特率/信号的最高频率成分
17.1.2 信号描述
表17.1:串口信号表
信号 | 描述 | 方向 |
---|---|---|
TXD | 数据发送输出,在线路交换模式(半双工)下可以切换为数据输入 | IO |
RXD | 接收数据输入,在线路交换模式下可以切换为数据输出 | IO |
TXD(发送数据)引脚可以在某些模式下与 RXD(接收数据)引脚交换或RXD(接收数据)引脚可以在线路交换模式下与 TXD(发送数据)引脚交换功能,从而允许同一物理引脚既可以接收数据也可以发送数据。这种模式有时称为 “线路交换模式” 或 “双向通信模式”。在这种模式下,通信双方可以根据需要动态地改变引脚的数据方向,实现更灵活的通信方式。
17.1.3 时钟介绍
表 17.2:串口时钟表
时钟名称 | 描述 |
---|---|
APB Clock | 主设备和从设备寄存器访问的时钟 |
Function Clock | 用于串口波特率生成和数据采样的时钟 |
17.1.4 电源模式
表17.3:串口电源模式表
电源模式 | 描述 |
---|---|
Active | 活动状态,全部的功能 |
Sleep | 当功能时钟可用时继续工作 |
Deepsleep | 当功能时钟可用时继续工作 |
Standby | 当功能时钟可用时继续工作 |
"当功能时钟可用时继续工作"指的是即使在低功耗或睡眠模式下,只要功能时钟(即模块正常工作所需的时钟信号)仍然可用,该设备或模块就可以继续执行其功能。
17.2 介绍
17.2.1 特性
UART模块的功能包括:
支持LIN断裂检测
发送/接收FIFO(数据缓存)
支持通过DMA进行发送/接收
设置波特率
可配置的停止位大小, 1位/2位
可变的帧大小,7位/8位/9位/10位
可以设置数据发送和接收的电平极性
接收数据匹配
线路空闲或地址匹配与唤醒
支持收发线路切换
17.2.2 框图
图17.1 串口框图
17.3 寄存器定义
17.3.1 串口内存映射
UART0 基址 4006a000h
UART1 基址 4006b000h
UART2 基址 4006c000h
表 17.4:串口地址映射
偏移 | 寄存器 | 宽度 | 权限 | 重置值/复位值 |
---|---|---|---|---|
0h | 波特率配置寄存器(BAUD) | 32 | 读写 | 000F0004h |
4h | 控制0寄存器(CTRL0) | 32 | 读写 | 00000000h |
8h | 控制1寄存器(CTRL1) | 32 | 读写 | 10000000h |
ch | 中断标志寄存器(INTF) | 32 | 读写 | 00000006h |
10h | 中断使能寄存器(INTE) | 32 | 读写 | 00000000h |
14h | 匹配配置寄存器(MATCH) | 32 | 读写 | 00000000h |
18h | 数据缓冲寄存器(DATA) | 32 | 读写 | 00010000h |
1ch | TX FIFO配置寄存器(TXFIFO) | 32 | 读写 | 81000000h |
20h | RX FIFO配置寄存器(RXFIFO) | 32 | 读写 | 81000000h |
17.3.1.1 串口波特率(UART BAUD)寄存器
表 17.5: UART 波特率寄存器描述
位域 | 功能 |
---|---|
20-16 OSRVAL |
过采样值配置(Over Sample Value) 过采样值配置,仅在模块禁用时支持更新。 00000b (0x00) – 过采样值为 16 |
12 – 0 DIV |
时钟分频(Clock Divider) 功能时钟分频,用于生成采样波特率时钟。 0000000000000b (0x0000) – 保留 其他时钟分频值是 (功能时钟) / DIV |
17.3.1.2 控制0寄存器(CTRL0)
表 17.5:串口控制0(UART CTRL0)寄存器描述
位域 | 功能描述 |
---|---|
29 TXDMAEN |
TXDMAEN (29位): 发送数据DMA使能
* 0b – DMA请求禁用 |
28 RXDMAEN |
RXDMAEN (28位): 接收数据DMA使能
* 0b – DMA请求禁用 |
21 MATEN |
MATEN (21位): 匹配使能
* 0b – UART数据匹配禁用 |
17-16 MATMOD |
MATMOD (17-16位): 数据匹配模式
* 00b – 地址匹配唤醒 |
9-8 STDMODE |
* STDMODE (9-8位): 待机模式选择
* 00b – 正常工作模式 |
1 TXEN |
TXEN (1位): 发送使能
* 0b – 发送逻辑禁用 |
0 RXEN |
RXEN (0位): 接收使能
* 0b – 接收逻辑禁用 |
17.3.1.3 串口控制0(UART CTRL1)寄存器
表 17.7: UART CTRL1 寄存器描述
位域 | 功能描述 |
---|---|
31 – 30 FRAMESZ |
帧大小 FRAMESZ (31-30位): 控制一帧传输中的位计数。 * 00b – 7位数据模式 |
27 STOPSZ |
停止位大小 STOPSZ (27位): 停止位大小选择。 * 0b – 1位停止位 |
24 TXINV |
发送线路反转 STOPSZ (27位): 停止位大小选择。 * 0b – 1位停止位 |
23 RXINV |
接收线路反转 RXINV (23位): 接收线路反转,改变数据、开始、停止、断开和空闲的极性。 * 0b – 接收数据线没有被反转 |
21 SWAP |
发送和接收线路交换 SWAP (21位): 发送和接收线路交换。 * 0b – 发送和接收线路在正常模式下 |
28 -16 IDLESZ |
空闲大小 IDLESZ (18-16位): 空闲检测字节大小。 * 000b – 1个空闲字符 |
15 BOTHEDGE |
双边沿采样 设置此位允许UART在波特率时钟的上升沿和下降沿采样数据。当BAUD[OSRVAL]小于7时需要设置此位,仅在接收逻辑被禁用时支持更新。 |
10 LBKDEN |
LIN间隔段检测使能(LIN Break Detect Enable) LBKDEN用于使能串口检测LIN间隔段,并且间隔段字符不会被存储在接收缓存(RX FIFO) 中。 0b – LIN 间隔段检测被禁用。 1b – LIN 间隔段检测被启用。 |
9 LBKSZ |
LIN 间隔段检测大小(LIN Break Detection Size) 0b – 间隔段以 9 到 13 个位时间的长度传输。 1b – 点歌段以 12 到 15 个位时间的长度传输。 |
8 MSBF |
最高位优先模式(MSB First Mode) 设置此位将改变后续数据传输的移位顺序。 0b – 在开始位之后,最低位(LSB)首先被移出。 1b – 在开始位之后,最高位(MSB)首先被移出。 |
6 SBK |
发送间隔段(Send Break) 发送LIN断裂,当SBK位被设置时,UART将持续发送LIN断裂,直到SBK位被清除。 |
1 PAREN |
奇偶校验使能(Parity Enable) 设置此位将在Rx和Tx上启用串口硬件奇偶校验位 检查/生成 0b – 硬件奇偶校验特性被禁用。在这种情况下,UART 在发送和接收数据时不会进行奇偶校验。 1b – 硬件奇偶校验特性在接收(RX)和发送(TX)上被启用。启用后,UART 将自动在发送的数据中添加适当的奇偶校验位,并在接收时检查数据的奇偶校验。 |
0 PARSEL |
奇偶校验选择(Parity Selection) 当设置了PARSEL位有效时,PARSEL控制串口使用偶校验或奇校验来检查和生成。 0b – 偶校验。 1b – 奇校验。 |
17.3.1.4:串口中断标志(UART INTF)寄存器
表 17.8: 串口中断(UART INTF) 寄存器描述
位字段 | 功能描述 |
---|---|
17 RXBUSY |
接收忙(RX Busy) 0b-接收线空闲并等待数据 1b-接收正在接收数据。 |
13 RFEIF |
接收FIFO错误中断标志(RX FIFO Error Interrupt Flag) 0b – 未检测到接收FIFO下溢 1b – 检测到接收FIFO下溢 注: 当RX FIFO为空,且系统尝试读取它时,会发生下溢(underflow)。这是一个错误条件,表明试图访问的数据不存在,这可能是由于接收数据被过快地读取或FIFO本身没有正确填充。 |
12 TFEIF |
发送FIFO错误中断标志(TX FIFO Error Interrupt Flag) 接收FIFO满时,向发送FIFO写入数据将会触发溢出,这将设置(置位)溢出中断标志 0b – 未检测到发送FIFO溢出; 1b – 检测到发送FIFO溢出。 |
11 LBKDIF |
LIN间隔段检测中断标志(LIN Break Detected Interrupt Flag) 0b – 未检测到LIN断裂; 1b – 检测到LIN断裂。 |
10 RXEDGEIF |
接收边沿检测中断标志(Receive Edge Detected Interrupt Flag) 0b – 未检测到UART接收活动边沿; 1b – 检测到UART接收活动边沿 |
9 MATIF |
数据匹配中断标志(Data Match Interrupt Flag) 0b – 未检测到UART接收到匹配的数据; 1b – 检测到UART接收到匹配的书数据匹配。 |
7 NOZIF |
噪声中断标志(Noise Interrupt Flag) 0b – 未检测到UART接收噪声; 1b – 检测到UART接收噪声。 |
6 OVRIF |
溢出中断标志(Overrun Interrupt Flag) 当串口的接收缓存(RX FIFO)已满时再接收到新数据,将会设置此位。 注意: 用户在接收FIFO未满之前接收新数据,必须先清除此位。 0b – 未检测到UART RX溢出 1b – 检测到UART RX溢出,并且不会存储新数据 |
5 FEIF |
帧错误中断标志(Frame Error Interrupt Flag) 当数据阶段后未接收到有效的停止位时,将设置FEIF。 0b – 未检测到UART RX帧错误 1b – 检测到UART RX帧错误 |
4 IDLEIF |
空闲中断标志(IDLE Interrupt Enable) “IDLE” 在串口接收线保持高电平时间超过设置的空闲条件时被设置。清除该位后,除非接收到新数据,否则空闲标志不会被再次设置。 0b – 未检测到 UART 接收空闲 1b – 检测到 UART 接收空闲 |
3 PARIF |
奇偶校验中断标志(Parity Check Interrupt Flag) 在硬件计算的奇偶校验位与接收到的数据不匹配时,会发生奇偶校验错误。 0b – 未检测到 UART 接收数据的奇偶校验错误 1b – 检测到 UART 接收数据的奇偶校验错误 |
2 TCIF |
发送完成中断标志(Transmit Complete Interrupt Flag) TCIF 在写入发送数据和开始发送数据时被清除,当发送线(TX线)处于空闲状态时,TCIF 被置位。 0b – 串口发送器忙碌并正在传输数据 1b – 串口发送器处于空闲状态 |
1 TXIF |
发送请求标志(TX Request Flag) 表示发送缓存(TX FIFO)中的字数等于或少于发送缓冲(TX FIFO)的水位线。 0b – 发送缓存(TX FIFO)中的字数大于水位线 1b – 发送缓存(TX FIFO中的字数等于或少于水位线,请求写入新数据 |
0 RXIF |
接收请求标志(RX Request Flag) 表示接收缓存(RX FIFO)中的字数大于接收缓存(RX FIFO)的水位线设置。 0b – 接收缓存(RX FIFO)中的字数等于或少于水位线 1b – 接收缓存(RX FIFO)中的字数大于水位线,应该读取数据寄存器 |
17.3.1.5 中断使能(UART INTE)寄存器
位域 | 功能描述 |
---|---|
13 RFEIE |
接收缓冲错误中断使能(TX FIFO Error Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
12 TFIFOEIE |
发送缓冲错误中断使能(TX FIFO Error Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
11 LBKDIE |
LIN间隔段检测中断使能(LIN Break Detected Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
10 RXEDGEIE |
接收边沿检测中断使能(Receive Edge Detected Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
9 MATIE |
数据匹配中断使能(Data Match Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
7 NOZIE |
噪声中断使能(Overrun Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
6 OVRIE |
溢出中断使能(Frame Error Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
5 FEIE |
帧错误中断使能(Frame Error Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
4 IDLEIE |
空闲中断使能(IDLE Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
3 PARIE |
奇偶校验中断使能(Parity Check Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
2 TCIE |
发送完成中断使能(Transmit Complete Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
1 TXIE |
发送请求数据中断使能(TX Request Data Interrupt Enable) 0b – 中断禁用 1b – 中断启用 |
0 RXIE |
接收请求读取数据中断使能(RX Request Read Data Interrupt Enable)) 0b – 中断禁用 1b – 中断启用 |
17.3.1.6 串口匹配配置(UART MATCH)寄存器
表 17.10: 串口匹配寄存器描述
位域 | 功能描述 |
---|---|
9-0 DATA |
匹配数据(Match Data) 数据匹配比较值 |
17.3.1.7 串口数据(UART DATA)寄存器
读取数据(DATA)寄存器将返回接收缓存中的数据,向数据(DATA)寄存器写入数据将把数据推入发送缓存并等待传输
注意: 这个寄存器只支持32位访问
表 17.11:串口数据寄存器描述
位域 | 功能描述 |
---|---|
16 RXEMPT |
接收FIFO空标志(RX FIFO Empty) 0b-接收缓存不为空,表示可以读取有效的数据。 1b-接收缓存为空,表示从数据(DATA)寄存器读取数据是无效的。 |
15 LINBRK |
发送LIN间隔段(Send LIN Break) 向串口的 LINBRK 位写入数据将使得 串口 发送 LIN 间隔段,而不是数据。 |
9-0 DATA |
数据字段(DATA Field) 读此字段时将从读取缓存中读取,写此字段时将推送到写入缓存中。 |
17.3.1.8 串口写缓存(UART TXFIFO )寄存器
表17.12:串口读缓存(UART TXFIFO )寄存器描述
位域 | 功能描述 |
---|---|
31 EMPTY |
发送缓存为空(FIFO Empty) 当发送缓存中没有数据时,此位被置为1。 1b – 发送缓存为空 |
30 ERROR |
发送缓存错误(TX FIFO Error) 当向空的读取缓存读取数据时,将设置此位 1b – 读缓存有下溢错误 |
26-24 SIZE |
发送缓存大小(TX FIFO Size) 可用的缓存大小是 2^SIZE 个字节 |
15 RESET |
写缓存重置(TX FIFO Reset) 写缓存的地址指针复位 |
14 EN |
发送缓存使能(TX FIFO enable) 0b – 缓存未使能,使用数据缓冲区(buffer) 1b – 缓存使能。 |
10-8 COUNT |
发送缓存中的数据计数(Word Count in TX FIFO) 获取写缓存中当前数据计数 |
2-0 WATER |
发送缓存水位值(Word Count in TX FIFO) 发送缓存中的字数计数值等于或小于水位值时,TXIF位被设置。 |
17.3.1.9 串口读缓存(UART RXFIFO)寄存器
表 17.13:串口读缓存寄存器描述
位域 | 功能描述 |
---|---|
31 EMPTY |
发送缓存为空(FIFO Empty) 当发送缓存中没有数据时,此位被置为1。 1b – 发送缓存为空 |
30 ERROR |
发送缓存错误(TX FIFO Error) 当向满的发送FIFO写入数据时,将设置此位 1b – 发送缓存有溢出错误 |
26-24 SIZE |
发送缓存大小(TX FIFO Size) 可用的FIFO大小是 2^SIZE 个字节 |
15 RESET |
读缓存重置(TX FIFO Reset) 读缓存的地址指针复位 |
14 EN |
读取缓存使能(RX FIFO enable) 0b – 缓存未使能,使用数据缓冲区(buffer) 1b – 缓存使能。 |
10-8 COUNT |
读取缓存中的数据计数(Word Count in TX FIFO) 获取读缓存中当前数据计数 |
2-0 WATER |
读取缓存水位值(RX FIFO Watermark) 当接收FIFO中的字数计数值大于水印值时,RXIF位被设置 |
17.4 功能描述
UART 支持全双工、异步、NRZ 串行通信,并由波特率生成器、发送器和接收器模块组成。发送器和接收器虽然使用同一个波特率生成器,但它们独立操作。
17.4.1 波特率发生器
波特率发生器内的13位模量计数器为接收器和发送器提供波特率时钟。BAUD[DIV]的可写入值为1~8191,它决定了异步串口波特率时钟的时钟分频数。接收器由波特率时钟驱动,而发送器由波特率时钟除以过采样比率生成的位时钟驱动。根据采样比率,接收器的采样率为每比特时间4至32个样本。
17.4.1.1 波特率生成器示意图
图 17.2:波特率生成器示意图
17.4.2 发送器功能描述
发送器的输出TXD默认的空闲状态是逻辑高电平,如果设置了CTRL1[TXINV],则会变为逻辑低电平。通过设置CTRL1[TXINV],发送器的输出会被反转。通过设置CTRL0[TXEN]来启用发送器。然后发送器会保持空闲状态,直到传输数据缓冲区中有数据可用。程序通过向DATA寄存器写入数据来存储数据到传输数据缓冲区中。
发送器的移位寄存器长度根据CTRL1[FRAMESZ]和CTRL1[STOPSZ]的设置而变化,长度从9位到13位不等。例如,如果将CTRL1[FRAMESZ]设置为2’b01,并且清除了CTRL1[STOPSZ],则选择了8位数据模式。在8位数据模式下,移位寄存器包含一个起始位、八个数据位和一个停止位。当发送器的移位寄存器准备好接受一个新字符时,等待在发送数据寄存器中的值会被同步到移位寄存器,并与波特率时钟同步。同时,TX请求(INTF[TXIF])状态标志被设置,以指示可以向DATA寄存器中传输数据缓冲区写入另一个字符。
如果在一个停止位被发送到TXD引脚后,传输数据缓冲区中没有等待发送的新字符,发送器将设置传输完成(INTF[TCIF])标志,并进入空闲模式,等待更多的字符来传输。
向CTRL0[TXEN]写入0不会立即禁用发送器。等待当前正在进行的传输活动将完成,然后发送器将不再发送另一个字符。
17.4.3 接收器功能描述
通过设置 CTRL1[RXINV],接收器输入电平极性会被反转。通过设置 CTRL0[RXEN] 位,启用接收器。字符帧由一个逻辑0的起始位、七到十个数据位(可以是最高位或最低位优先),以及一个或两个逻辑1的停止位组成。
在接收移位寄存器接收到停止位之后,并且只要接收数据寄存器尚未满,数据字符就会被转移到接收数据寄存器中,并设置接收请求(INTF[RXIF])状态标志。如果接收请求(INTF[RXIF])状态标志已经被设置,那么溢出(INTF[OVRIF])状态标志将被设置,并且最后接收到的数据将丢失。
当一个程序检测到接收数据寄存器已满(INTF[RXIF] = 1)时,它通过读取DATA寄存器来获取接收数据寄存器中的数据。
原文
作者:023se