现在的位置: 首页 > 综合 > 正文

关于KL25 ARM cortex-M0+处理器的UART模块的功能介绍

2013年11月25日 ⁄ 综合 ⁄ 共 6657字 ⁄ 字号 评论关闭

根据UART寄存器的每一位发现一个小小的飞思卡尔的UART具有很多种功能。对于这些功能可以一一了解。

UART0模块。

 波特率发生器

13位模数计数器为接收器和发送器在波特率发生器上的波特率。对于异步UART波特率时钟,从1到8191的值写入SBR[12:0]确定波特率时钟分频。SBR位在UART波特率寄存器中,BDH和BDL。波特率时钟驱动接收器,发射器是由波特率时钟除以过采样率驱动。接收器根据过采样比,每比特时间具有4至32个样品的采集速率。

波特率产生受制于两种误差来源:

·整数除法模块的时钟信号可能无法提供确切的目标频率。

·同步与异步UART波特率时钟可能会导致相移。


发送器的功能描述

发送器输出(UART_TX)空闲状态默认为逻辑高电平,C3[TXINV]复位后清除。发送器的输出通过设置C3 [TXINV]倒转。发送器通过设置C2[TE]位启用。发送器发出一个前导符,是一个完整的字符帧的空闲状态。发送器保持空闲状态,直到数据在发送数据缓冲区中。通过写入到UART数据寄存器,程序将数据存储到发送数据缓冲区中。

根据在C1 [M],C2[M10]和BDH[SBNS]控制位的设置,UART发送器的核心元素是10位到13位长发送移位寄存器。本节的其余部分,假设C1 [M],C2[M10]和BDH[SBNS被清除,选择正常的8位数据模式。在8位数据模式下,移位寄存器持有起始位,8个数据位,一个停止位。当发送移位寄存器对一个新的UART字符有效时,等待在发送数据寄存器的值被转移到移位寄存器,波特率时钟同步,并发送数据寄存器空(S1[TDRE)状态标志设置,以指示可能会被写入发送数据缓冲区UART_D另一个字符。

如果没有新的字符正在等待在发送数据缓冲区,在一个停止位被移出UART_TX引脚,发送器设置传输完成标志和进入UART_TX高的空闲模式,等待传输字符。

写0到C2[TE]中不立即关闭发送器。必须首先完成当前发送的正在进行的活动。这包括正在进行中的数据字符,等待空闲字符和等待间隔符。

发送间隔和等待空闲

UART_C2[SBK]位发送间隔符原本是用来获得旧的电传接收者的注意。间隔符是一个完整的逻辑0,10位到12位包含开始位和停止位的时间的字符时间。13个位时间的中断,可以通过设置UART_S2[BRK13]启用。通常情况下,程序会等待UART_S1[TDRE]被设置以显示消息的最后一个字符被移到发送移位寄存器中,写1,然后写0到UART_C2[SBK]位。只要移位寄存器可用,要发送一个排进队列的间隔符。如果UART_C2[SBK]保持为1时,当队列中的间隔进入移位寄存器时,同步的波特率时钟,一个额外的间隔字符被排队。如果接收设备是另一个飞思卡尔半导体UART,在所有数据位和帧错误(UART_S1[FE]=
1)出现时,间隔符被接收为0​​。也就是说,对于一些老的接收器,发送数据之后需要给一个间隔符,这个间隔符差不多在一个字节,10-12位之间,包括停止位。

当使用空闲线唤醒时,在两个信息之间唤醒任何休眠的接收器,一个完整的空闲(逻辑1)字符时间是需要。通常情况下,程序会等待UART_S1[TDRE]设置为显示消息的最后一个字符移到发送移位寄存器,然后写0,然后写1到UART_C2[TE]位。只要移位寄存器可用,这个动作队列发送一个空闲字符。只要在移位寄存器中的字符没有完成而UART_C2[TE]被清除,UART发送器就不会释放UART_TX引脚的控制。

间隔字符的长度会受到UART_S2[BRK13],UART_C1[M]和UART_C4[M10]位的影响,如下图所示。

表39-27 间隔字符长度

BRK13

M

M10

SBNS

间隔字符长度

0

0

0

0

10个位时间

0

0

0

1

11个位时间

0

1

0

0

11个位时间

0

1

0

1

12个位时间

0

X

1

0

12个位时间

0

X

1

1

13个位时间

1

0

0

0

13个位时间

1

0

0

1

14个位时间

1

1

0

0

14个位时间

1

1

0

1

15个位时间

1

X

1

0

15个位时间

1

X

1

1

16个位时间

接收器的功能介绍


在本节中,接收器的框图是对整体接收器的功能描述的一个引导。接着,用于重建接收器的数据的数据采样技术被更详细地描述。最后,对两个接收器唤醒功能变化的解释。

接收器输入通过设置UART_S2[RXINV]被倒转。通过设置UART_C2[RE]位接收器被启用。字符帧由一个起始位(逻辑0),8到10个数据位(MSB或LSB在前),一个或两个停止位(逻辑1)组成。9位或10位数据模式的信息,请参阅为8位,9位和10位数据模式。对于以后的讨论中,假设UART配置为正常的8位数据模式。接收到停止位到接收移位寄存器,如果接收数据寄存器不是已经满了,数据字符被传输到接收数据寄存器和接收数据寄存器满(UART_S1
RDRF)状态标志设置。如果UART_S1[RDRF]已经置位表明接收数据寄存器(缓冲区)已经满了,溢出(OR)状态标志设置和新的数据丢失。由于UART接收器是双缓冲的,程序中有一个字符的时间,在UART_S1[RDRF]被设置后,在接收数据缓冲区中的数据必须被阅读以避免接收器溢出之前。当程序检测到接收数据寄存器满时(UART_S1[RDRF= 1),它通过阅读UART_D从接收数据寄存器中得到数据。对于标志清空的详细信息请参阅中断和状态标志。


数据采样技术


UART接收器,支持4倍和32倍的波特率时钟之间的过采样率。接收器开始采样逻辑电平,波特率搜索的UART_RX的串行数据输入引脚上的下降沿。在3个逻辑1的样品后,下降沿被定义为逻辑0采样。过采样波特率时钟把位时间从1到OSR(OSR配置的过采样率)分为4至32段。当一个下降沿被定位,有3个样品在(OSR/ 2),(OSR/ 2)+1,(OSR/ 2)+2上被采集以保证这是一个真正的开始位而不是噪音。如果这三个样品中的至少两个是0,则接收器假定它是同步到接收的字符。在接收器被认为是同步前,如果另一个下降沿被检测到,接收机从第一分部重新启动采样。

然后接收器采样每个位时间,包括的起始位和停止位,在(OSR/ 2),(OSR/ 2)+1,和(OSR/ 2)2,以确定该位的逻辑电平。逻辑电平被解释为大多数位时间期间采取的样品。如果样品在任何位时间,包括起始位和停止位,在字符帧与该位的逻辑电平不匹配时,当接收到的字符被传输到接收数据缓冲区时,噪声标志(UART_S1[NF])被设置。

当UART接收器被配置为波特率时钟的两个边缘上的样品时,在每个接收到的比特的数目的段被有效地加倍(从1到OSR* 2)。然后采样OSR,OSR1和OSC2的起始位和数据位。必须使能在时钟的两个边缘上的采样为8×4×过采样率和较高的过采样率来说是可选的。

下降沿检测逻辑不断下降沿,如果检测到一个边缘,采样时钟同步到位时间(除非重新同步已被禁用)。这提高了在存在噪声或不匹配的波特率的接收机的可靠性。它并不能提高最坏的情况下分析,因为有一些字符不具有任何额外的下降沿,在字符帧中的任何地方。

在一个帧错误的情况下,接收的字符不是间隔符,搜索一个下降沿的采样逻辑填充有3个逻辑1,几乎立即可以检测到新的起始位。


唤醒接收器的操作


接收器唤醒是一种硬件机制,它允许UART接收器忽略用于不同的UART接收器的消息中的字符。在这样的系统中,所有的接收器判断每个消息的第一个字符,并且它们尽快确定该消息是不是为不同的接收器,并写逻辑1到接收器唤醒控制位UART_C2[RWU]。当RWU位被置位,与接收器相关联的状态标志,与异常的空闲位,IDLE被禁止设置当UART_S2[RWUID]位被置位时,从而消除了软件处理不重要的消息字符的开销。在一个消息的结尾,或在下一个消息开始处,所有的接收器自动地将UART_C2[RWU]置为0,所以所有的接收醒来的时间看的下一个消息的第一个字符。

    空闲线唤醒

当唤醒被清除时,接收器被设置为空闲线唤醒。在这种模式下,UART_C2[RWU]自动清零当接收器检测到空闲线的一个满字符时间。UART_C1[M]和UART_C4[M10]控制位选择8位到10位数据模式并且UART_BDH[SBNS]位选择1位或2位停止位数字,以此来确定需要多少空闲位构成一个完整的字符时间,10至13位的时间,因为开始位和停止位。

当UART_C2[RWU是一个,ART_S2[RWUID]是零时,空闲状态唤醒接收器没有设置UART_S1[IDLE]标志。接收器唤醒并等待下一个消息的第一个数据字符,设置UART_S1[RDRF标志并产生一个中断,如果被启用。当UART_S2[RWUID]是一时,如果启用,任何空闲的条件设置UART_S1[IDLE]标志并产生中断,无论是否UART_C2[RWU]是零或一。

空闲线类型(UART_C1[ILT)控制位选择两种方式之一来检测空闲线。当UART_C1[ILT]被清零,空闲位在起始位之后开始,停止位和全角字符结束时的逻辑1字符计数向空闲时间。当UART_C1[ILT]被置位,空闲位直到停止位时间后才启动,所以空闲检测不受到前一消息的最后一个字符中的数据的影响。


地址标志唤醒


当设置唤醒时,接收器被设置为地址标志唤醒。在此模式下,当接收器检测到一个接收字符的最显着位中的逻辑“1”时,UART_C2[RWU]自动清零。

地址标志唤醒允许信息包含空闲字符,但需要将最高有效位被保留为地址帧使用。是一个地址帧的MSB的逻辑“1”清除UART_C2[RWU位在接收到的停止位之前,并设置UART_S1[RDRF]标志。在这种情况下,MSB集的字符仍可以被接受即使接收器在大多数字符时间里处于休眠状态。


匹配地址的操作


当UART_C4[MAEN1]或UART_C4[MAEN2]位设置启用时,就可以进行匹配地址的操作。在这个过程中,通过UART_RX引脚接收的帧与逻辑紧接停止位1位的位置被认为是一个地址,并且与相关联的MA1或MA2寄存器进行比较。如果比较匹配,帧只传输到接收缓冲区,并且UART_S1[RDRF]被置位。随后接收到的所有的位位置的逻辑为0的帧的紧接停止位被认为是与该地址相关联的数据,并转移到接收数据缓冲器。如果没有明显的地址匹配时,则没有传输到接收数据缓冲,逻辑零位的位置和之后的所有帧紧接停止位也被丢弃。如果是同时否定UART_C4
MAEN1和UART_C4[MAEN2]位,接收机正常工作和接收的所有数据被传输到接收数据缓冲器。

用同样的方式在MA1和MA2寄存器上进行匹配地址的操作功能。

·如果只有一个UART_C4[MAEN1]和UART_C4[MAEN2]被置位,显着的地址,仅与相关联的匹配寄存器进行比较,并且数据传送到接收数据缓冲区仅在一个匹配中。

·如果UART_C4[MAEN1] UART_C4[MAEN2]被断言,显着的地址和两个匹配寄存器进行比较,并且数据传送仅在任一寄存器的匹配中。


额外的UART功能


8位 ,9位和10位数据模式


UART系统,发射器和接收器,可以被配置来操作,通过设置9位数据模式UART_C1[M]或10位数据模式UART_C4[M10]。在9位数据模式中,是第9个数据位的左侧的UART数据寄存器的最高有效位,在10  - 位模式,是第10个数据位。对于发送数据缓冲器,这些位被存储在T8和T9中UART_C3。对于接收器,这些比特位存放在UART_C3[R8]和UART_C3[R9]中。

为了一致地写发送数据缓冲区,在写UART_C3[T8] UART_C3[T9]之前先写UART_D。

如果要被发送的比特值作为一个新的字符的第九和第十位的前一个字符是相同,就没有必要再次写至T8和T9。当数据被从发送数据缓冲器传送到发送移位寄存器,T8和T9中的值是在同一时间数据复制从UART_D转移到移位寄存器。当数据被从发送数据缓冲器传送到发送移位寄存器,T8和T9中的值是在同一时间数据复制从UART_D转移到移位寄存器。

9位数据模式通常用于奇偶校验,可以允许8位的数据加上第九位的奇偶校验,或用于地址标志唤醒,所以第九位也可以作为唤醒位。10位数据模式通常用于奇偶校验和地址标志唤醒,所以第九位作为唤醒位,第10位作为奇偶校验位。在自定义的协议,第九和/或第十位,也可以作为软件控制标记。


循环模式


当UART_C1[LOOPS]被置位时,在同一个寄存器的UART_C1[RSRC]位选可以择循环模式(UART_C1 RSRC= 0)或单线模式(UART_C1RSRC=1)。循环模式有时用于检测软件,独立于在外部系统中的连接,帮助隔离系统问题。在此模式下,发射机的输出在内部连接到接收器输入并且UART_RX销不被UART使用。

39.3.4.3单线操作

当UART_C1[LOOPS]被设置,在同一个寄存器的RSRC位可以选择循环模式(UART_C1 RSRC= 0)或单线模式(UART_C1RSRC=1)。单线模式实现半双工串行连接。接收器在内部连接到发射器的输出UART_TX引脚(UART_RX引脚不使用)。

在单线模式中,UART_C3 TXDIR位控制着串行数据在UART_TX引脚的方向。当UART_C3[TXDIR]被清零,UART_TX引脚作为UART接收器和发射器的输入暂时从UART_TX引脚断开,所以一个外部设备可以发送串行数据到接收器。当UART C3[TUXDIR]被置位时,UART_TXD针是由发射器的输出驱动,内部环回连接被禁用,因此接收机不能接收由发射机发送出去的字符。 


中断和状态标志


UART系统产生三个独立的中断,从而减少被用来隔离引起中断的软件的数量。一个中断与发射器的TDRE与TC事件对应。另一种中断与RDRF,IDLE RXEDGIF,和LBKDIF事件接收器对应。第三个中断用于判断OR,NF,FE,和PF事件发生错误的条件。每10个这样的中断源可以被本地中断使能掩码单独屏蔽。当本地掩码被清除,以禁止产生中断请求时该标志可以通过软件查询。

UART发送器有两个状态标志,这两个状态标志可以选择性的产生硬件中断请求。发送数据寄存器状态为空(UART_S1[TDRE)表示在发送数据缓冲区有空间可以写另一个发送字符到UART_D。如果发送中断使能(UART_C2[TIE)位被置位,当UART S1[THERE] 被置位,就会请求一个硬件中断。发送完成表明传输器完成了对所有数据,前导符和间隔字符的发送,(UART_S1[TC])被闲置,UART_TX,处于无效电平。此标志常常使用在有调制解调器的系统中,以确定关闭调制解调器是否安全。如果发送完成,中断使能(UART_C2[TCIE)位被置位,一个硬件中断被请求当UART
S1[TC]被设置。代替硬件中断,软件轮询可以用来监测UART_S1[TDRE和UART_S1[TC]状态标志,如果相应的UART_C2[TIE]或UART_C2 TCIE本地中断屏蔽被清除。

当程序检测到接收数据寄存器满时(UART_S1[RDRF=1),它通过读取UART_D,从接收数据寄存器得到的数据。通过阅读UART_DUART_S1
[RDRF]
标志被清除。

IDLE状态标志包含逻辑以防止重复置未当在较长的一段时间内UART_RX行保持空闲状态时。通过写1到的UART_S1[IDLE]标志,IDLE被清除。当UART_S1[IDLE]已被清除后,它不能被重新设置,直到接收器接收到至少一个新的字符,并且已经设置UART_S1[RDRF]

如果相关的错误被检测到在接收到的字符里,并且导致UART_S1 [RDRF]被设置,错误标志-噪音标志(UART_S1[NF]),帧错误(UART_S1[FE]),和奇偶校验错误标志(UART_S1[PF]
-
在同一时间被设置为UART_S1[RDRF]。在溢出情况时,这些标志都不被设置。

如果UART_S1[RDRF已经被设置当一个新的字符准备从接收移位寄存器传输到接收数据缓冲区,溢出(UART_S1[OR])标志被置位来代替数据,连同任何相关的NFFEPF条件丢失。

在任何时候,一个活跃的边缘上的UART_RX的串行数据输入引脚使UART_S2[RXEDGIF标志设置。通过写1到UART_S2[RXEDGIF标志,它被清除。此功能依赖于接收器被允许(UART_C2[RE]= 1)。

 

抱歉!评论已关闭.