首页 理论教育 UART通信:快速数据收发

UART通信:快速数据收发

时间:2023-11-08 理论教育 版权反馈
【摘要】:UART的操作包括数据发送、数据接收、中断产生、波特率发生、自环模式、红外模式和自动流控等。图8-1 S3C2410A中UART的功能框图frame error(帧错误):接收到的数据帧没有可用的停止位。在UART接收数据之前,当接收FIFO内有至少2Byte空间时,nRTS信号被激活;当接收FIFO内的空间少于1Byte时,nRTS信号无效。图8-2 采用流控功能的UART连接示意图采用FIFO作为数据缓冲的Rx操作如下所述。实际上UART接收错误不会产生任何中断,因为错误的数据还没有被读出。

UART通信:快速数据收发

UART的操作包括数据发送、数据接收、中断产生、波特率发生、自环模式、红外模式和自动流控等。

(1)数据发送

发送的数据帧是可编程的,它由1bit起始位、5~8bit数据位、可选校验位和1~2bit停止位组成。这些选择项都由寄存器ULCONn来控制。发送器可产生break条件(停发),这个break信号迫使发送器向外发送逻辑0信号。break信号必须在当前数据发送完毕后才能生效。

(2)数据接收

与发送类似,接收的数据帧也是可编程的,具体设置与发送的数据帧相同。接收器可以检测溢出错误和帧错误。

overrun e rror(溢出错误):在上一帧数据还没有完全从FIFO或保持寄存器中取走,新的数据就覆盖了老的数据。

978-7-111-41590-9-Chapter08-1.jpg

图8-1 S3C2410A中UART的功能框图

frame error(帧错误):接收到的数据帧没有可用的停止位。

当在3个字长(字长为用户定义)的时间内接收器没有接收到数据,那么就启动接收超时操作,此时在FIFO模式下,Rx FIFO不为空。

(3)AFC-Auto Flo w Control(自动流控制)

S3C2410A中的UART0和UART1支持自动流控制。自动流控制必须采用nRTS和nCTS两个信号。采用流控功能后,可以将这两个UART与外部UART相连接。如果用户要将UART与一个Modem(调制解调器)相连接,那么在UMCONn寄存器中禁止自动流控并且用软件方式控制nRTS信号。

在AFC模式下,nRTS信号在接收器上起作用,nCTS在发送器上起作用。当nCTS信号被激活时,UART发送器发送FIFO中的数据(nCTS激活意味着其他UART设备已经准备好接收数据了)。在UART接收数据之前,当接收FIFO内有至少2Byte空间时,nRTS信号被激活;当接收FIFO内的空间少于1Byte时,nRTS信号无效(nRTS激活意味着自己的UART接收FIFO准备好接收数据了)。图8-2为采用流控功能的UART连接示意图

如果没有使用自动流控,则可以靠软件控制nRTS和nCTS来完成数据传输操作。

下面给出一个没有采用流控功能的UART数据收发实例(nRTS和nCTS信号由软件来控制)。

978-7-111-41590-9-Chapter08-2.jpg

图8-2 采用流控功能的UART连接示意图

采用FIFO作为数据缓冲的Rx操作如下所述。

1)选择接收模式(中断或DMA)。

2)在UFSTATn寄存器中,检查Rx FIFO计数器的值。如果该值小于15,则用户必须将UMCONn[0]设置为“1”(激活nRTS);如果这个值大于或等于15,则用户就要将UM- CONn[0]设置为“0”(禁止nRTS)。

3)重复步骤2)。

采用FIFO作为数据缓冲的Tx操作如下所述。

1)选择发送模式(中断或DMA)。

2)检查UMSTATn[0]的值,如果这个值为“1”(nCTS已经被激活),那么用户就要写数据到Tx FIFO寄存器,准备发送数据。

(4)RS-232C接口

如果要将UART连接到modem接口(不是null mo dem)上,则nRTS、nCTS、nDSR、nDTR、nDCD和n RI这些信号都是必需的。在这种情况下,用户可以用软件的方式配合I/O口来控制这些信号(用I/O口来模拟上述这些信号)。S3C2410A不支持RS-232C接口。

(5)中断/DMA

每个UART都有5个状态信号:溢出错误、帧错误、接收数据缓冲区准备好、发送缓冲区空和发送移位器空。这些状态都在状态寄存器UTRSTATn和UERSTATn中有定义。

溢出错误和帧错误都是针对接收器而言的。如果UCONn中的接收错误状态中断使能位为“1”,那么每种错误状态都会引起中断请求。当检测到接收错误状态中断请求,引起错误的原因可由寄存器UERSTATn中读出判断。

在接收器将接收移位器中的数据转移到FIFO中(FIFO模式),并且接收数据的数量达到了Rx FIFO的触发值时,产生Rx中断(必须保证中断是使能的)。在非FIFO模式下,接收器会将接收移位器中的数据转移到接收保持寄存器中。

在将发送FIFO中的数据转移到发送移位器中且留在发送FIFO中的数据的数量达到Tx FIFO触发值时,产生Tx中断(必须保证中断是使能的)。在非FIFO模式下,将发送保持移位寄存器中的数据转移到发送移位器中会引起Tx中断。

如果接收和发送模式选择了DMA方式,那么前面描述的中断状态将变为DMA请求方式。

表8-1说明了在FIFO模式和非FIFO模式下中断的具体操作。(www.xing528.com)

8-1FIFO模式和非FIFO模式下中断的具体操作

978-7-111-41590-9-Chapter08-3.jpg

(6)UART错误状态FIFO

UART除了Rx FIFO外还有错误状态FIFO。这个FIFO说明了FIFO中接收到的数据有错误。当要试图去读取发生错误的数据时,错误中断产生。为了清零错误状态FIFO,必须去读取UERSTATn和带有错误的URXHn寄存器。

例如:如果UART的Rx FIFO顺序收到了字符A、B、C和D,在收到B时出现了帧错误。实际上UART接收错误不会产生任何中断,因为错误的数据还没有被读出。当试图去读取这个错误数据时,中断才会发生。

(7)波特率发生器

波特率发生器为收发操作提供时钟驱动。波特率发生器的时钟源可以是S3C2410A中的系统时钟或UEXTCLK。由UCONn寄存器来设置时钟源选择。波特率发生器的时钟计算是由寄存器UBRDIVn来确定的,计算公式为

978-7-111-41590-9-Chapter08-4.jpg

UBRDIVn的值在1~216-1之间,(int)为下取整。

为了对UART进行更为精确地操作,S3C2410A还支持采用外部UEXTCLK时钟源来代替芯片的系统时钟源。如果S3C2410A采用了UEXTCLK(UEXTCLK由外部UART设备或系统提供),则UART的串行时钟将和UEXTCLK同步。这样用户可以更为精准对进行UART操作。此时寄存器UBRDIVn的值为

978-7-111-41590-9-Chapter08-5.jpg

UBRDIVn的值在1~216-1之间,且UEXTCLK的频率要小于PCLK的频率。波特率计算举例:取波特率为115200B/s,PCLK=UEXTCLK=40MHz,则

978-7-111-41590-9-Chapter08-6.jpg

UBRDIVn=(int)21.7-1UBRDIVn=21-1UBRDIVn=20

(8)波特率计算精度

UART的帧错误率应小于1.87%。

978-7-111-41590-9-Chapter08-7.jpg

其中tUPCLK为实际的UART时钟,tUEXACT为理想的UART时钟。

注意

1)1Frame=start bit+data b it+parity bit+sto p bit

2)实际上,S3C2410A的波特率可以支持到921.6kB/s。例如,在UART error=1.69%,PCLK=60MHz的条件下,S3C2410A的UART波特率可达921.6kB/s。

(9)Loopback模式

Loopback模式是一种自环检测模式,即将TXD和RXD在S3C2410A的内部直接连接起来实现检测功能。设置UCONn中的loopback bit来启动这项功能。

(10)Infra-Re d(IR)模式

S3C2410A的UART支持红外模式。在UCONn中设置Infra-re d-mode bit来开启这项功能。在IR发送模式下,发送时钟脉冲的宽度为正常UART帧数据宽度的3/16,且这个正常的UART帧数据是发送“0”时的数据宽度。在IR接收模式下,接收器必须检测3/16的脉冲周期以便可以辨识出一个“0”。图8-3为正常模式下的帧时序,图8-4为IR发送模式下的帧时序,图8-5为IR接收模式下的帧时序。

978-7-111-41590-9-Chapter08-8.jpg

图8-3 正常模式下的帧时序

978-7-111-41590-9-Chapter08-9.jpg

图8-4 IR发送模式下的帧时序

978-7-111-41590-9-Chapter08-10.jpg

图8-5 IR接收模式下的帧时序

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

我要反馈