-
第十一章
异步串口通信
概述
S3C2410
的
UART
提供
3
个独立的异步串行通信端口,每个端口可以基于中断
或者
< br>DMA
进行操作。换句话说,
UART
< br>控制器可以在
CPU
和
UART
之间产生一
个中断或者
DMA
请求来传输数据。
UART
在系统时钟下运行可
支持高达
230.4K
的波特率,如果使用外部设备提供的
p>
UEXTCLK
,
UART
的速度还可以更高。每个
UART
通道各含有两个
p>
16
位的接收和发送
FIFO
。
S3C2410
的
p>
UART
包括可编程的波特率,红外
p>
接收
/
发送,一个或两个停止位
插入,
5-8
位数据宽度和奇偶校验。
每个
UART
包括一个
波特率发生器、一个发送器、一个接收器和一个控制单
元,如图
11-1
所示。波特率发生器的输入可以是
PCLK
或者
UEXTCLK
。发送器
和接收器包含
16
位的
FIFO<
/p>
和移位寄存器,数据被送入
FIFO
,然
后被复制到发送
移位寄存器准备发送,然后数据按位从发送数据引脚
TxDn
输出。同时,接收数据
从接收数据引脚
RxDn
按位移入接收移位寄存器,并复制到
FI
FO
。
特性
—
RxD0, TxD0, RxD1, TxD1, RxD2,
和
TxD2
基于中断或者
DMA<
/p>
操作
—
UART Ch 0, 1,
和
2
具有
IrDA 1.0 & 16
字节
FIFO
—
UART Ch 0
和
1
具有
nRTS0, nCTS0, nRTS1,
和
nCTS1
—
支持发生
/
接收握手
图
11-1
UART
方框图
串口操作
下述部分描述了
UART
的一些操作,包括数据发送、数据接收
、中断产生、波
特率发生、
loop-
back
模式、红外模式和自动流控制。
数据发送
发送数据的帧结构是可编程的,它由
1
个起始位、
5-8
个数据位、
1
个可选
的奇
偶位和
1-2
个停止位组成,这些
可以在线控制寄存器
ULCONn
中设定。
接收器可
以产生一个断点条件——使串行输出保持
1
帧发送时间的逻辑
0
状态
。当前发送字
被完全发送出去后,这个断点信号随后发送。断点信号发送之后,继续
发送数据到
Tx FIFO(
如果没有
FIFO
则发送到
Tx
保持寄存器
p>
)
。
数据接收
与数据发送一样,接收数据
的帧格式也是可编程的。它由
1
个起始位、
5-8
个数
据位、
1
个可选的奇偶位和
1-2
个停止位组成,这些可以在
线控制寄存器
ULCONn
中设定。
接
收器可以探测到溢出错误和帧错误
。
—
溢出错误:在旧数据被读出来之前新的数据覆盖了旧的数据
—
帧错误:
接收数据没有有效的停止位
当在
p>
3
个字时间(与字长度位的设置有关)内没有接收到任何数据并且<
/p>
Rx
FIFO
非空时,将会产生一个接
收超时条件
。
自动流控制
(AFC)
UART0<
/p>
和
UART1
通过
nRTS and nCTS
信号支持自动流控制,例如连接到外部
< br>UART
时。如果用户希望将
UART
< br>连接到一个
MODEM
,可以在
UMCONn
寄存器
中禁止自动流控位,并且通过软件控制
p>
nRTS
信号。
在
AFC
时,
nRTS
由接收器的状态决定,而
nCTS
< br>信号控制发送器的操作。只
有当
nCTS
信号有效的时候
(
在
AFC<
/p>
时,
nCTS
意味着其它
UART
的
FIFO
准备接收
数据
)UART
发送器才会发送
FIFO
中的数据。在
UART
接收数据之前,当它的接
收
FIFO
多于
2
字节的剩余空间时
nR
TS
必须有效,当它的接收
FIFO
少
于
1
字节的
剩余空间时
nRTS
必须无效(
nRTS
意味着它自己的接收
FIFO
开始准备接收数
< br>据)。
图
11-2
UART AFC
接口
注:
UART2
不支持
AF
C
功能,因为
S3C2410
没有
p>
nRTS2
和
nCTS2
。
无
AFC
的例子
通过
FIFO
操作
Rx
1
、
选择接
收模式(中断还是
DMA
模式)。
2
、
检查<
/p>
UFSTATn
寄存器中
Rx FIFO
的值。如果值小于
15
(
RX FIFO
未满),用户必须将
UMCONn[
0]
置
1(nRTS
生效
)
,如果大于等于
15
(<
/p>
RX FIFO
已
满),用户必须将
p>
UMCONn[0]
清
0(nRTS
无效
)
。
3
、重复第
2
步。
p>
通过
FIFO
操作
Tx
1
、选择发送模式(中断还是
DMA
模式)。
2
、检查
UMCONn[0]<
/p>
的值,如果为
1
(
nRTS active
),写数据到
Tx FIFO
RS-232C
接口
如果希望将
UART
连接到
M
ODEM
,
nRTS, nCTS, nDSR, nDTR,
DCD
和
nRI
信号
是必须的。这种情况下用户可以通过
GPIO
控制这些
信号因为
AFC
不支持
RS-232C
接口。
中
断
/DMA
请求的产生
每个
UART
有
5
个状态
(Tx/Rx/Error)
信号:溢出
错误、帧错误、接收缓冲满、发
送缓冲空和发送移位寄存器空。这些状态体现在
UART
状态寄存器中的相关位
(UTRSTA
Tn/UERSTATn)
。
溢出错
误和帧错误与接收错误状态相关,每个错误可以产生一个接收错误状态
中断请求,如果控
制寄存器
UCONn
中的
receiv
e-error-status-interrupt-enable
位被置
1
的话。如果探测到一个
receive-
error-status-interrupt-enable
位,通过读
UERSTSTn
的值
可以识别这一中断请求。<
/p>
控制寄存器
UCONn
的接收器模式为
1(
中断或者循环检测模式
)
:当接收器在
FIFO
模式下将一个数据从接收移位寄存器写入
FIFO
时,如果接收
到的数据到达了
Rx FIFO
的触发条件,
< br>Rx
中断就产生了。在无
FIFO
模式下,每次接收器将数据从移
位寄存器写入接收保持寄存器都将产生一个
RX
中断请求。
如果控
制寄存器的接收和发送模式选择为
DMAn
请求模式,在上面的
情况下则
是
DMAn
请求发生而不是<
/p>
RX/Tx
中断请求产生。
UART
错误状态
FIFO
UART
除了
Rx FIFO
外还有错误状态
FIFO
。错误状态
FIFO
指示接收到的哪个数
据有错误。只有当有
错误的数据准备读出的时候才会产生错误中断。要清除错误状
态
FIFO
,
URXHn
和
UERSTATn
必须被读出。
例如:假设
UART Rx FIFO
顺序接收到
ABCD4
个字符,在接收
B
的时候发生了
帧错误。事实上
UAR
T
接收错误并未产生任务错误中断,因为错误的数据
B
还没有
被读出,只有当读
B
字符的时候才会发生错误中断。图
11-3
描述了这一例子
。
波特率发生器
每个
< br>UART
的波特率发生器提供串行时钟给接收器和发送器。波特率发生器的
时钟源可以选择呢不系统时钟或者
UEXTCLK
。换句话说,通过设置
UCONn
的时钟
< br>选择被除数是可选的。波特率时钟通过对时钟源
(PCLK OR UEXTCL
K)
进行
16
分
频,然后进行一个
16
位的除数分频得到,这个分频数由波特
率除数寄存器
UBRDIVn
指定。
U
BRDIVn
可由下式得出:
UBRDIVn = (int)(PCLK/(bps * 16) ) -1
p>
此除数应该在
1-(2
的
< br>16
方
-1)
之间。
为了
UART
的精确性
,
S3C2410
还支持
UEXTCL
K
作为被除数。
< br>如果使用
UEXTCLK
(由外部
UART
设备或者系统提供),串行时钟能够精确地
和
UEXTCLK
同步,因此用户可以得到更精确的
UART
操作,
UBRDIVn
由
下式决
定:
UBRDIVn = (int)(UEXTCLK / (bps x 16) )
–
1
此除数应该在
< br>1-(2
的
16
方
-1)
之间,且
UEXTCLK
要比
PCLK
低。
例如,如果波特率为
115200bps
,而
PCLK
或者
UEXTCLK
为
40MHz
,则
UBRDI
Vn
为:
UBRDIVn =
(int)(40000000/(115200 x 16)) -1
=
(int)(21.7) -1
= 21 -1 = 20
波特率错误容差
UART
的帧错误应该少于
1.87%(3/160)
。<
/p>
UART Frame error should be
less than 1.87%(3/160).
tUPCLK =
(UBRDIVn + 1) x 16 x 1Frame / PCLK
tUPCLK : Real UART Clock
tUEXACT = 1Frame / baud-rate
tUEXACT : Ideal UART Clock
UART error = (tUPCLK
–
tUEXACT) / tUEXACT x 100%
注意:
1
、
1
帧
=
起始位
+
数据位
+
奇偶位
+
停止位
2
、在特定条件下,波特率上限可达
921.6K
,例如当
PCLK
为
60MHZ
时,
可以使用
921.6K
的波特率而误差为
1.69%
loop-
back
模式
为了识别通讯连接中的
故障,
UART
提供了一种叫
loop
-back
模式的测试模式。
这种模式结构上使能了
UART
的
TXD
和
p>
RXD
连接,因此发送数据被接收器通过
R
XD
接收。这一特性允许处理器检查每个
SIO
通道的内部发送到接收的数据路径。可以
通过设置
UA
RT
控制寄存器
UCONn
中的
loopback
位选择这一模式。
红外
(IR)
模式
UART
支持红外
(IR)
接收和发送,可以通过设置
UART
线控制寄存
器
ULCONn
的
Infra-
red-mode
位来进入这一模式。图
11-4
阐述了如何实现
IR
模式。
在
IR
发送模式下,发送脉冲的比例是
3/16
——正常的发送比率
(
当发送数据位为
0
的时候
)
;在
IR
接收模式下,接收器必
须检测
3/16
的脉冲来识别
0
值(见图
11-6
和
11-7
所示的帧时序)。
UART SFR
UART
线控制寄存器
ULCONn
有
3
个
UAR
T
线控制寄存器:
ULCON0, ULCON1, and
ULCON2