-
UART
异步串行口
UART
异步串行口简介
数据通信的基本方式可分为并行通信与串行通信两种:
?
并行通信
:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速
度快,适用于短距离通信,但要求通讯速率较高的应用场合。
?
串行通信
:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利
用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场
合。
UART
异步串行口的传输格式
异步通信以一
个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然
而在同一个字符中的两个相邻位代码间的时间间隔是固定的。
通信协议(通信规程):是指通信双方约定的一些规则。在使用异步串口传送一个
字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资
料位、奇偶校验
位、停止位。通讯时序图如下:
?
开始前,线路处于空闲状态,送出
连续“
1
”。传送开始时首先发一个“
0
”作为
起始位,然后出现在通信线上的是字符的二进制编码数据。
?
每个字符的数据位长可以约定为
5
位、
6
位、
7
位或
8
位,一般采用
ASCII
编码。
后面是奇偶校验位,根据约定
,用奇偶校验位将所传字符中为“
1
”的位数凑成奇
数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。
p>
?
最后是表示
停止位的“
1
”信号,这个停止位可以约定持续
1
位、
1.5
位或
2
位
的时间宽度。
?
至此一个字符传送完毕,线路又进
入空闲,持续为“
1
”。经过一段随机的时间后,
下一个字符开始传送才又发出起始位。
?
每一个数据位的宽度等于传送波特
率的倒数。微机异步串行通信中,常用的波特
率为
110
,
150
,
300
,
600
,<
/p>
1200
,
2400
,
4800
,
9600
,
19200
,
384
00
,
115200
等。
S3C2410
的异步串行口
1
S3C2410
的
UART
(
通用异步串行
口)
单元提供三个独立的异步串行
I/O
端口,
每个都可以在中断和
DMA <
/p>
两
种模式下进行。
UART
支持的最高波特率达
230.4kbps
。每个
p>
UART
通道包含
2
个
16
位
FIFO
分别提供给接
收和发送。
每个
UART
包含波特率发生器,<
/p>
接收器,
发送器和控制单元。
。
波特率发生器以
PCLK
或
UCLK
为时钟源。
发
送器和接收器包含
16
字节
FIFO
寄存器和移位寄存器,当发送数据的时候,数据先写到
FIFO
然后拷贝
到发送移位寄存器,然后从数据输出端口(
TxDn
)依次被移位输出。被接收的数据也同样从接收端口
(
RxDn
)移位输入到移位寄存器,然后拷贝到<
/p>
FIFO
中。
异步串行口的操作
?
数据发送操作
数据发送帧的格式是可编程的,它包含一个开始位,
5
到
8
个数据位,一个可选的奇偶位和
一个或
两个停止位,这些可以通过线性控制器(
ULCONn<
/p>
)来设置。发送器也能够产生发送中止条件。中止条件
迫使串口输
出保持在逻辑
0
状态,
这种状态保持
一个传输帧的时间长度。
通常在一帧传输数据完整地传
输完之后
,
在通过这个全
0
状态将中止信号发
送给对方。
中止信号发送之后,
传送数据连续放到
FIFO
中
(在不使用
FIFO
模式下,将被放到输出保持寄存器)。
?
数据接收操作
与数据发送一样,数据
接收的帧也是可以编程的,它包含一个开始位,
5
到
8
个
<
/p>
数据,一个可选的奇偶位和一位或两位停止位,它们都是通过线性控制器(
ULCONn
)
来设置的。
接收器能够检测溢出错误
,奇偶校验错误,帧错误和中止状况,每种情况下都将
会将一个错误标志置位。
UART
异步串行口的波特率发生器
每个
UART
的波特率发生器为传输
提供了串行移位时钟。波特率产生器的时钟源可以从
S3C2410
的
内部系统时钟或
UCLK
中来选择。。波特率由时钟源(
PCLK
或
UCLK
)
16
分频然后被
UART
波特率除数寄<
/p>
存器(
UBRDIVn
)指定的
16
位除数决定。因此,
UBRDIVn
的值可以按照下式确定:
UBRDI
Vn
=(int)
(
PCLK/
(
bps*16
))
-1
,
其中
bps
为波特率。
例如,如果波特率为
115200bps
且
PCLK
或
UCLK
为
40MHz,
则
UBRDIVn
为:
UBRDIVn
=
(
int
)
(40000000)(115200*16
))-1
= (int)(21.7)-1
= 21-1
= 20
UART
异步串行口波特率
发生器的误差极限
UART
传输
p>
10bit
数据的时间误差应该小于
1.8
7
%(
3/160
)。
tUPCLK = (UBRDIVn + 1) x 16 x 10 /
PCLK
实际的传输
10bit
所需时间。
tUEXACT = 10 / baud-
rate
理想情况下传输
< br>10
位需要的时间。
UART
error
=
(tUPCLK
–
tUEXACT) / tUEXACT x 100%
异步串行口的相关寄存器
?
线路控制寄存器(
ULCON
)
2
线性控制寄存器,主要用来规定
传输帧的格式。下面表格是线控制寄存器的地址
和位定义:
寄存器
ULCON0
ULCON1
ULCON2
地址
0x50000000
0x50004000
0x50008000
读
/
写
读
/
写
读
/
写
读
/
写
描述
UART
通道
0
线路控制寄存器
UART
通道
1
线路控制
寄存器
UART
通道
2
线路控制寄存器
重置值
0x00
0x00
0x00
ULCONn
保留
Infra-Red Mode
位
[7]
[6]
描述
初始状态
0
0
Parity Mode
决定是否用红外模式。
0 =
正常模式操作
1 =
红外
Tx/Rx
模式
[5:3]
指定奇偶产生的类型并在
UART
的传输与接收操作中检查。
0xx =
非奇偶
100 =
奇
101 =
偶
110 =
强制奇偶
/
选中为
1
111 =
强制奇偶
/
选中为
0
指定多少个停止位将被使用对于帧结束信号。
0 =
每帧一个停止位
1 =
每帧两个停止位
[1:0]
显示每帧传输或接收的数据位的数目。
00 = 5
位,
01 =
6
位
10 =
7
位,
11 =
8
位
[2]
000
Number of Stop Bit
0
Word Length
00
?
p>
控制寄存器(
UCON
)
< br>
寄存器
UCON0
UCON1
UCON2
地址
0x50000004
0x50004004
0x50008004
读
/
写
读
/
写
读
/
写
读
/
写
描述
UART
通道
0
控制寄存器
UART
通道
1
控制寄存器<
/p>
UART
通道
2
控制寄存器
重置值
0x00
0x00
0x00
UCONn
Clock
Selection
位
描述
初始状态
0
[10]
选择
PCLK
或
UCLK
对于
UART
的波特率。
0=PCLK :
UBRDIVn = (int)(PCLK / (bps x 16) ) -1
1=UCLK(@GPH8) : UBRDIVn = (int)(UCLK /
(bps x 16) ) -1
3
Tx Interrupt
Type
Rx Interrupt
Type
Rx Time Out
Enable
[9]
中断请求类型。
0 =
脉冲型
(
当
Tx
缓冲区在无输入输出模式下变空或当
Tx
在输入
输出
模式下的输入输出到达触发电平时,中断就被请求。
)
1 =
电平型
(
当
Tx
缓冲区在无输入输出模式下变空或当
Tx
在输入输出
模式下的输入输出到达触发电平时,中
断就被请求。
)
[8]
中断请求类型。
0 =
脉冲型
(
当
Rx
缓冲区在无输入输出模式下接收数据或当
Rx
在
输入
输出模式下的输入输出到达触发电平时,中断就被请求。
)
1 =
电平型
(
当
Rx
缓冲区在无输入输出模式下接收数据或当
Rx
在输入
输出模式下的输入输出到达触发电平时
,中断就被请求。
)
[7]
当
UART
的输入输出被使能时,使
Rx
的定时中断使能
/
失能。这个中断
p>
是一个接收中断。
0 =
失能,
1 =
使能
0
0
0
Rx
Error
Status
[6]
使
UART
在一个例外上产生中断是使
能的,例如一个暂停,帧出错,奇
Interrupt
偶出错或溢出出错在一个接收操作中。
Enable
0 =
不产生接收出错的状态中断
1 =
产生接收出错的状态中断
Loopback Mode
[5]
设置回溯位为
1
将引起
UART<
/p>
加入到回溯模式中。这种模式只是为测试
目的而提供的。
0 =
正常操作,
1 =
回溯模式
Send Break
Signal
[4]
设置这个位
将引起
UART
在一帧的时间内传送一个暂停。
这个位在送出
暂停信号后会被自动清除。
0 =
正常传输,
1 =
传送暂停信号
0
0
0
Transmit Mode
[3:2]
决定哪一个函数当前能够对
Tx
写入数据到
UART
传输缓冲寄存器。
00 =
失能
01 =
中断请求或轮流检测模式
10 = DMA0
请求(只对于
UA
RT0
)
,DMA3
请求(只对于
p>
UART2
)
11 =
DMA1
请求(只对于
UART1)
Receive Mode
[1:0]
< br>决定哪一个函数当前能够读取数据从
UART
接收缓冲寄
存器。
00 =
失能
01 =
中断请求或轮流检测模式
10 =
DMA0
请求(只对于
UART0
)<
/p>
,DMA3
请求(只对于
UART2
p>
)
11 =
DMA1
请求(只对于
UART1)
00
00
?
p>
FIFO
控制寄存器(
UFCON
)
寄存器
UFCON0
UFCON1
UFCON2
UFCONn
地址
0x50000008
0x50004008
0x50008008
位
读
/
写
读
/
写
读
/
写
读
/
写
描述
UART
通道
0FIFO
控制寄存器
p>
UART
通道
1FIFO
< br>控制寄存器
UART
通道
p>
2FIFO
控制寄存器
描述
重置值
0x0
0x0
0x0
初始状态
00
Tx FIFO Trigger Level
[7:6]
决定传输
FIFO
的触发电平。
00 =
空,
01 =
4
字节
10 =
8
字节,
11 =
12
字节
Rx FIFO
Trigger Level
[5:4]
决定接收
FIFO
的触发电平。
00 = 4
字节,
01 =
8
字节
10 =
12
字节,
11 =
16
字节
00
4
保留
Tx FIFO Reset
Rx FIFO Reset
[3]
[2]
在重新设置
FIFO
后自动清除。
0
=
正常,
1= Tx
FIFO
重置
[1]
在重新设置
FIFO
后自动清除。
0 =
正常,
1= Rx
FIFO
重置
[0]
0 =
失能
1 =
使能
0
0
0
FIFO Enable
0
?
p>
MODEM
控制寄存器(
UMCON
)
寄存器
UMCON0
UMCON1
保留
地址
0x5000000C
0x5000400C
0x5000800C
位
[7:5]
这些位必须是
0
[4]
0 =
失能
1 =
使能
读
/
写
读
/
写
读
/
写
-
描述
U
ART
通道
0Modem
控制寄存器<
/p>
UART
通道
1Modem
控制寄存器
保留
描述
重置值
0x0
0x0
未定义
初始状态
00
0
00
0
UMCONn
保留
Auto Flow
Control
(AFC)
保留
Request to Send
[3:1]
这些位必须是
0
[0]
如果
AFC
位
是使
p>
能
的,
这
个值
p>
将
被忽
略
。在
p>
这种
情
况下
S3C
2410X
将自动控制
nRTS
。如果
AFC
位是失能的,
nRTS
必须
由软件控制。
0
=
‘
H
’电平
(
不激活
nRTS)
,
1 =
‘
L
’电平
(
激活
nRTS)
?
发送<
/p>
/
接收状态寄存器(
UTRSTA
T
)
Register
Addre
ss
R/W
Description
R
R
R
UART
通道
0
Tx/Rx
状态寄存器
UART
通道
1
Tx/Rx
状态寄存器
UART
通道
2
Tx/Rx
状态寄存器
Reset
Value
0x6
0x6
0x6
UTRSTAT0
0x50000010
UTRSTAT1
0x50004010
UTRSTAT2
0x50008010
UTRSTATn
Transmitter empty
Bit
Description
[2]
当传输缓冲寄存器中没有有效的值传输并且传输转换寄
存器中为空的时候,自动置
1.
0 =
不为空
1
=
传输器
(
传输缓冲器
&
转换寄存器
)
为空
Initial
State
1
5
-
-
-
-
-
-
-
-
-
上一篇:ABAQUS子程序USDFLD
下一篇:都知道管理要赋能,但有几个真正懂赋能?