【嵌入式系统】第11章 LES 硬件介绍(8)通用异步收发器(UART)(东南大学)

目录

异步和同步通信的对比

几个基本概念

1. UART和RS232 RS485之间的关系

2 RS232和RS485之间的关系

13 通用异步收发器(UART)

13.1 结构框图

13.2 信号描述

13.3 功能说明

13.3.1 发送/接收逻辑

13.3.2 波特率的产生

13.3.3 数据传输

13.3.4 串行红外(SIR)

13.3.8 FIFO操作

13.3.9 中断信号

13.3.10 回送操作

13.3.11 DMA 操作


异步和同步通信的对比

1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。


• 2.同步通信效率高;异步通信效率较低。


• 3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。


• 4.同步通信可用于点对多点;异步通信通常只适用于点对点。

几个基本概念

1. RS232 RS485
• 2. UART
• 3. Modbus

它们之间的关系是什么

1. UART和RS232 RS485之间的关系

   公交运行可以简单分成两个部分:1、车站 2、公路其中车站决定了车上装什么(人),怎么发送(班次)等。当汽车跑在路上,就要遵守公路交通的规则,和车站没有关系了。UART就相当于车站,而RS232/RS485则对应于公路的规则。

     UART,是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,

     它的最基本功能,是串行数据和并行数据之间的转换。计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。

    RS232/RS485,是两种不同的电气协议,对电气特性以及物理特性的规定,作用于数据的传输通路上,它并不内含对数据的处理方式。


   最显著的特征是:RS232使用3-15v有效电平,而UART,因为对电气特性并没有规定,所以直接使用CPU使用的电平,就是所谓的TTL电平(可能在0~3.3V之间)。


   电气的特性也决定了线路的连接方式,比如RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而RS485,使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用4根线。但是,无论使用RS232还是RS485,它们与UART是相对独立的,但是由于电气特性的差别,必须要有专用的器件和UART接驳,才能完成数据在线路和UART之间的正常流动。

   抗干扰性:1.. RS485 接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好。 2. RS232 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容 易产生共模干扰,所以抗噪声干扰性弱。

      传输距离:1.RS485 接口的最大传输距离标准值为 1200米(9600bps 时),实际上可达 3000 米。 2. RS232 传输距离有限,最大传输距离标准值为 50 米,实际上也只能用在 15 米左右。


通信能力:1.RS-485 接口在总线上是允许连接多达 128个收发器, 即具有多站能力,这样用户可以利用 单一的RS-485 接口方便地建立起设备网络 。 2.RS-232 只允许一对一通信。

2 RS232和RS485之间的关系

传输速率:1. 传输速率较低,在异步传输时,波特率为20Kbps。 2.RS-485 的数据最高传输速率为 10Mbps 。


信号线:1.RS485 接口组成的半双工网络,一般只需二根信号线。 2.RS-232 口一般只使用 RXD、TXD、GND 三条线,即"发送数据"、"接收数据"和"信号地" 。


共性关联:1.都可通过 DB-9 连接器连接. 2.接口均可采用屏蔽双绞线传输。 3.都是串行通信。 4.通信方式都是全双工。 (一般情况 485 是半双工)

2 MODBUS
     Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。


Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数Modbus设备通信通过串口485接口连接。

13 通用异步收发器(UART)

13.1 结构框图
13.2 信号描述
13.3 功能说明
13.3.1 发送/接收逻辑
13.3.2 波特率的产生
13.3.3 数据传输
13.3.4 串行红外(SIR)
13.3.8 FIFO操作
13.3.9 中断信号
13.3.10 回送操作
13.3.11 DMA 操作

控制器包括八个具有以下特征的通用异步收发器(UART):


■ 可编程的波特率发生器,在常规模式(16 分频)下最高可达 5 Mbps,在高速模式(8 分频)下最高可达 10 Mbps

■ 相互独立的 16×8 发送 (TX) FIFO和接收 (RX)FIFO,可降低中断服务对 CPU 的占用

■ FIFO 长度可编程,包括提供传统双缓冲接口的 1字节深的操作


■ FIFO触发深度有如下级别可选:1/8、1/4、1/2、3/4或7/8;


■ 标准的异步通讯位:起始位、停止位、奇偶校验位;


■ 线中止的产生与检测;

■ 完全可编程的串行接口特性
– 可包含5、6、7或8个数据位
– 可产生/检测奇偶校验位,支持偶校验位、奇校验位、粘着校验位或无校验位
– 可产生1或2个停止位


■ IrDA串行红外(SIR)编解码器
– 可选择采用 IrDA 串行红外 (SIR) 输入输出或普通 UART 输入输出
– 支持 IrDA SAR 编解码功能,半双工时数据传输率最高 115.2 Kbps
– 支持标准的 3/16 位时间以及低功耗位时间(1.41~2.23 μs)
– 可编程的内部时钟发生器,可对参考时钟源进行1~256分频以提供低功耗位时间

■ 支持与 ISO 7816 智能卡的通讯
■ 调制解调器流量控制和状态(在 UART1 模块上)
■ 支持 EIA-485(9 位)
■ 提供标准的基于 FIFO 深度的中断以及发送结束中断
■ 用微型直接内存访问 (μDMA) 有效的传输数据
– 相互独立的发送通道和接收通道
– 当接收 FIFO 中有数据时产生单次请求;当接收 FIFO 到达预设的触发深度时产生触发请求
– 当发送 FIFO 中有空闲单元时产生单次请求;当发送 FIFO 到达预设的触发深度时产生触发请求

13.1 结构框图

13.2 信号描述

下表列出了 UART 模块的外部信号并描述了每个信号的功能。UART 信号通常是 GPIO 信号的备选功能,因此这些管脚在复位时默认设置为 GPIO 信号;只有U0Rx 和 U0Tx 这 2 个管脚默认即为UART 功能。表中“复用管脚/赋值”一列是各UART信号所对应的GPIO管脚。


应对 GPIO 备用功能选择 (GPIOAFSEL) 寄存器的AFSEL 位进行置位以选择 UART 功能。括号中的数字表示必须写入 GPIO 端口控制 (GPIOPCTL) 寄存器(590页)中 PMCn 位域的编码,以便向指定的 GPIO端口引脚分配 UART 信号。有关如何配置 GPIO 的更多信息,请参阅“通用输入/输入端口(GPIOs)”。

13.3 功能说明

•每个 UART 可执行“并-串”和“串-并”转换功能。用户可通过 UART 控制 (UARTCTL) 寄存器的TXE 和 RXE 位对 UART 进行发送和/或接收配置。


•复位后,发送和接收默认都是使能的。在对任一控制寄存器编程之前,必须将 UART 禁能,这可以通过清零 UARTCTL 寄存器的 UARTEN 位来实现。假如在UART发送或接收期间进行此操作,则UART模块会在当前进行的数据会话结束后才停止运行。


•UART模块还包含串行红外(SIR)编解码模块,可直接连接红外收发器实现IrDA SIR物理层。SIR功能通过 UARTCTL 寄存器进行设置。

13.3.1 发送/接收逻辑

发送逻辑单元从发送FIFO取出数据后执行并-串转换。控制逻辑输出串行位流时,最先输出起始位,之后按照控制寄存器的配置依次输出若干数据位(最低有效位在前)、奇偶校验位和停止位。详见图13-2。


接收逻辑单元在检测到有效的起始脉冲后,对接收到的串行位码流执行串-并转换。在接收过程中还要进行溢出错误检测、奇偶校验、帧错误检测、线中止检测,并将这些状态随数据一同写入接收FIFO中。

13.3.2 波特率的产生

   •波特率分频系数是由16位整数部分和6位小数部分组成的22位二进制数。整数部分和小数部分共同确定分频系数,并由此决定位时间。波特率分频值支持小数部分,使得 UART 可以产生各种标准波特率。


•16 位整数通过 UART 波特率分频值整数 (UARTIBRD)寄存器进行加载;而 6 位小数则通过 UART 波特率分频值小数 (UARTFBRD) 寄存器进行加载。


•波特率分频值 (BRD)和系统时钟之间具有以下关系(其中 BRDI 是 BRD 的整数部分,BRDF 是小数部分,之间用一个小数点隔开。)

  BRD = BRDI + BRDF = UARTSysClk / (ClkDiv * 波特率)


式中 UARTSysClk 是连接到 UART 模块的系统时钟,ClkDiv 是一个常数,取值为 16(UARTCTL寄存器的HSE = 0 时)或 8(HSE = 1 时)。


默认情况下,该系统时钟为“时钟控制”中描述的主系统时钟。另外,UART 可根据内部精确振荡器 (PIOSC)计时,不受系统时钟选择的影响。

这使 UART 时钟能够独立于系统时钟 PLL 设置编程。请参考 UARTCC 寄存器获取更多详细信息。

6 位小数部分(即写入 UARTFBRD 寄存器 DIVFRAC 位域的数值)的计算方法是:将波特率除数的小数部分乘以64,之后加 0.5 以抵消舍入误差:

UARTFBRD[DIVFRAC] = integer(BRDF * 64 + 0.5)

UART 模块产生内部波特率参考时钟,其频率为波特率的8 或 16 倍(取决于 UARTCTL 寄存器第5 位 HSE 的设置),分别称为 Baud8 或 Baud16。此参考时钟一方面经过8分频或16分频后产生发送时钟,另一方面在接收过程中用于错误检测。

UARTIBRD 和 UARTFBRD 寄存器与 UART 线控,高字节(UARTLCRH) 寄存器一起组成一个 30 位内部寄存器。这个内部寄存器只在对 UARTLCRH 寄存器执行写操作时才会更新,因此更改波特率除数之后必须写一次 UARTLCRH 寄存器,更改内容才会生效。

更新波特率寄存器时,有如下4种可能的操作序列:
■ 写 UARTIBRD,写 UARTFBRD,写 UARTLCRH;
■ 写 UARTFBRD,写 UARTIBRD,写 UARTLCRH;
■ 写 UARTIBRD,写 UARTLCRH;
■ 写 UARTFBRD,写 UARTLCRH

13.3.3 数据传输

     数据在接收或发送时各保存在16字节深的FIFO中,接收FIFO的每个单元还有额外4位保存状态信息。当需要进行发送时,先将数据写入发送FIFO。若 UART 模块已经使能,则将按 UARTLCRH 寄存器所配置的参数开始发送数据帧。UART模块会持续发送数据,直到发送FIFO中没有可发数据为止。


   数据一经写入发送 FIFO(即,如果该 FIFO 不为空),UART 标志 (UARTFR) 寄存器中的 BUSY 位即会生效,并且在数据发送期间一直保持有效。只有当发送 FIFO 已空、并且最后 1 个字(包括停止位)已经从移位寄存器中发出后,BUSY 位才会失效。即使UART模块不再使能,此标志位也能指示出UART是否处于忙状态。

   在接收器空闲且数据输入变为“低电平”(收到起始位)时,接收计数器开始运行,并且根据 UARTCTL(详见“发送/接收逻辑”)中的 HSE 位(第 5 位)的设置,在Baud16 的第八个周期或者 Baud8 的第四个周期对数据进行采样。

如果 UnRx 信号在 Baud16 的第 8 个周期或者 Baud 8的第 4 个周期仍然为低电平,则起始位有效且可以识别,否则即忽略该起始位。


检测到有效起始位后,会按照设定的数据字符长度和UARTCTL 中 HSE 位的值,每 16 个 Baud16 周期或每8 个 Baud8 周期(即:每个位周期)对后续数据位进行一次采样。之后将捕捉并校验奇偶校验位(如果使能了奇偶校验)。


数据长度和奇偶校验位在 UARTLCRH 寄存器中设置。最后,通过 UnRx 信号为高电平则判定停止位有效,否则视为发生帧错误。若成功接收到一帧数据,则数据和与之相关的错误标志都将保存到接收FIFO中。

13.3.4 串行红外(SIR)

UART模块包含有IrDA串行红外(SIR)编解码模块。IrDASIR模块能够在异步UART数据流与半双工串行SIR接口之间进行相互转换。不在片上执行任何模拟信号处理。SIR模块的作用是向 UART提供数字编码输出和解码输入。使能 SIR 功能后,SIR 模块将通过 UnTx 和 UnRx 管脚实施 SIR 协议。
    因此这两个管脚应与片外的红外收发器连接,实现完整的IrDA SIR物理层链路。SIR 模块可以接收和发送,但是只能以半双工方式进行红外通信,所以它不能同时进行接收和发送。发送必须停止,然后才能接收数据。IrDA SIR 物理层规定发送和接收之间的最小延迟为10ms。

13.3.8 FIFO操作

UART 有 2 个 16x8 位的 FIFO;一个用于发送,另一个用于接收。这两个 FIFO 都通过 UART 数据(UARTDR) 寄存器进行访问。


对 UARTDR 寄存器执行读操作将返回 12 位的结果,其中包含 8 个数据位和 4 个错误标志位;对 UARTDR 寄存器执行写操作,可将 8 位数据写入发送FIFO 中。


复位后,两个FIFO默认都是禁用的,其表现如同1字节深的保持寄存器。可通过对 UARTLCRH 中的 FEN 位进行置位,从而启用这两个 FIFO。

 可通过 UART 标志 (UARTFR) 寄存器和 UART 接收状态 (UARTRSR) 寄存器监控 FIFO的状态。而对空、满和溢出条件的监控则是由硬件来完成的。UARTFR 寄存器包含空和满的标志(TXFE、TXFF、RXFE 和 RXFF位),而 UARTRSR 寄存器则通过 OE 位指示溢出状态。如果FIFO 被禁用,将根据 1 字节深的保持寄存器的状态设置空和满标志。

令 FIFO 产生中断的触发点是通过 UART 中断 FIFO深度选择 (UARTIFLS) 寄存器来控制的。两个FIFO可分别配置为不同的触发深度。可选的触发深度包括1/8、1/4、1/2、3/4和7/8。举例来说,若设置接收FIFO的触发深度为1/4,则当UART连续收到4个数据字节后即会产生一个接收中断。复位后两个FIFO的默认触发深度都是1/2。

13.3.9 中断信号

在出现以下状况时UART模块会产生中断:
■ 溢出(Overrun)错误
■ 线中止错误
■ 奇偶校验错误(Parity Error)
■ 帧错误:停止位不为1
■ 接收超时:已有数据未满,后续数据长期不来
■ 发送完成(当满足 UARTIFLS 寄存器中XIFLSEL位定义的条件时,或 UARTCTL 寄存器的 EOT位置1 并且发送数据的最后 1 位已经从串行移位寄存器发时)
■ 接收完成(当满足 UARTIFLS 寄存器RXIFLSEL位定义的条件时)

•在发送给中断控制器之前,所有中断事件先进行一次逻辑或操作,因此同一时刻不管实际发生了多少中断事件,UART模块都只向中断控制器产生一个中断请求。


•通过读取 UART 屏蔽中断状态(UARTMIS) 寄存器,软件可以在一个中断服务程序中处理多个中断事件。


•对 UART 中断屏蔽 (UARTIM) 寄存器中相应的 IM位进行置位,可以定义能够触发控制器级别中断的中断事件。如果不使用中断,总是可通过 UART 原始中断状态 (UARTRIS) 寄存器查看原始中断状态。

•向 UART 中断清除 (UARTICR) 寄存器的相应位写 1,即可(为 UARTMIS 寄存器和UARTRIS 寄存器)清除中断。

•当接收方 FIFO 不为空时,接收超时中断有效,且在一个 64个位周期内(HSE =0)或在一个 32 个位周期内(HSE =1)不再接收数据。

•接收超时中断既可以自动清除(读出 FIFO 或保持寄存器中的所有数据,使得 FIFO 变为空状态),也可以向UARTICR 寄存器的相应位写 1 手动清除。

13.3.10 回送操作

可对 UARTCTL 寄存器的 LBE 位进行置位,从而使UART 处于内部回送模式,以便进行诊断和调试。


在回送模式下,从 UnTx 输出端发送的数据将被UnRx 输入端接收。请注意,应先对 LBE 位进行置位,然后再启用 UART。

13.3.11 DMA 操作

UART 向 μDMA 控制器接口提供独立的发送通道和接收通道。UART 的 DMA 操作通过 UART DMA控制寄存器 (UARTDMACTL) 使能。在使能μDMA操作后,UART模块在接收FIFO或发送FIFO可以传输数据时向接收或发送通道产生μDMA请求。


对于接收通道,只要接收 FIFO 中有数据,就会发出单次传输请求。只要接收 FIFO 中的数据量达到或超过 UARTIFLS 寄存器中配置的 FIFO 触发水平,就会发出连续传输请求。


对于发送通道,只要发送 FIFO 中至少有一个空位,就会发出单次传输请求。只要发送 FIFO 中所含的字符多于 FIFO 触发水平,就会发出连续传输请求。μDMA 控制器会根据DMA 通道的配置自动处理单次和连续 DMA 传输请求。

•如需为接收通道启用 DMA 操作,请对 DMA 控制(UARTDMACTL) 寄存器中的 RXDMAE 位进行置位。


•如需为发送通道启用 DMA 操作,请对UARTDMACTL 寄存器中的 TXDMAE 位进行置位。

•还可以将 UART 配置为在发生接收错误时,令接收通道停止使用 DMA。如果对 UARTDMACR 寄存器的DMAERR 位进行了置位且发生接收错误,DMA 接收请求会被自动禁用。此状况可通过清除相应的UART错误中断予以解除。


资料仅供学习使用

如有错误欢迎留言交流

上理考研周导师的其他专栏:

光电融合集成电路技术     电路原理

C语言       复变函数与积分变换

单片机原理

模式识别原理

数字电子技术

自动控制原理     ​​​​​​ 传感器技术

模拟电子技术

数据结构

 概率论与数理统计

高等数学

传感器检测技术

智能控制

嵌入式系统

图像处理与机器视觉

热工与工程流体力学

数字信号处理

线性代数

工程测试技术

上理考研周导师了解更多

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值