串行口实验.docx
《串行口实验.docx》由会员分享,可在线阅读,更多相关《串行口实验.docx(13页珍藏版)》请在冰豆网上搜索。
![串行口实验.docx](https://file1.bdocx.com/fileroot1/2023-1/30/8b1941b8-9fcc-49ac-8371-eef4492a70e8/8b1941b8-9fcc-49ac-8371-eef4492a70e81.gif)
串行口实验
1ARM的串行口实验
1一、实验目的
1.掌握ARM的串行口工作原理。
2.学习编程实现ARM的UART通讯。
3.掌握CPU利用串口通讯的方法。
2二、实验内容
学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。
编程实现ARM和计算机实现串行通讯:
ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
3三、预备知识
1、用EWARM集成开发环境,编写和调试程序的基本过程。
2、ARM应用程序的框架结构。
3、了解串行总线
4四、实验设备及工具
硬件:
ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。
软件:
PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。
5五、实验原理及说明
1.异步串行I/O
异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图3-1串行通信字符格式
图3-1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。
接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:
1)奇偶错:
在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
2)帧格式错:
一个字符从起始位到停止位的总位数不对。
3)溢出错:
若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。
每一种错误都会给出相应的出错信息,提示用户处理。
2.串行接口的物理层标准
通用的串行I/O接口有许多种,现仅就最常见的两种标准作简单介绍。
1)EIARS—232C
这是美国电子工业协会推荐的一种标准(ElectronicindustriesAssociationRecoil-mendedStandard)。
它在一种25针接插件(DB—25)上定义了串行通信的有关信号。
这个标准后来被世界各国所接受并使用到计算机的I/O接口中。
⑴ 信号连线
在实际异步串行通信中,并不要求用全部的RS—232C信号,许多PC/XT兼容机仅用15针接插件(DB—15)来引出其异步串行I/O信号,而PC中更是大量采用9针接插件(DB—9)来担当此任,因此这里也不打算就RS—232C的全部信号作详细解释。
图3-2给出两台微机利用RS—232C接口通信的联线(无MODEM),我们按DB—25的引脚号标注各个信号。
下面对图3-2中几个主要信号作简要说明。
保护地通信线两端所接设备的金属外壳通过此线相联。
当通信电缆使用屏蔽线时,常利用其外皮金属屏蔽网来实现。
由于各设备往往已通过电源线接通保护地,因此,通信线中不必重复接此地线(图中用虚线表示)。
例如使用9针插头(DB—9)的异步串行I/O接口就没有引出保护地信号。
TXD/RXD是一对数据线,TXD称发送数据输出,RXD称接收数据输入。
当两台微机以全双工方式直接通信(无MODEM方式)时,双方的这两根线应交叉联接(扭接)。
信号地所有的信号都要通过信号地线构成耦合回路。
通信线有以上三条(TXD、RXD和信号地)就能工作了。
其余信号主要用于双方设备通信过程中的联络(握手信号),而且有些信号仅用于和MODEM的联络。
若采取微型机对微型机直接通信,且双方可直接对异步串行通信电路芯片编程,若设置成不要任何联络信号,则其它线都可不接。
有时在通信线的同一端将相关信号短接以“自握手”方式满足联络要求。
这就是如图3-2(a)所示的情况。
图3-2实用RS-232C连线
RTS/CTS请求发送值号RTS是发送器输出的准备好信号。
接收方准备好后送回清除发送信号CTS后,发送数据开始进行,在同一端将这两个信号短接就意味着只要发送器准备好即可发送。
DCD载波检测(又称接收线路信号检测)。
本意是MODEM检测到线路中的载波信号后,通知终端准备接收数据的信号,在没有接MODEM的情况下,也可以和RTS、CTS短接。
相对于MODEM而言,微型机和终端机一样被称为数据终端DTE(DataTerminalEquipment)而MODEM被称为数据通信装置DCE(DataCommunicationsEquipment),DTE和DCE之间的连接不能像图3-2中有“扭接”现象,而应该是按接插件芯号,同名端对应相接。
此处介绍的RS—232C的信号名称及信号流向都是对DTE而言的。
DTR/DSR数据终端准备好时发DTR信号,在收到数据通信装置装备好DSR信号后,方可通信。
图3-2(a)中将这一对信号以“自握手”方式短接。
R1原意是在MODEM接收到电话交换机有效的拨号时,使RI有效,通知数据终端准备传送。
在无MODEM时也可和DTR相接。
图3-2(b)给出了无MODEM情况下,DTE对DTE异步串行通信线路的完整连接,它不仅适用于微型机和微型机之间的通信,还适用于微型机和异步串行外部设备(如终端机、绘图仪、数字化仪等)的连接。
⑵ 信号电平规定
RS—232C规定了双极性的信号逻辑电平:
-3V到-25V之间的电平表示逻辑“1”。
+3V到+25V之间的电平表示逻辑“0”。
因此这是一套负逻辑定义。
以上标准称为EIA电平。
PC/XT系列使用的信号电平是-12V和+12V,符合EIA标准,但在计算机内部流动的信号都是TTL电平,因此这中间需要用电平转换电路。
常用芯片MCl488或SN75150将TTL电平转换为EIA电平,MCl489或SN75154将EIA电平转换为TTL电平。
PC/XT系列以这种方式进行串行通信时,在波特率不高于9600的情况下,理论上通信线的长度限制纽为15米。
2)20mA电流环
20mA电流环并没有形成一套完整的标准,主要是将数字信号的表示方法不使用电子的高低,而改用20mA电流的有无:
“1”信号在环路中产生20mA电流;“0”信号无电流产生。
当然也需要有电路来实现TTL电平和20mA电流之间的转换。
图3-3是PC/XT微机中使用的一种20mA电流环接口。
当发送方SOUT=1时,便有20mA电流灌入接收方的光耦合器,于是光耦合器导通,使SIN=1。
反之当发送方SOUT=0时环路电流为零,接收方光耦合器截止,SIN=0。
显然,当要求双工方式通信时,双方都应各有收发电路,通信联线至少要4根。
由于通信双方利用光耦合器实现电气上隔离,而且信号又是双端回路方式,故有很强的抗干扰性,可以传送远至1千米的距离。
图3-320mA电流环接口
“0”、“1”信号的表示方法不同外,其他方面(如字符的传输格式)常借用RS—232C标准。
因此PC/XT微机中的异步串行信道接口往往将这两种标准做在一起,实际通过跨接线从二者中择一使用。
ARM自带三个UART端口,每个UART通道都有16字节的FIFO(先入先出寄存器)用于接受和发送。
用系统时钟最大波特率可达230.4K,如果用外部时钟(UCLK)UART可以以更高的波特率运行。
S3C2410XUART包括可编程波特率,红外发送/接收,插入一个或两个停止位,5字节,6字节,7字节,或8字节数据宽度和奇偶校验。
其特点是:
-----基于DMA或者中断操作的RxD0,TxD0,RxD1,TxD1,RxD2,TxD2。
-----包括IrDA1.0和16字节FIFO的UART通道0,1,2。
-----包括nRTS0,nCTS0,nRTS1和nCTS1的UART通道。
-----支持握手方式的接收/发送
与UART有关的寄存器主要有以下几个:
(1)UART线控制寄存器包括ULCON0,ULCON1和ULCON2,主要用来选择每帧数据位数、停止位数,奇偶校验模式及是否使用红外模式,如表3-1,3-2所示。
表3-1UART寄存器设置
Register
Address
R/W
Description
ResetValue
ULCON0
0x50000000
R/W
UARTchannel0linecontrolregister
0x00
ULCON1
0x50004000
R/W
UARTchannel1linecontrolregister
0x00
ULCON2
0x50008000
R/W
UARTchannel2linecontrolregister
0x00
表3-2UART寄存器位描述
ULCONn
Bit
Description
InitialState
Reserved
[7]
0
Infra-RedMode
[6]
DeterminewhetherornottousetheInfra-Redmode.0=Normalmodeoperation1=Infra-RedTx/Rxmode
0
ParityMode
[5:
3]
SpecifythetypeofparitygenerationandcheckingduringUARTtransmitandreceiveoperation.0xx=Noparity100=Oddparity101=Evenparity110=Parityforced/checkedas1111=Parityforced/checkedas0
000
NumberofStopBit
[2]
Specifyhowmanystopbitsaretobeusedforend-of-framesignal.0=Onestopbitperframe1=Twostopbitperframe
0
WordLength
[1:
0]
Indicatethenumberofdatabitstobetransmittedorreceivedperframe.00=5-bits01=6-bits10=7-bits11=8-bits
00
(2)UART控制寄存器包括UCON0,UCON1andUCON2,主要用来选择时钟,接收和发送中断类型(即电平还是脉冲触发类型),接收超时使能,接收错误状态中断使能,回环模式,发送接收模式等。
如表3-3,3-4所示
表3-3UART控制寄存器设置
Register
Address
R/W
Description
ResetValue
UCON0
0x50000004
R/W
UARTchannel0controlregister
0x00
UCON1
0x50004004
R/W
UARTchannel1controlregister
0x00
UCON2
0x50008004
R/W
UARTchannel2controlregister
0x00
表3-4UART控制寄存器位描述
UCONn
Bit
Description
InitialState
ClockSelection
[10]
SelectPCLKorUCLKfortheUARTbaudrate.0=PCLK:
UBRDIVn=(int)(PCLK/(bpsx16))-11=UCLK(@GPH8):
UBRDIVn=(int)(UCLK/(bpsx16))-1
0
TxInterruptType
[9]
Interruptrequesttype.0=Pulse(InterruptisrequestedassoonastheTxbufferbecomesemptyinNon-FIFOmodeorreachesTxFIFOTriggerLevelinFIFOmode.)1=Level(InterruptisrequestedwhileTxbufferisemptyinNon-FIFOmodeorreachesTxFIFOTriggerLevelinFIFOmode.)
0
RxInterruptType
[8]
Interruptrequesttype.0=Pulse(InterruptisrequestedtheinstantRxbufferreceivesthedatainNon-FIFOmodeorreachesRxFIFOTriggerLevelinFIFOmode.)1=Level(InterruptisrequestedwhileRxbufferisreceivingdatainNon-FIFOmodeorreachesRxFIFOTriggerLevelinFIFOmode.)
0
RxTimeOutEnable
[7]
Enable/DisableRxtimeoutinterruptwhenUARTFIFOisenabled.Theinterruptisareceiveinterrupt.0=Disable1=Enable
0
RxErrorStatusInterruptEnable
[6]
EnabletheUARTtogenerateaninterruptuponanexception,suchasabreak,frameerror,parityerror,oroverrunerrorduringareceiveoperation.0=Donotgeneratereceiveerrorstatusinterrupt.1=Generatereceiveerrorstatusinterrupt.
0
LoopbackMode
[5]
Settingloopbackbitto1causestheUARTtoentertheloopbackmode.Thismodeisprovidedfortestpurposesonly.0=Normaloperation1=Loopbackmode
0
SendBreakSignal
[4]
SettingthisbitcausestheUARTtosendabreakduring1frametime.Thisbitisautomaticallyclearedaftersendingthebreaksignal.0=Normaltransmit1=Sendbreaksignal
0
TransmitMode
[3:
2]
DeterminewhichfunctioniscurrentlyabletowriteTxdatatotheUARTtransmitbufferregister.
00=Disable
01=Interruptrequestorpollingmode10=DMA0request(OnlyforUART0),
DMA3request(OnlyforUART2)11=DMA1request(OnlyforUART1)
00
ReceiveMode
[1:
0]
DeterminewhichfunctioniscurrentlyabletoreaddatafromUARTreceivebufferregister.
00=Disable
01=Interruptrequestorpollingmode10=DMA0request(OnlyforUART0),
DMA3request(OnlyforUART2)11=DMA1request(OnlyforUART1)
00
(3)UART错误状态寄存器包括UERSTAT0,UERSTAT1andUERSTAT2,此状态寄存器的相关位表明是否有帧错误或溢出错误发生。
如表3-5,3-6所示
表3-5UART错误状态寄存器设置
Register
Address
R/W
Description
ResetValue
UERSTAT0
0x50000014
R
UARTchannel0Rxerrorstatusregister
0x0
UERSTAT1
0x50004014
R
UARTchannel1Rxerrorstatusregister
0x0
UERSTAT2
0x50008014
R
UARTchannel2Rxerrorstatusregister
0x0
表3-6UART错误状态寄存器位描述
UERSTATn
Bit
Description
InitialState
Reserved
[3]
0=Noframeerrorduringreceive1=Frameerror(Interruptisrequested.)
0
FrameError
[2]
Setto1automaticallywheneveraframeerroroccursduringreceiveoperation.0=Noframeerrorduringreceive1=Frameerror(Interruptisrequested.)
0
Reserved
[1]
0=Noframeerrorduringreceive1=Frameerror(Interruptisrequested.)
0
OverrunError
[0]
Setto1automaticallywheneveranoverrunerroroccursduringreceiveoperation.0=Nooverrunerrorduringreceive1=Overrunerror(Interruptisrequested.)
0
注意:
在读取UART错误状态寄存器时,这些位(UERSATn[3:
0])会自动清零。
()在UART模块中有三个接收/发送状态寄存器,包括UTRSTAT0,UTRSTAT1和UTRSTAT2。
如表3-7,3-8所示:
表3-7UART接收/发送寄存器设置
Register
Address
R/W
Description
ResetValue
UTRSTAT0
0x50000010
R
UARTchannel0Tx/Rxstatusregister
0x6
UTRSTAT1
0x50004010
R
UARTchannel1Tx/Rxstatusregister
0x6
UTRSTAT2
0x50008010
R
UARTchannel2Tx/Rxstatusregister
0x6
表3-8UART接收/发送寄存器位描述
UTRSTATn
Bit
Description
InitialState
Transmitterempty
[2]
Setto1automaticallywhenthetransmitbufferregisterhasnovaliddatatotransmitandthetransmitshiftregisterisempty.0=Notempty1=Transmitter(transmitbuffer&shifterregister)empty
1
Transmitbufferempty
[1]
Setto1automaticallywhentransmitbufferregisterisempty.0=Thebufferregisterisnotempty1=Empty(InNon-FIFOmode,InterruptorDMAisrequested.InFIFOmode,InterruptorDMAisrequested,whenTxFIFOTriggerLevelissetto00(Empty))IftheUARTusestheFIFO,usersshouldcheckTxFIFOCountbitsandTxFIFOFullbitintheUFSTATregisterinsteadofthisbit.
1
Receivebufferdataready
[0]
Setto1automaticallywheneverreceivebufferregistercontainsvaliddata,receivedovertheRXDnport.0=Empty1=Thebuffer