串口通讯基础及S3C2410 UART控制器
源上,这样当设备连通时即有效。
6. CD(第8脚):载波检测(接收线信号测定器),输入。表示MODEM已与电话线路连接好。
7. 如果通信线路是交换电话的一部分,则至少还需如下两个信号:
8. RI(第22脚):振铃指示,输入。MODEM若接到交换台送来的振铃呼叫信号,就发出该信号来通知计算机或终端。
9. (第20脚):资料终端就绪,输出。计算机收到RI信号以后,就发出 信号到MODEM作为回答,以控制它的转换设备,建立通信链路。
10. GND(第7脚):信号地
逻辑电平
RS-232C标准采用EIA电平,规定:
“1”的逻辑电平在-3V~-15v之间
“0”的逻辑电平在+3V~+15V之间。
由于EIA电平与TTL电平完全不同,必须进行相应的电平转换,MCl488完成TTL电平到EIA电平的转换,MCl489完成EIA电平到ITL电平的转换。还有MAX232可以同时完成TTL->EIA和EIA->TTL的电平转换。
除了RS-232C标准以外,还有一些其它的通用的异步串行接口标准,如:
RS-423A标准
为了克服RS-232C的缺点,提高传送速率,增加通信距离,又考虑到与RS-232C的兼容性,美国电子工业协会在1987年提出了RS-423A标准。该标准的主要优点是在接收端采用了差分输入。而差分输入对共模干扰信号有较高的抑制作用,这样就提高了通信的可靠性。RS-423A用-6v表示逻辑“1”,用+6v表示逻辑“0”,可以直接与RS-232C相接。采用RS-423A标准以获得比RS-232C更佳的通信效果。图5-7是RS423A的连接示意图。
图5-7
RS-422A标准
RS-422A总线采用平衡输出的发送器,差分输入的接收器。如图5-8所示。
图5-8
RS-422A的输出信号线间的电压为±2v,接收器的识别电压为±0.2v。共模范围±25v。在高速传送信号时,应该考虑到通信线路的阻抗匹配,一般在接收端加终端电阻以吸收掉反射波。电阻网络也应该是平衡的,如图5-9所示。
图5-9 为RS-422A平衡输出差分输示意图
RS-485标准
RS-485适用于收发双方共享一对线进行通信,也适用于多个点之间共享一对线路进行总线方式联网,但通信只能是半双工的,线路如图5-10所示。
图5-10
典型的RS232到RS422/485转换芯片有:MAX481/483/485/487/488/489/490/491,SN75175/176/184等等,它们均只需单一+5v电源供电即可工作(芯片内部采用电荷泵方式升压)。具体使用方法可查阅有关技术手册。
五、S3C2410内置的UART控制器
S3C2410内部具有3个独立的UART控制器,每个控制器都可以工作在Interrupt(中断)模式或DMA(直接内存访问)模式,也就是说UART控制器可以CPU与UART控制器传送资料的时候产生中断或DMA请求。并且每个UART均具有16字节的FIFO(先入先出寄存器),支持的最高波特率可达到230.4Kbps
图5-11是S3C2410内部UART控制器的结构图
图5-11
UART的操作
UART的操作分为以下几个部分,分别是:资料发送、资料接收、产生中断、产生波特率、Loopback模式、红外模式以及自动流控模式。
资料发送
发送的资料帧格式是可以编程设置的。它包含了起始位、5~8个资料位、可选的奇偶校验位以及1~2位停止位。这些都是通过UART的控制寄存器 ULCONn 来设置的。
资料接收
同发送一样,接收的资料帧格式也是可以进行编程设置的。此外,还具备了检测溢出出错、奇偶校验出错、帧出错等出错检测,并且每种错误都可以置相应的错误标志。
自动流控模式
S3C2410的UART0和UART1都可以通过各自的nRTS和nCTS信号来实现自动流控。
在自动流控(AFC)模式下nRTS取决于接收端的状态,而nCTS控制了发送断的操作。具体地说:只有当nCTS有效时(表明接收方的FIFO已经准备就绪来接收资料了),UART才会将FIFO中的资料发送出去。在UART接收资料之前,只要当接收FIFO有至少2-byte空余的时候,nRTS就会被置为有效。图5-12是UART 自动流控模式的连接方式
图5-12
中断/DMA请求产生
S3C2410的每个UART都有7种状态,分别是:溢出覆盖(Overrun)错误、奇偶校验错误、帧出错、断线错误、接收就绪、发送缓冲空闲、发送移位器空闲。它们在UART状态寄存器 UTRSTATn / UERSTATn 中有相应的标志位。
波特率发生器
每个UART控制器都有各自的波特率发生器来产生发送和接收资料所用的序列时钟,波特率发生器的时钟源可以CPU内部的系统时钟,也可以从CPU的 UCLK 管脚由外部取得时钟信号,并且可以通过 UCONn 选择各自的时钟源。
波特率产生的具体计算方法如下:
当选择CPU内部时钟时:
UBRdivn=(int)(PCLK/(bps*16))-1,bps为所需要的波特率值,PCLK为
- LEON2应用于DCPU的FPGA仿真(05-11)
- 单片机IO口模拟UART串口通信(12-26)
- 基于Qt实现USB CDC便携式设备串口通信客户端设计(05-14)
- 基于机器视觉的物体包装盒实时贴标系统设计(05-17)
- 企业用户解决方案 ALTUSEN远程串口管理方案(09-13)
- 一种基于状态机的串口通信协议的设计与实现(05-18)