首页 理论教育 UART模块功能简介

UART模块功能简介

时间:2023-11-17 理论教育 版权反馈
【摘要】:下面将简要介绍UART模块的功能。若UART已被使能,则数据帧将按UARTLCRH寄存器中所设置的参数启动发送,直到发送FIFO中的数据全部发送完成为止。一旦将数据写入到发送FIFO中,UART标志寄存器中的BUSY位将生效,且在数据发送期间一直保持有效。注意,UART不支持该种情况的自动重发功能。

UART模块功能简介

下面将简要介绍UART模块的功能。

1.发送/接收逻辑

发送逻辑对从发送FIFO读取的数据执行“并-串”转换。控制逻辑输出串行位流时,最先输出起始位,然后依据控制寄存器中的配置顺序输出若干数据位、奇偶校验位和停止位,如图3-2所示。

978-7-111-51624-8-Chapter03-5.jpg

图3-2 UART数据帧格式

当检测到有效的起始脉冲后,接收逻辑会对接收到的位流执行“串-并”转换。此外还会进行溢出、奇偶校验与线路中止检测以及帧错误检查,并将这些状态随数据一并写入接收FIFO中。

2.波特率产生

波特率除数(baud-rate divisor)是一个22位数,它由16位整数和6位小数组成。波特率发生器由这两个值组成的数字来决定位周期,通过带小数波特率除法器,UART可以生产所有标准的波特率。波特率除数(BRD)和系统时钟的关系如下:

BRD=BRDI+BRDF=SystemClock/(ClkDiv×BaudRate)

其中,BRDI为BRD的整数部分;BRDF为小数部分;SystemClock为系统时钟;ClkDiv为16(若UARTCTL寄存器中的HSE位清零)或8(若HSE位被置位)。

6位小数部分的计算方法为

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

UART会产生一个内部波特率基准时钟,其频率为波特率的8/16倍。该基准时钟经过8/16分频后即可生产发送时钟,并且它在接收操作期间可用于检测错误。

3.数据传输

接收或发送的数据被保存在两个16字节的FIFO中,但接收FIFO中的每个字符需包含额外的4位状态信息。发送时,数据先被写入到发送FIFO中。若UART已被使能,则数据帧将按UARTLCRH寄存器中所设置的参数启动发送,直到发送FIFO中的数据全部发送完成为止。一旦将数据写入到发送FIFO中,UART标志寄存器中的BUSY位将生效,且在数据发送期间一直保持有效。BUSY位仅在发送FIFO为空且包括停止位在内的最后一个字符已从移位寄存器中移出时,才会变为无效。这样,即使UART不再处于使能状态,也可能被指示为“忙”状态。

在接收器空闲(UnRx信号持续为1)且数据输入变为“低电平”(收到起始位)时,接收计数器开始计数,并依照UARTCTL寄存器中HSE位的配置,在Baud16的第8个周期或Baud8的第4个周期对数据进行采样。

若UnRx信号在Baud16的第8个周期(HSE位清零)或者Baud8的第4个周期(HSE置位)仍然为低电平,则起始位有效且可识别,否则可忽略该起始位。在检测到有效起始位后,将根据设定的数据字符长度和UARTCTL寄存器中HSE位的状态,每16个Baud16周期或每8个Baud8周期对后续数据位进行一次采样。若奇偶校验模式被使能,则接着检查奇偶校验位。数据长度和奇偶校验都可在UARTLCRH寄存器中定义。

若UnRx信号为高电平,则可确认停止位有效,否则可指示发生了帧错误。在接收到一个完整的字时,相关数据与该字相关的错误位将一并被存放到接收FIFO中。

4.串行红外(SIR)

UART外设包含一个IrDA串行红外编/解码器模块。IrDA SIR模块的功能可在异步UART数据流和半双工串行SIR接口之间转换。SIR模块的作用仅为向UART提供数字编码输出和解码输入,不会在片上执行任何模拟信号处理。在使能SIR模块后,该模块将用UnTx与UnRx引脚执行SIR协议,这些信号应与红外收发器连接来完成IrDA SIR的物理层连接。SIR模块虽可接收和发送数据,但只能以半双工方式进行红外通信,故而不可同时进行接收和发送操作,并且IrDA SIR物理层规定在发送和接收之间至少存在10ms的延迟。

SIR模块有以下两种工作模式:

1)在标准IrDA模式下,输出引脚上发送的逻辑0电平为高脉冲,其位宽为所选波特率位周期的3/16,而发送的逻辑1电平则是一个静态低电平信号。这些电平控制红外发送器的驱动装置,逢0电平便发送光脉冲。在接收端,接收到的光脉冲连接到接收器的光敏晶体管基极,这样将使输出驱动为低电平,并将UART输入引脚拉低。

2)在IrDA低功耗模式下,变更UARTCR寄存器中的相应位后,会将发送红外脉冲的脉宽置为内部产生的IrLPBaud16信号周期的3倍(在标称频率为1.8432 MHz时为1.63μs)。

5.支持ISO7816智能卡的通信模式

UART为与ISO 7816智能卡之间的通信提供了一些基本支持。当UARTCTL寄存器中的SMART位置位时,UnTx信号将被作为位时钟信号,而UnRx信号则用于连接到智能卡的半双工通信线路。而GPIO信号可用于向智能卡发送复位信号,其余智能卡信号应由系统设计提供,在该模式下的最大时钟速率为系统时钟的1/16。

在使用ISO7816模式时,UARTLCRH寄存器必须配置为发送8位数据字(WLEN字段6:5配置为0x3),带偶校验(即PEN与EPS位置位)。在该模式下,UART将自动使用2个停止位,而忽略UARTLCRH寄存器中的STP2位。

若在发送期间检测到奇偶校验错误,UnRx将在第二个停止位期间被拉至低电平。在这种情况下,UART将终止发送、刷新发送FIFO中的所有数据,同时产生一个奇偶校验错误中断来让软件检测到该问题,并重新发送受影响的数据。注意,UART不支持该种情况的自动重发功能。

6.支持调制解调器握手信号

下面将介绍在UART作为数据终端设备(DTE)或数据通信设备(DCE)连接时,如何配置UART1和使用调制解调器的流控制信号。一般情况下,调制解调器为DCE,而连接到调制解调器的计算设备为DTE。

(1)发信号

根据UART是作为DCE还是作为DTE的不同,UART1所提供的状态信号也会有所不同。

1)当作为DTE时,调制解调器的流控信号定义如下:

978-7-111-51624-8-Chapter03-6.jpg允许发送信号。

978-7-111-51624-8-Chapter03-7.jpg请求发送信号。

2)当作为DCE时,调制解调器的流控信号定义如下:

978-7-111-51624-8-Chapter03-8.jpg请求发送信号。

978-7-111-51624-8-Chapter03-9.jpg允许发送信号。

(2)流控制

流控制既可通过硬件也可通过软件来实现。下面将分别描述这两种方法。(www.xing528.com)

1)硬件流控制(RTS/CTS)。两个设备之间的硬件流控制是由978-7-111-51624-8-Chapter03-10.jpg输出端连接到接收设备的“清除发送(Clear-To-Send)”输入端实现的,以及将“请求发送”的输出端连接到接收设备上的978-7-111-51624-8-Chapter03-11.jpg输入端上。由978-7-111-51624-8-Chapter03-12.jpg输入端控制发送器,而且只有在978-7-111-51624-8-Chapter03-13.jpg输入端有效时发送器才能发送数据。978-7-111-51624-8-Chapter03-14.jpg输出信号可指示接收FIFO的状态,且978-7-111-51624-8-Chapter03-15.jpg将一直保持有效,直到达到预设的电平,此时接收FIFO中已无多余空间可用。UARTCTL寄存器中的CTSEN位和RTSEN位指定流控模式,见表3-2。

表3-2 流控制模式

978-7-111-51624-8-Chapter03-16.jpg

注意:当RTSEN为1时,软件无法通过UARTCTL寄存器的请求发送(RTS)位来修改978-7-111-51624-8-Chapter03-17.jpg的输出值,并且应忽略RTS位的状态。

2)软件流控制(调制解调器的状态中断)。通过使用中断来指示UART的状态,从而完成两台设备间的软件流控制。使用UARTIM寄存器中的第3位,以便为978-7-111-51624-8-Chapter03-18.jpg信号发出中断。可使用UARTRIS寄存器和UARTMIS寄存器查看原始中断和屏蔽中断的状态,并可通过UARTICR寄存器来清除这些中断。

7.9位UART模式

在9位模式下,UART可用于多点通信,并通过UART9BITADDR寄存器中的9BITEN位来使能。主机可通过其地址(或一组地址)以及一个地址字节限定符(地址字)与某个特殊的从机进行通信。如果所有地址限定符的从机检查置位,可通过比较接收到的字节与预编程的地址,如果地址匹配,那么将接收或发送更多的数据;如果地址不匹配,将丢弃该地址字节和后续的数据字节。可用UART9BITADDR寄存器来预定义地址来匹配所接收的字节,以及使用UART9BITAMASK寄存器中的地址屏蔽,让匹配扩展到一组地址,默认时,UART9BITAMASK为0xFF,意味着只有指定的地址可匹配(注意,在9位模式下,接收器操作无奇偶校验模式)。

在未找到匹配时,清零的第9位和其余数据字节将被丢弃;如果找到匹配,将会向NVIC发出一个中断以便进一步的动作,清零的第9位和后续数据字节将被保存到FIFO中。若此时使能了μDMA和/或FIFO操作,软件可屏蔽该中断,而无须处理器干预。9位模式的所有传送操作都为数据字节且第9位被清零。软件可将奇偶校验设置为粘着奇偶校验,对某个字节使能奇校验,以改写置位的第9位。欲使发送时间与奇偶校验设置匹配,可将地址字节作为单次传输而不是突发传输。由于发送FIFO并不含地址/数据位,因此软件应使能相应的地址位。

8.FIFO操作

UART具有2个16×8的FIFO:其中一个用于发送,而另一个用于接收。这两个FIFO都可通过UART数据寄存器(UARTDR)进行访问。UARTDR寄存器的读操作将返回一个12位的值,包括8个数据位和4个错误标志,而写操作则将8位数据保存到发送FIFO中。

复位后,两个FIFO均处于禁止状态,并作为1字节深的保持寄存器。可通过对UAR-TLCRH寄存器中的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的深度触发中断。

9.中断

在出现以下情况时,UART将产生中断:

①溢出错误。

②中止错误。

③奇偶校验错误。

④帧错误。

⑤接收超时。

⑥发送(当满足UARTIFLS寄存器中的TXIFLSEL位所定义的条件时,或对UARTCTL寄存器的EOT位置位且所有发送数据的最后1位已从串行移位寄存器移出时)。

⑦接收(当满足UARTIFLS寄存器中的RXIFLSEL位所定义的条件时)。

在所有中断事件发送到中断控制器之前,先行对其执行“逻辑或”操作,因此UART一次只能向控制器发送一个中断请求。通过读取UART屏蔽中断状态寄存器(UARTMIS),软件可在一个中断服务例程中处理多个中断事件。

对UART中断屏蔽寄存器(UARTIM)中的相应IM位置位,可定义能触发控制器级别的中断事件。如果不使用中断,原始中断状态在UART原始中断状态寄存器(UARTRIS)中总是可见的。向UART中断清除寄存器(UARTICR)中的相应位写1即可清除该中断。

当接收FIFO不为空时,接收超时中断有效,在32位周期内(在HSE位清零时)或在64位周期内(当HSE位置位时)不再接收数据。接收超时中断既可自动清除(当读出FIFO或保持寄存器中的所有数据,使FIFO变为空状态时),也可将UARTICR寄存器的相应位置位来手动清除。

1)当发生下列事件时,接收中断的状态将被改变:

①如果FIFO使能且接收FIFO达到设定的触发点,RXRIS位被置位。当从接收FIFO中读取的数据低于触发点时,将自动清除接收中断,或通过向RXIC位写1来手动清除中断。

②如果FIFO被禁止(有一个位置的深度)且接收到的数据已填充该位置,RXRIS位将被置位。通过对接收FIFO执行一次读取操作来清零接收中断,或通过向RXIC位写1来清除中断。

2)当发生下列事件时,发送中断的状态将被改变:

①如果FIFO被使能且发送FIFO达到设定触发点,TXRIS位将被置位。发送中断的产生依据触发点的高低,因此在FIFO中写入的数据必须超过该设定的触发点,否则不会再产生发送中断。当向发送FIFO中写入的数据大于触发点时来清除发送中断,或通过向TXIC位写1来清除中断。

②如果FIFO被禁止(有一个位置的深度)且无数据存在于发送器的单个位置,TXRIS位将被置位。可通过向发送FIFO中执行一次写入操作来清除发送中断,或通过向TXIC位写1来清除中断。

10.回送操作

可对UARTCTL寄存器中的LBE位置位,来使UART进入内部回送模式,以便UART进行诊断和调试。在回送模式下,UnTx输出端发送的数据将被UnRx输入端接收。

注意:需先行对LBE位置位,再使能UART。

11.DMA操作

UART向μDMA控制器接口提供独立的发送和接收通道。UART的DMA操作通过UART DMA控制寄存器(UARTDMACTL)来使能。当DMA操作使能后,在相应的FIFO传输数据时,UART将向接收通道或发送通道发出DMA请求。对于接收通道,如果接收FIFO中含有数据,就将发出单次传输请求。如果接收FIFO中的数据量达到或超过UARTIFLS寄存器中配置的FIFO触发深度,则会发出突发传输请求。对于发送通道,只要发送FIFO中至少有一个空位,就将发出单次传输请求。如果发送FIFO中所含的字符少于FIFO触发深度,则会发出突发请求。并且μDMA控制器将根据DMA通道的配置自动处理单次和突发DMA传输请求。

如果使能接收通道的DMA操作,需对DMA控制寄存器(UARTDMACTL)中的RXD-MAE位进行置位。如果使能发送通道的DMA操作,需对UARTDMACTL寄存器中的TXD-MAE位进行置位。还可将UART配置为在发生接收错误时,使接收通道停止使用DMA。如果对UARTDMACR寄存器的DMAERR位进行了置位且发生接收错误,则会自动禁止DMA接收请求。如遇到此种情况可通过清除相应的UART错误中断来清除。

若使能了μDMA,则μDMA控制器将会在传输完成后自动触发中断。在UART操作中使用了中断且使能了DMA,那么在UART中断处理函数中必须包含对μDMA完成中断的处理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈