ARM串口实验报告.docx

上传人:b****0 文档编号:17940855 上传时间:2023-08-05 格式:DOCX 页数:15 大小:93.94KB
下载 相关 举报
ARM串口实验报告.docx_第1页
第1页 / 共15页
ARM串口实验报告.docx_第2页
第2页 / 共15页
ARM串口实验报告.docx_第3页
第3页 / 共15页
ARM串口实验报告.docx_第4页
第4页 / 共15页
ARM串口实验报告.docx_第5页
第5页 / 共15页
ARM串口实验报告.docx_第6页
第6页 / 共15页
ARM串口实验报告.docx_第7页
第7页 / 共15页
ARM串口实验报告.docx_第8页
第8页 / 共15页
ARM串口实验报告.docx_第9页
第9页 / 共15页
ARM串口实验报告.docx_第10页
第10页 / 共15页
ARM串口实验报告.docx_第11页
第11页 / 共15页
ARM串口实验报告.docx_第12页
第12页 / 共15页
ARM串口实验报告.docx_第13页
第13页 / 共15页
ARM串口实验报告.docx_第14页
第14页 / 共15页
ARM串口实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM串口实验报告.docx

《ARM串口实验报告.docx》由会员分享,可在线阅读,更多相关《ARM串口实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

ARM串口实验报告.docx

ARM串口实验报告

《APM串口实验》

实验报告

课程名称:

嵌入式微处理器技术

班级:

电信0901

姓名:

地点:

嵌入式系统基础实训室

******

ARM的串行口实验

一、实验目的

◆1.掌握ARM的串行口工作原理。

◆2.学习编程实现ARM的UART通讯。

◆3.掌握CPU利用串口通讯的方法。

二、实验内容

学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。

编程实现ARM和计算机实现串行通讯:

ARM监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在超级终端上显示。

三、预备知识

1、1.用ARMSDT2.5或ADS1.2集成开发环境,编写和调试程序的基本过程。

2、2.ARM应用程序的框架结构。

3、3.了解串行总线

四、实验设备及工具

硬件:

ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上、串口线。

软件:

PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。

五、实验原理及说明

1.异步串行I/O

异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步,字符和字符间还可能有长度不定的空闲时间,因此效率较低。

图2-1串行通信字符格式

图2-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,119200等。

接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:

1)奇偶错:

在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。

2)帧格式错:

一个字符从起始位到停止位的总位数不对。

3)溢出错:

若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。

每一种错误都会给出相应的出错信息,提示用户处理。

2.串行接口的物理层标准

通用的串行I/O接口有许多种,现仅就最常见的两种标准作简单介绍。

1)EIARS—232C这是美国电子工业协会推荐的一种标准(ElectronicindustriesAssociation

Recoil-mendedStandard。

它在一种25针接插件(DB—25上定义了串行通信的有关信号。

这个标准后来被世界各国所接受并使用到计算机的I/O接口中。

⑴信号连线

在实际异步串行通信中,并不要求用全部的RS—232C信号,许多PC/XT兼容机仅用15针接插件(DB—15来引出其异步串行I/O信号,而PC中更是大量采用9针接插件(DB—9来担当此任,因此这里也不打算就RS—232C的全部信号作详细解释。

图2-2给出两台微机利用RS—232C接口通信的联线(无MODEM,我们按DB—25的引脚号标注各个信号。

下面对图2-2中几个主要信号作简要说明。

保护地:

通信线两端所接设备的金属外壳通过此线相联。

当通信电缆使用屏蔽线时,常利用其外皮金属屏蔽网来实现。

由于各设备往往已通过电源线接通保护地,因此,通信线中不必重复接此地线(图中用虚线表示。

例如使用9针插头(DB—9的异步串行I/O接口就没有引出保护地信号。

TXD/RXD:

是一对数据线,TXD称发送数据输出,RXD称接收数据输入。

当两台微机以全双工方式直接通信(无MODEM方式时,双方的这两根线应交叉联接(扭接。

信号地:

所有的信号都要通过信号地线构成耦合回路。

通信线有以上三条(TXD、RXD和信号地就能工作了。

其余信号主要用于双方设备通信过程中的联络(握手信号,而且有些信号仅用于和MODEM的联络。

若采取微型机对微型机直接通信,且双方可直接对异步串行通信电路芯片编程,若设置成不要任何联络信号,则其它线都可不接。

有时在通信线的同一端将相关信号短接以“自握手”方式满足联络要求。

这就是如图2-2(a所示的情况。

图2-2实用RS-232C连线

RTS/CTS:

请求发送值号RTS是发送器输出的准备好信号。

接收方准备好后送回清除发送信号CTS后,发送数据开始进行,在同一端将这两个信号短接就意味着只要发送器准备好即可发送。

DCD:

载波检测(又称接收线路信号检测。

本意是MODEM检测到线路中的载波信号后,通知终端准备接收数据的信号,在没有接MODEM的情况下,也可以和RTS、CTS短接。

相对于MODEM而言,微型机和终端机一样被称为数据终端DTE(DataTerminalEquipment而MODEM被称为数据通信装置DCE(DataCommunicationsEquipment,DTE和DCE之间的连接不能像图2-2中有“扭接”现象,而应该是按接插件芯号,同名端对应相接。

此处介绍的RS—232C的信号名称及信号流向都是对DTE而言的。

DTR/DSR:

数据终端准备好时发DTR信号,在收到数据通信装置装备好DSR信号后,方可通信。

图2-2(a中将这一对信号以“自握手”方式短接。

R1:

原意是在MODEM接收到电话交换机有效的拨号时,使RI有效,通知数据终端准备传送。

在无MODEM时也可和DTR相接。

图2-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电流之间的转换。

图2-3是PC/XT微机中使用的一种20mA电流环接口。

当发送方SOUT=1时,便有20mA电流灌入接收方的光耦合器,于是光耦合器导通,使SIN=1。

反之当发送方SOUT=0时环路电流为零,接收方光耦合器截止,SIN=0。

显然,当要求双工方式通信时,双方都应各有收发电路,通信联线至少要4根。

由于通信双方利用光耦合器实现电气上隔离,而且信号又是双端回路方式,故有很强的抗干扰性,可以传送远至1千米的距离。

图2-320mA电流环接口

“0”、“1”信号的表示方法不同外,其他方面(如字符的传输格式常借用RS—232C标准。

因此PC/XT微机中的异步串行信道接口往往将这两种标准做在一起,实际通过跨接线从二者中择一使用。

3.ARM自带的串行口寄存器

ARM自带两个串行口,各带有16字节的FIFO(先入先出寄存器),最大波特率115.2K。

每个UART有7种状态:

溢出错误、校验错误、帧错误、暂停态、接收缓冲区准备好、发送缓冲区空、发送移位缓冲器空,这些状态可以由相应的UTRSTATn/UERSTATn表示,并且与发送接收缓冲区相对应的有错误缓冲区。

波特率的可以通过控制波特率寄存器(UBRDIVn)控制,

与UART有关的寄存器主要有以下几个:

(1)UART线性控制寄存器ULCONn,其地址和各位的意义参见表2-1:

表2-1ULCONn功能定义

ULCONn

描述

初始化状态

保留

[7]

0

红外模式

[6]

红外模式位决定是否使用红外模式:

0—正常模式;1—红外模式

0

奇偶校验模式

[5:

3]

奇偶校验模式指定当UART执行发送和接收操作时如何进行奇偶校验的产生和检查:

0xx—无奇偶校验;100—奇校验;110=奇偶校验强制为1;111=奇偶校验强制为0

000

停止位个数

[2]

每帧停止位的个数:

0—1位;1—两位。

0

数据位长度

[1:

0]

字长位决定每帧发送或接收的数据位数:

00—5位;01—6位;10—7位;11—8位;

00

由上表可以看出,该寄存器的第6位决定是否使用红外摸式,位5~3决定校验方式,位2决定停止位长度,位1和0决定每帧的数据位数。

参考:

普通模式,无奇偶校验,1位停止位,8为数据长度。

(2)UART控制寄存器UCONn,该寄存器决定UART的各种摸式。

UARTFIFO控制寄存器UFCONn,UARTMODEM控制寄存器,分别决定UARTFIFO和MODEM的模式。

其中UFCONn的第0位决定是否启用FIFO,UMCONn的第0位是请求发送位,对我们来说是比较重要的。

控制寄存器UCONn的功能定义如表2-2所示。

表2-2UCONn功能定义

UCONn

描述

初始化状态

发送中断类型

[9]

中断请求类型0=Pulse(在发放缓冲区变空时立即引发中断1=Level(在发送缓冲区为空进引发中断

0

接收中断类型

[8]

中断请示类型0=Pulse(接收缓冲区接收到数据时立即引发中断1=Level(I接收缓冲区正在接收数据时引发中断

0

接收超收中断使能

[7]

在UART的FIFO使能的情况下,使能/禁止接收超时中断0=禁止1=使能

0

接收错误状态中断使能

[6]

在接收操作时有跳变、帧错误、奇偶校验错误和溢出错误时,使能UART产生中断0=不产生接收错误状态中断1=产生接收错误状态中断t

0

回送模式

[5]

设置回送位为1,使得UART进入回送模式。

这个模式只是为了检测。

0=标准操作1=回送模式。

0

发送中止信号

[4]

设置这个位使得UART在1帧的时间里发送一个终止信号。

在发送完终止信号后该位自动清零。

0=标准传输1=发送终止信号。

0

传输模式

[3:

2]

这两个位决定了目前哪个操作过程可以将Tx数据写入到UART传输保持寄存器。

00=不可以01=中断请求或查询模式10=BDMAO请求(只对于UART0)11=BDMA1请求(只对于UART1)。

00

接收模式

[1:

0]

这两个位决定了目前哪个操作过程可以从UART接收缓冲寄存器读取数据。

00=不可以01=中断请求或查询模式10=BDMAO要求11=BDMA1请求。

00

参考:

Tx电平触发,Rx边沿触发,禁止接收超时中断,允许接收错误中断,发送和接受模式均为01。

(3)读写状态寄存器UTRSTAT以及错误状态寄存UERSTAT,可以反映芯片目前的读写状态以及错误类型。

FIFO状态寄存器UFSTAT和MODEM状态寄存器UMSTAT,通过前者可以读出目前FIFO是否满以及其中的字节数;通过后者可以读出目前MODEM的CTS状态。

UTRSTATn和UERSTATn的功能定义分别如表2-3、2-4所示。

表2-3UTRSTATn功能定义

UTRSTATn

描述

初始化状态

传输移位器空

[2]

当传输移位寄存器无有效数据去传输时,该位自动设为1,传输移位寄存器为空。

0=非空1=传输保持和移位寄存器空。

1

传输缓冲器空

[1]

当传输FIFO/缓冲寄存器无有效值数据,该位自动设置为1.0=缓冲寄存器非空1=空。

如果UART使用FIFO,使用者不用看这位,只需检查UFSTAT寄存器的TxFIFO计数位和TxFIFO所有位

1

接收缓冲数据准备

[0]

无论何时,当接收缓冲寄存器在RXDn端口接收到有效值时,该位自动置为1。

0=全空1=缓冲寄存器收到数据。

1字节FIFO16字节/缓冲寄存器接收到数据。

如果UART使用FIFO,使用者不需看这位,只要检查UFSTAT寄存器的RxFIFO计数位。

0

表2-4UERSTATn功能定义

UERSTATn

描述

初始化状态

中止检测

[3]

该位自动设置为1表明接收到中止信号。

0=没有收到中止1=收到中止

0

帧错误

[2]

无论何时,在接收操作中发生帧错误时,该位自动设置为1.0=在接收中无帧错误1=帧错误

0

奇偶错误

[1]

无论何时,当接收操作中有奇偶发生时,该位自动设置为1.0=在接收中无奇偶错误发生1=奇偶错误

0

溢出错误

[0]

无论何时,当接收操作中发生溢出错时,该位自动设置为1.0=接收中无溢出错发生1=溢出错。

0

(4)发送寄存器UTXH和接收寄存器URXH,这两个寄存器存放着发送和接收的数据,当然只有一个字节8位数据。

需要注意的是在发生溢出错误的时候,接收的数据必须要被读出来,否则会引发下次溢出错误。

(5)最后是波特率引子寄存器UBRDIV。

该寄存器为十六位,算法参见上页的部分。

计算公式如下:

UBRDIVn=(round_off(MCLK/(bps×16-1

其中MCLK是系统频率,例如在40MHz的情况下,当波特率取115200时,

UBRDIVn=(int(40000000/(115200×16+0.5-1

=(int(21.7+0.5-1

=22-1=21

注意:

由于ARM工作时存在小端和大端两种工作模式,所以同样一个寄存器在不同模式时地址也不一样,需要加以区别。

六、实验步骤

1.新建工程,将“Exp2ARM串口实验”中的文件添加到工程中,这些是启动时所需要

的文件。

2.定义与UART有关的各个寄存器地址和一些特殊的位命令。

主要有以下各寄存器(44b.h):

/*UART的全部功能寄存器*/

#definerULCON0(*(volatileunsigned*0x1d00000

#definerULCON1(*(volatileunsigned*0x1d04000

#definerUCON0(*(volatileunsigned*0x1d00004

#definerUCON1(*(volatileunsigned*0x1d04004

#definerUFCON0(*(volatileunsigned*0x1d00008

#definerUFCON1(*(volatileunsigned*0x1d04008

#definerUMCON0(*(volatileunsigned*0x1d0000c

#definerUMCON1(*(volatileunsigned*0x1d0400c

#definerUTRSTAT0(*(volatileunsigned*0x1d00010

#definerUTRSTAT1(*(volatileunsigned*0x1d04010

#definerUERSTAT0(*(volatileunsigned*0x1d00014

#definerUERSTAT1(*(volatileunsigned*0x1d04014

#definerUFSTAT0(*(volatileunsigned*0x1d00018

#definerUFSTAT1(*(volatileunsigned*0x1d04018

#definerUMSTAT0(*(volatileunsigned*0x1d0001c

#definerUMSTAT1(*(volatileunsigned*0x1d0401c

#definerUBRDIV0(*(volatileunsigned*0x1d00028

#definerUBRDIV1(*(volatileunsigned*0x1d04028

#ifdef__BIG_ENDIAN//大端摸式

#definerUTXH0(*(volatileunsignedchar*0x1d00023

#definerUTXH1(*(volatileunsignedchar*0x1d04023

#definerURXH0(*(volatileunsignedchar*0x1d00027

#definerURXH1(*(volatileunsignedchar*0x1d04027

#defineWrUTXH0(ch(*(volatileunsignedchar*(0x1d00023=(unsignedchar(ch

#defineWrUTXH1(ch(*(volatileunsignedchar*(0x1d04023=(unsignedchar(ch

#defineRdURXH0((*(volatileunsignedchar*(0x1d00027

#defineRdURXH1((*(volatileunsignedchar*(0x1d04027

#defineUTXH0(0x1d00020+3//byte_accessaddressbyBDMA

#defineUTXH1(0x1d04020+3

#defineURXH0(0x1d00024+3

#defineURXH1(0x1d04024+3

#else//小端摸式

#definerUTXH0(*(volatileunsignedchar*0x1d00020

#definerUTXH1(*(volatileunsignedchar*0x1d04020

#definerURXH0(*(volatileunsignedchar*0x1d00024

#definerURXH1(*(volatileunsignedchar*0x1d04024

#defineWrUTXH0(ch(*(volatileunsignedchar*0x1d00020=(unsignedchar(ch

#defineWrUTXH1(ch(*(volatileunsignedchar*0x1d04020=(unsignedchar(ch

#defineRdURXH0((*(volatileunsignedchar*0x1d00024

#defineRdURXH1((*(volatileunsignedchar*0x1d04024

#defineUTXH0(0x1d00020//byte_accessaddressbyBDMA

#defineUTXH1(0x1d04020

#defineURXH0(0x1d00024

#defineURXH1(0x1d04024

#endif

3.编写串口驱动函数(MyUart.c):

图2-4为串口初始化的实现流程。

图2-4串口初始化

4.在主函数中实现将从串口0接收到的数据发送到串口0(Main.c):

图2-7为主函数流程图。

图2-7主函数流程图

七、思考题

1.RS-232串行通讯的数据格式是什么?

答:

2.串行通讯最少需要几根线,分别如何连接?

答:

连接只需要使用三根线即可,即RXD(接收数据),TXD(发送数据)和GND(地线),连接方式见下图:

3.ARM的串行口有几个,相应的寄存器是什么?

答:

ARM自带两个串行口,各带有16字节的FIFO(先入先出寄存器)、UART线性控制寄存器ULCONn、读写状态寄存器UTRSTAT以及错误状态寄存UERSTAT、发送寄存器UTXH和接收寄存器URXH、波特率引子寄存器UBRDIV

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2