-
实验三
ARM
的串行口实验
一、实验目的
1
.掌握
ARM
的串行口工作原理
。
2
.学习编程实现
ARM
的
UART
通讯。
p>
3
.掌握
CPU
利用串口通讯的方法。
二、实验内容
学习串行通讯原理,了
解串行通讯控制器,阅读
ARM
芯片文档,掌握
ARM
的
UART
相关寄存器
的功能,熟悉
ARM
系统硬件的
UAR
T
相关接口。编程实现
ARM
和
计算机实现串行通讯:
ARM
监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超
级终端
通讯的)
,
即按
PC
< br>键盘通过超级终端发送数据,
开发板将接收到的数据再
返
送给
PC
,在超级终端上显示。
三、预备知识
1
.用
EWARM
集成开发环境,
编写和调试程序的基本过程。
2
.<
/p>
ARM
应用程序的框架结构。
3
、了解串行总线。
四、实验设备及工具
硬件:
ARM
嵌入式开发平台、
PC
机
Pentium100
以上
、
用于
ARM920T
的
JTAG
仿真器、串口线。
软件:
PC
机操作系统
Win200
0
或
WinXP
、
EWARM
集成开发环境、仿真器驱动程
序、超级终端通讯
程序。
五、实验原理及说明
1
.异步串行
I
/
O
异步串行方式是将传输数据的每个字符一位接一位
(
< br>例如先低位、
后高位
)
地
传送。数据的各不同位可以分时使用同一传输通道,因此串行
I
/
O
可以减少信
号连
线,
最少用一对线即可进行。
接收方对于同一根线上一连串的数
字信号,
首
先要分割成位,再按位组成字符。为了恢复发送的信
息,双方必须协调工作。在
微型计算机中大量使用异步串行
I<
/p>
/
O
方式,双方使用各自的时钟信号,而
且允
许时钟频率有一定误差,
因此实现较容易。
但是由于每个字符都要独立确定起始
和结束
(
即每个字符都要重新同步
)
,字符和字符间还可
能有长度不定的空闲时
间,因此效率较低。
图
2-1
串行通信字符格式
图
2-1
给出异步串行通信中一个字符的传送格式。开
始前,线路处于空闲
状态,送出连续“
1
”
。传送开始时首先发一个“0”作为起始位,然后出现在通
信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为
5
位、
6
位、
7
位或
8
位,一般采用
ASCII
编码。后面是奇偶校验位,根据约定,用奇偶校验
位将所传字符中为
“
1
”<
/p>
的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,
这样就取消奇偶校验位。最后是表示停止位的“
1
”信号,这个停止位可以约定
持续
1
位、
1.5
位或
2
位的时间宽度。
至此一个字符传送完毕,
线路又进入空闲,
持续为“
1
”
。经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的
波特率为
50
,
95
,
110
,
150
,
300
,
600
< br>,
1200
,
2400
,
4800
,
9600
等。
接收方按约定的格式接收数据,
并进行检查,可以查出以下三种错误:
1
)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
2
)帧格式错:一个字符从起始位到停止位的总位数不对。
3
)溢出错:若先接收的字符尚未被微机读取,
后面的字符又传送过来,则产
生溢出错。
每一种错误都会给出相应的出错信息,提示用户处理。
2
.串行接口的物理层标准
通用的串行
I
/
O
p>
接口有许多种,现仅就最常见的两种标准作简单介绍。
1
)
EIA
RS
—
232C
这
< br>是
美
国
电
子
工
业
协
会
推
荐
的
一
p>
种
标
准
(Elec
tronic
industries
Association
Recoil-mended
p>
Standard)
。它在一种
25
针接插件
(DB
—
2
5)
上定义
了串行通信的有关信号。
这
个标准后来被世界各国所接受并使用到计算机的
I
/
O
接口中。
⑴
信号连线
在实际异步串行通信中,并不要求用全部的
RS
—
232C
信号,许多
PC<
/p>
/
XT
兼
容机仅
用
15
针接插件
(DB
—
15)
来引出其异步串行
I
/
O
信号,而
PC
中更是大量
采用
9
针接插件
(DB
—
9)
来担当此任,
因此这里也不打算就
RS
—
232C
的全部信号
作详细解释。图
3-2
给出两台微机利用
RS
—
232C
接口通信的联线<
/p>
(
无
MODEM)
,
我们按
DB
—
25
的引脚号标注各个信号。
下
面对图
3-2
中几个主要信号作简要说明。
保护地
通信线两端所接设备
的金属外壳通过此线相联。
当通信电缆使用屏
蔽线时,
常利用其外皮金属屏蔽网来实现。
由于各设备往往已通过电源线接通保<
/p>
护地,
因此,
通信线中不必重复接此地线
(
图中用虚线表示
)
< br>。
例如使用
9
针插头
(DB
—
9)
的异步串行
I
/
O
接口就
没有引出保护地信号。
TXD
/
RXD
< br>是一对数据线,
TXD
称发送数据输出,
RXD
称接收数据输入。当
两台微机以全双工方式直接
通信
(
无
MODEM
< br>方式
)
时,
双方的这两根线应交
叉联接
(
扭接
)
。
信号地
所有的信号都要通过信号地线构成耦合回路。通信线有以上三条
(TXD
、
RXD
和信号地
)
p>
就能工作了。其余信号主要用于双方设备通信过程中的联
络
(
握手信号
)
,
而且有些信号仅用于和
MODEM
的联络。<
/p>
若采取微型机对微型机直
接通信,
且双方
可直接对异步串行通信电路芯片编程,
若设置成不要任何联络信
号,则其它线都可不接。有时在通信线的同一端将相关信号短接以“自握手”方
式满足联
络要求。这就是如图
2-2(a)
所示的情况。
图
2-2
实用
RS-232C
连线
RTS
/
CTS
< br>请求发送值号
RTS
是发送器输出的准备好信号。接收方
准备好后
送回清除发送信号
CTS
后,
发送数据开始进行,
在同一端将这两个信号短接就意
味着只要发送器准备好即可发送。
DCD <
/p>
载波检测
(
又称接收线路信号检测
)
。
本意是
MODE
M
检测到线路中的载波
信号后,通知终端准备接收数据的信号,
在没有接
MODEM
的情况下,也可以和
RTS
、
CTS
短接。
相对于
MODEM
而言,
微型机和终端机一样被称为数据终端
DTE(Data
Terminal
Equipment)
而
MODEM
被
称
为
数
据
通
信
装
置
DCE(Data
Communications
Equipment)
,
DTE
和
DCE<
/p>
之间的连接不能像图
3-2
中有“扭接”
现象,而应该是
按接插件芯号,同名端对应相接。此处介绍的
R
S
—
232C
的信号名称及信号流向<
/p>
都是对
DTE
而言的。
< br>
DTR
/
DSR
数据终端准备好时发
DTR
信号,在收到数据通
信装置装备好
DSR
信号后,方可通信。图
3-2(a)
中将这一对信号以“自握手”方式短接。
R1
原意是在
MODEM
接收到电话交换机有效的拨号时,
使
RI
有效,
通知数据
终端准备传送。在无
MODEM
时也可和
DTR
相接。
图
3-2(b)
给出了无
MODEM
情况下,
< br>DTE
对
DTE
异步串行通信线
路的完整连接,
它不仅适用于微型机和微型机之间的通信,
还适
用于微型机和异步串行外部设备
(
如终端机、绘图仪、数字化仪
等
)
的连接。
(
2
)
信号电平规定
RS
< br>—
232C
规定了双极性的信号逻辑电平:
-3V
到
-25V
之间的电平表示逻辑“
1
”
< br>。
+3V
到
< br>+25V
之间的电平表示逻辑“
0
”
。
因此这是一套负逻辑定义。
以上标准
称为
EIA
电平。
PC
/
XT
系列使用的信号电平是
-12V
和
+12V
,符合
EIA
标准,但在计算机内部流动的信号都是
TT
L
电平,因此这中间需要用电平转
换电路。常用芯片
MCl488
或
SN75150
< br>将
TTL
电平转换为
EIA
p>
电平,
MCl489
或
SN75154
将
EIA
电平转换
为
TTL
电平。
PC
< br>/
XT
系列以这种方式进行串行通信时,
在波特率不高于
9600
的情况下,理论上通信线的长
度限制纽为
15
米。
2
)
20mA
电流环
20mA
电流环并没有形成一套完整的标准,
主要是将数字信号的表示方法不使
用电子的高低,
而改用
20mA
电流的有无:
“
1
”
信号在环路中产生
20mA
电流;
“
0
p>
”
信号无电流产生。当然也需要有电路来实现
TTL
电平和
20mA
电流之间的转
换。
图
3-3
是
PC
/
XT
微机中使用的一种
20mA
电流环接口。当发送方
S
OUT
=
1
时,便
有
20mA
电流灌入接收方的光耦合器,于是
光耦合器导通,使
S
IN
=
1
。反之当发
送方
S
p>
OUT
=
0
时环路
电流为零,接收方光耦合器截止,
S
IN
=
0
。显然,当要求双工
方式通信时
,
双方都应各有收发电路,
通信联线至少要
4
根。
由于通信双方利用
光耦合器
实现电气上隔离,而且信号又是双端回路方式,故有很强的抗干扰性,
可以传送远至
p>
1
千米的距离。
图
2-3
20mA
电流环接口
“
0
”
、
< br>“
1
”信号的表示方法不同外,其他方面
(
如字符的传输格式
)
常借用
RS
—
232C
标准。
因此
PC
/
< br>XT
微机中的异步串行信道接口往往将这两种标准做在
一
起,实际通过跨接线从二者中择一使用。
(
3
)
ARM
自带的串行口寄存器
ARM<
/p>
自带三个
UART
端口,每个
UART
通道都有
16
字
节的
FIFO
(先入先出寄
存器)用于
接受和发送。用系统时钟最大波特率可达
230.4K
,如果用
外部时钟
(UCLK)UART
可以以更高的波特率运行。
p>
S3C2410X UART
包括可编程
波特率,红外发送
/
接收,插入一个或两个停止
位,
5
字节,
6
字节,
7
字节,或
8
字节数据宽度和奇偶校验。
其特点是:
-----
基于
DMA
或者中断操作的
RxD0
,
TxD0
,
RxD1
,
TxD1
,
RxD2
,
TxD2
。
-----
包括
IrDA 1.0
p>
和
16
字节
FIF
O
的
UART
通道
0
,
1
,
2
。
-----
包括
nRTS0
,
nCTS0
p>
,
nRTS1
和
n
CTS1
的
UART
通道。
-----
支持握手方式的接收
/
发送
< br>UART
包括三个波特率因子寄存器
UBRDIV0,
UBRDIV1
and
UBRDI
V2
,存储在波
特率因子寄存器
(UB
RDIVn)
中的值决定串口发送和接收的时钟数率(波特率),
计算公式如下:
UBRDIVn =
(round_off)(MCLK / (bps x 16)+0.5)
–
1
其中
M
CLK
是系统频率,例如在
40MHz
的情况下,当波特率取
115200
时,
UBRDIVn = (int)(40000000 / (115200 x
16)+0.5) -1
= (int)(21.7+0.5) -1
= 22 -1 = 21
六、实验步骤
1
.新建工程,将“
Exp2 ARM
串口实验”中的文件添加到工程中,这些是启
动时所需要
的文件。
2<
/p>
.
定义与
UART
有关的各个寄存器地址和一些特殊的位命令。
主要有以下各
寄存器(
44b.h
)
:
/* UART
的全部功能寄存器
*/
#define rULCON0 (*(volatile unsigned
*)0x1d00000)
#define rULCON1
(*(volatile unsigned *)0x1d04000)
#define rUCON0 (*(volatile unsigned
*)0x1d00004)
#define rUCON1
(*(volatile unsigned *)0x1d04004)
#define rUFCON0 (*(volatile unsigned
*)0x1d00008)
#define rUFCON1
(*(volatile unsigned *)0x1d04008)
#define rUMCON0 (*(volatile unsigned
*)0x1d0000c)
#define rUMCON1
(*(volatile unsigned *)0x1d0400c)
#define rUTRSTAT0 (*(volatile unsigned
*)0x1d00010)
#define rUTRSTAT1
(*(volatile unsigned *)0x1d04010)
#define rUERSTAT0 (*(volatile unsigned
*)0x1d00014)
#define rUERSTAT1
(*(volatile unsigned *)0x1d04014)
#define rUFSTAT0 (*(volatile unsigned
*)0x1d00018)
#define rUFSTAT1
(*(volatile unsigned *)0x1d04018)
#define rUMSTAT0 (*(volatile unsigned
*)0x1d0001c)
#define rUMSTAT1
(*(volatile unsigned *)0x1d0401c)
#define rUBRDIV0 (*(volatile unsigned
*)0x1d00028)
#define rUBRDIV1
(*(volatile unsigned *)0x1d04028)
#ifdef __BIG_ENDIAN
//
大端摸式
#define
rUTXH0 (*(volatile unsigned char *)0x1d00023)