串口通信实验

上传人:小** 文档编号:113705929 上传时间:2022-06-26 格式:DOC 页数:29 大小:442.50KB
返回 下载 相关 举报
串口通信实验_第1页
第1页 / 共29页
串口通信实验_第2页
第2页 / 共29页
串口通信实验_第3页
第3页 / 共29页
点击查看更多>>
资源描述
串口通信实验、实验目的1. 掌握ARM的串行口工作原理。2. 学习编程实现ARM的UART通讯。3掌握CPU利用串口通讯的方法。二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。三、实验原理介绍通信方式在通信过程中,如果通信仅在点对点之间进行,或者点对多点之间进行,那么,按消息传输的方向和时间的不同,可以将通信分为单工通信、全双工通信以及半双工通信。(1)单工消息只能单方向进行传输的一种通信方式称为单工通信。如图8-1所示,通信只能从A传输到B。这好比一条绝对方向的单行道路,不准双向通信也不能逆向行驶。在现代通信系统中,如模拟广播电视系统(不包括现正在研究应用的HFC双向网络)、无线寻呼系统等。信号只能从广播电视台、无线寻呼中心发送到电视机接收机、BB机上。A”信道AB图8-1单工通信方式(2)全双工全双工通信是指通信双方可以同时进行双向数据传输而互不影响的工作方式。如图8-2所示,在这种工作方式下,通信双方都可以同时进行信息的发送和接收,因此,全双工通信的信道必须是双向信道。如果是有线的全双工方式,通信双方会有两根独立的信号线分别传输发送信号和接收信号,从而使得发送和接收可同时进行。生活中的普通电话系统、移动通信系统都是全双工方式。A信道字符后面要加一个终止符号,其长度为1-2个码元,极性为“1”,即传号极性。B图8-2双工通信方式(3)半双工这种方式允许数据传输做双向操作,即不仅可以发送,亦可以接收信号,但是,在同一时刻,只能进行发送和接收任意一个操作。因此仍然只采用一个信道。如图8-3所示,如果是有线通信,通信双方只需要一根数据线连接,但是比全双工方式耗时会更多。如对讲机系统就是采用的半双工通信方式。图8-3半双通信方式串行同步通信与串行异步方式在通信过程中,发送方和接收方每次都只发送和接收一位数据的通信方式称为串行通信方式。也就是说,在任意一个时刻,数据线上仅有一位数据。在传输数据过程中,双方需要协商时钟信号,即规定什么时候发送数据和接收数据,以及每位数据所占用的时间宽度。根据双方接收和发送数据所采用的时钟信号是否是同一个时钟源而分为串行异步通信方式和串行同步通信方式。串行异步通信方式中,通信双方采用自己的时钟信号,根据信号的起始位等判断信息,因此接收和发送仅需要两根信号线分别用来传送和接收信号。而串行同步通信方式中,由通信双方的一方(或者另外设备)提供统一的时钟信号,在一定程序上提高通信速率,但这种通信方式需要额外的时钟信号线。另外,这种通信方式不适合远距离传输,因为远距离会使时钟信号受到干扰,出现误码等现象。1)串行异步通信方式在异步传输模式下,传输数据以字符为单位,数据传输速率多在1.2kb/s以下。当发送一个字符代码时: 字符前面要加一个起始信号,其长度为一个码元,极性为“0”,即空号极性。加上起始终止信号后,即可区分出所传输的字符,传送时,字符可以连续发送,也可以单独发送,不发字符时线路保持“1”状态,如图8-4所示为起止式同步传输序列,每个字符由8bit组成,加上起止位,信号共11位,两字符之间的间隔长度可以不固定。实现起来比较简单。123456784字符起12345678V字止起止图8-4异步传输模式帧格式异步串行通信协议规定字符数据的传输规范总结起来有以下几点:起始位:通信线上没有数据被传送时处于逻辑“1”状态,当发送设备要发送一个字符数据时,首选发送一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收机,接收设备检测到这低电平后,就开始准备接收数据位信号。起始位所起的作用就是使设备同步,通信双方必需在传送数据位前一致同步。数据位:当接收设备收到起始位后,开始接收数据位。数据位的个数可以是5-9位,PC机中经常采用7-8位数据传送。在字符传送过程中,数据位从最低有效位开始传送,依次在接收设备中被转换为并行数据。奇偶校验位:数据位发送完后,为了保证数据的可靠性传输,常传送奇偶校验位。奇偶校验用于有限差错检测。如果选择偶校验,则数据位和奇偶位的逻辑“1”的个数必须为偶数,相反,如果是奇校验,逻辑“1”的个数为奇数。停止位:在奇偶位或者数据位(当无奇偶校验时)之后发送停止位。停止位是一个字符数据的结束,可以是1-2位的低电平,接收设备收到停止位后,通信线路便恢复逻辑“1”状态,直到下一个字符数据的起始位到来。波特率设置:通信线路上传送的所有位信号都保持一致的信号持续时间,每一位的宽度都由数据的码元传送速率确定,而码元速率是单位时间内传送的码元的个数,即波特率。2)串行同步通信方式在同步通信中,通信双方使用同一个时钟源,这个时钟信号可以由通信方式的一方提供或者由第三方提供。其时序图如图8-5所示,所有要传输的数据都需要与此时钟信号同步,即每个传输的数据所占用的时间宽度都需要与一个时钟变换所用时间相等。即数据在时钟跳变(上升沿和下降沿)后一段时间内有效。相应的,接收方根据时钟跳变来确定何时接收一位数据。同步传输使用不同的方式来表示一次传输的开始和结束。CLKDATA011011图8-5串行同步通信方式S3C2410芯片UART基于ARM9内核架构的嵌入式处理器的S3C2410的UART(UniversalAsynchronousReceiverandTransmitter)单元拥有3个SIO(saynchronousserialI/O),每个单元都可以工作在中断模式以及DMA(DirectMemoryAccess)模式。UART最大速率可以达到230.4kbps。如果外部设备提供一个时钟信号,其可以工作在更新的通信速率。每个UART通道都包含两个16bit的FIFO来接收和发送数据。S3C2410处理器的UART支持可编程波特率、IR(infra-red)传输,12位停止位,58位数据宽度,同时支持奇偶校验。S3C2410芯片UART结构图如图8-11所示为S3C2410芯片UART结构图。图8-11S3C2410芯片UART结构图数据发送S3C2410芯片UART支持可编程数据传输帧格式。在数据帧中包含起止位、58位数据位、一位奇偶校验位以及12位停止位。具体设置可以在控制寄存器(ULCONn)设置。同时,传输装置支持中断方式,即在传输的时候强制输出逻辑0中断信号。此中断信号在完成一个字符传输后传输,之后传输器继续传输数据至TxFIFO。数据接收同理,接收器亦支持可编程方式,同样包含起止位、58位数据位、一位奇偶校验位以及12位停止位,具体设置可以在控制寄存器(ULCONn)设置。接收器亦可以探测到数据溢出错误、奇偶校验错误、帧错误以及中断信号,并且每种情况都可置相应的错误标识。数据溢出错误:在上一字符没有接收完成时新的数据已经到达,从而覆盖了原来的数据。奇偶校验错误:奇偶位不满足奇偶条件。帧错误:接收数据没有有效的停止位。中断信号:RxDn输出持续逻辑0信号(持续时间超过一帧)。功能寄存器(1) 列控制寄存器S3C2410的UART单元包含三个列控制寄存器,分别是ULCON0,ULCON1和ULCON2。其说明如表8-6所示。表8-6列控制寄存器寄存器地址读/写说明复位值ULCONO0x50000000可读/写UART0列控制寄存器0x00ULCON10x50004000可读/写UART1列控制寄存器0x00ULCON20x50008000可读/写UART2列控制寄存器0x00ULCONn各位功能描述如表8-7所示。表8-7ULCONn各位功能描述ULCONn位说明初始化状态保留位70红外模式6设置是否采用红外模式。0=普通模式,1=红外模式0奇偶校验模式5:3设置在奇何偶校验模式方式:0XX:=无;100=奇校验;101=偶校验;110=强制为1;111=强制为0。000停止位2设置每帧停止位位数:0=1位停止位;1=两位停止位。0字长度1:0设置每帧数据位长度:00=5位、01=6位、10=7位、11=8位。0(2)控制寄存器S3C2410的UART单元包含三个控制寄存器,分别是UCONO,UCON1和UCON2。其说明如表8-8所示。表8-8控制寄存器寄存器地址读/写说明复位值UCON00x50000004可读/写UART0控制寄存器0x00UCON10x50004004可读/写UART1控制寄存器0x00UCON20x50008004可读/写UART2控制寄存器0x00表8-9UCONn各位功能描述UCONn位说明初始化状态时钟选择10选择时钟来源。0=PCLK,1=UCLK。0Tx中断类型9中断请求类型。0=Pulse。1=Level。0Rx中断类型8中断请求类型。0=Pulse。1=Levelo0Rx超时7禁止/允许接收超时终端。0=禁止;1=允许。0接收错误状态中断允许6当产生异常时使能UART产生中断中断。如帧错误、奇偶校验错误、溢出错误。0=不产生,1=产生。0回环模式5设置是否进入回环模式。0=普通模式;1=回环模式。0发送中断信号4设置UART产生中断信号。如果发出一个中断后,此位将自动清0o0=普通传输,1=发送中断信号。0传输模式3:2决定当前UART采用何种传输模式。00=禁止;01=中断或者轮流模式;10=DMA0请求(UART0),DMA3请求(UART2);11=DMA1请求(UART0)。00接收模式1:0决定当前UART采用何种接收模式。00=禁止;01=中断或者轮流模式;10=DMA0请求(UART0),DMA3请求(UART2);11=DMA1请求(UART0)。00(3)FIFO控制寄存器S3C2410的UART单元包含三个FIFO控制寄存器,分别是UFCONO,UFCON1和UFCON2。其说明如表8-10所示。表8-10FIFO控制寄存器寄存器地址读/写说明复位值UFCON00x50000008可读/写UART0FIFO控制寄存器0x00UFCON10x50004008可读/写UART1FIFO控制寄存器0x00UFCON20x50008008可读/写UART2FIFO控制寄存器0x00ULCONn各位功能描述如表8-11所示。表8-11UFCONn各位功能描述UFCONn位说明初始化状态TxFIFO触发方式7:6决定传输FIFO信号标准。00=空,01=4-byte,10=8-byte,11=12-byte。00RxFIFO触发方式5:4决定接收FIFO信号标准。00=4-byte,01=8-byte,10=12-byte,11=16-byte。00保留30TxFIFO复位2自动清零。0=一般模式1=TxFIFO复位。0RxFIFO复位1自动清零。0=一般模式1=TxFIFO复位。0FIFO使能00=禁止,1=使能。0(4) MODEM控制寄存器S3C2410的UART单元包含三个MODEM控制寄存器,分别是UMCONO,UMCON1和UMCON2。其说明如表8-12所示。表8-12MODEM控制寄存器寄存器地址读/写说明复位值UMCON00x5000000C可读/写UART0MODEM控制寄存器0x00UMCON10x5000400C可读/写UART1MODEM控制寄存器0x00保留0x5000800C-保留-ULCONn各位功能描述如表8-13所示。表8-13MODEM各位功能描述MODEMn位说明初始化状态保留7:5这些位必须为000AFC41=使能,0=禁止0保留3:1这些位必须为0000请求发送0如果使能AFC,此位将被忽略。S3C2410将自动控制nRTS信号。如果禁止AFC。nRTS必须由软件控制。0=咼电平,1=低电平。0(5) Tx/Rx状态寄存器S3C2410的UART单元包含三个Tx/Rx状态寄存器,分别是UTRSTAT0,UTRSTAT1和UTRSTAT2。其说明如表8-14所示。表8-14MODEM控制寄存器寄存器地址读/写说明复位值UTRSTATO0x50000010可读UART0Tx/Rx状态寄存器0x6UTRSTAT10x50004010可读UART1Tx/Rx状态寄存器0x6UTRSTAT20x50008010可读UART2Tx/Rx状态寄存器0x6UTRSTATn各位功能描述如表8-15所示。表8-15UTRSTATn各位功能描述UTRSTATn位说明初始化状态传输装置空2当传输buffer寄存器没有可用数据传输或者传输移位寄存器为空时自动设置为1。0=非空;1=空。1传输Buffer空1当传输寄存器为空时自动设置为1。0=非空,1=空。1接收Buffer数据准备好0当接收buffer寄存器有有效数据通过RxDn端口接收数据。0=空,1=有接收数据。0(6) 错误状态寄存器S3C2410的UART单元包含三个错误状态寄存器,分别是UERSTAT0,UERSTAT1和UERSTAT2。其说明如表8-16所示。表8-16错误状态寄存器寄存器地址读/写说明复位值UERSTAT00x50000014可读UART0错误状态寄存器0x0UERSTAT10x50004014可读UART1错误状态寄存器0x0UERSTAT20x50008014可读UART2错误状态寄存器0x0表8-17UERSTATn各位功能描述UERSTATn位说明初始化状态保留30=接收时无帧错误;1=帧错误。0帧错误2在接收操作时无论何时出现错误将自动置1。0=无帧错误。1=帧错误。0保留10=无帧错误。1=帧错误。0溢出错误0无论何时发生溢出错误将置此位为1。0=无错误。1=溢出错误。0(7) FIFO状态寄存器S3C2410的UART单元包含三个FIFO状态寄存器,分别是UFSTATO,UFSTAT1和UFSTAT2。其说明如表8-18所示。表8-18FIFO状态寄存器寄存器地址读/写说明复位值UFSTAT00x50000018可读UART0FIFO状态寄存器0x00UFSTAT10x50004018可读UART1FIFO状态寄存器0x00UFSTAT20x50008018可读UART2FIFO状态寄存器0x00UFSTATn各位功能描述如表8-19所示。表8-19UFSTATn各位功能描述UFSTATn位说明初始化状态保留15:100=接收时无帧错误;1=帧错误。0TxFIFO满9如果传送FIFO满将自动设置此位为1。0=0位=丁乂FIFO数据=15位;1=FULL。0RxFIFO满8如果接收FIFO满将自动设置此位为1。0=0位=丁乂FIFO数据=15位;1=FULL。0TxFIFO计数器7:4TxFIFO数据个数。0RxFIFO计数器3:0RxFIFO数据个数。0(8) MODEM状态寄存器S3C2410的UART单元包含三个MODEM状态寄存器,分别是UMSTAT0,UMSTAT1和UMSTAT2。其说明如表8-20所示。表8-18MODEM状态寄存器寄存器地址读/写说明复位值UMSTAT00x5000001C可读UARTOFIFO状态寄存器0x00UMSTAT10x5000401C可读UART1FIFO状态寄存器0x00保留Ox5OOO8O1C保留-UMSTATn各位功能描述如表8-20所示。表8-20UMSTATn各位功能描述UMSTATn位说明初始化状态保留30DeltaCTS2指示nCTS值相对于上次CPU读取输入状态发生了改变。0=没有发生变化,1=变化。0保留10发送清除00=CTS信号没有激活(高电平);1=CTS激活(低电平)。09)传输缓冲寄存器S3C2410的UART单元包含三个传输缓冲寄存器,分别是UTXH0,UTXH1和UTXH2。其说明如表8-21所示。表8-21传输缓冲寄存器口吝存寄明说值位复A7A7l咒BXXZ/V写字可节A7A7l咒BXXZ/V写字可节n可写UART2传输缓冲寄存器(字节)UTXH20x50008020(L)0x50008023(B)(10)接收缓冲寄存器S3C2410的UART单元包含三个接收缓冲寄存器,分别是URXHO,URXH1和URXH2。其说明如表8-22所示。表8-22接收缓冲寄存器口吝存寄明说值位复uO)M)l咒BXXZ/V写字可节)M)l咒BXXZ/V写字可节U2写字可节n11)波特率约数寄存器S3C2410的UART单元包含三个波特率约数寄存器,分别是UBRDIVO,UBRDIV1和UBRDIV2。其说明如表8-232所示。表8-23波特率约数寄存器寄存器地址读/写说明复位值UBRDIV00x50000028可读/写UART0波特率约数寄存器UBRDIV10x50004028可读/写UART1波特率约数寄存器UBRDIV20x50008028可读/写UART2接波特率约数寄存器S3C2410串行接口硬件电路如图8-13所示为S3C2410芯片UART采用MAX3232进行电平转换,从而输出RS232C标准信号的电路图。MAX3232主要实现电平转换功能。两个DB9硬件接口(UART0、UART1)可以直接与计算机以及其它符合RS232C标准的串行接口直接相连。MAX3232左侧的TXD0、RXD0、TXD1、RXD1分别与S3C2410芯片UART0和UART1相连。ciqciqcid4S3OP162RS232RXDO3RS232TXDOOS4O-1O9y|UKTOU102QCI-SI104C102104RS232RXDORS232IXD1RS232RXD18514C1+VDQC1-V+C2+V-C2-GN1DTiOUTR1INT2OITTR2INT!INR1OUTTHINR2OUTMAX32326ifFTZ15J!104Uh,11ITXEXT2-RXEWLO1X019RXD1L6CU03104图8-13S3C2410芯片UART接口电平转换电路四、串行通信实验及c源代码分析本处给出一个无操作系统支持的串行通信测试程序及源码分析及试验步骤,此试验步骤以博创UP-NETARM2410为试验平台,其串行通信接口电路图如图8-11所示,软件开发平台为ADS1.2(ARMDeveloperSuitev1.2)。如果读者选用其它硬件平台,试验步骤可能略有差异。但是,此程序可以不经过任何修改即可直接使用。因为采用无操作系统支持的方式编译此程序,因此,此程序在上传到试验箱时最好能够有bootloader程序加载。当然,读者也可以采用直接烧写的方式加载。根据图8-11所示硬件电路,此硬件连接方式中每一个串口有两根信号线(TXD和RXD)分别用来传输和发送数据。因此,本试验采用串口异步通信方式。与此程序相关的源代码如下所示。(1)与UART相关的寄存器宏定义。 #defineUART_CTL_BASE*/ #defineUART0_CTL_BASE器基地址*/ #defineUART1_CTL_BASE寄存器基地址*/ #defineUART2_CTL_BASE寄存器基地址*/#definebUART(x,Nb)/*Offset*/0x50000000/#defineoUTXHBtransmit(大端模式)buffer*/UART寄存器基地址UART_CTL_BASE/*UART0寄存UART_CTL_BASE+0x4000/*UART1UART_CTL_BASE+0x8000/*UART2REG(UART_CTL_BASE+(x)*0x4000+(Nb) #defineoULCON寄存器*/ #defineoUCON #defineoUFCON寄存器*/ #defineoUMCON制寄存器*/ #defineoUTRSTAT*/ #defineoUERSTAT器*/ #defineoUFSTAT器*/ #defineoUMSTAT器*/ #defineoUTXHLtransmit(小端模式)buffer*/0x00/*R/W,UART线性控制0x04/*R/W,UART控制寄存器*/0x08/*R/W,UARTFIFO控制0x0C/*R/W,UARTmodem控0x10/*R,UARTTx/Rx状态寄存器0x14/*R,UARTRxerror状态寄存0x18/*R,UARTFIFO状态寄存0x1C/*R,UARTModem状态寄存0x20/*W,UART0x23/*W,UART #defineoURXHL端模式)buffer*/ #defineoURXHB端模式)buffer*/#defineoUBRDIV/*Registers*/#defineULCON0#defineUCON0#defineUFCON0#defineUMCON0#defineUTRSTAT0#defineUERSTAT0#defineUFSTAT0#defineUMSTAT0#defineUTXH0#defineURXH0#defineUBRDIV0#defineULCON1#defineUCON1#defineUFCON1#defineUMCON1#defineUTRSTAT1#defineUERSTAT1#defineUFSTAT10x24/*R,UARTreceive(小0x27/*R,UARTreceive(大0x28/*R/W,波特率约数寄存器*/bUART(0,oULCON)bUART(0,oUCON)bUART(0,oUFCON)bUART(0,oUMCON)bUART(0,oUTRSTAT)bUART(0,oUERSTAT)bUART(0,oUFSTAT)bUART(0,oUMSTAT)bUART(0,oUTXHL)bUART(0,oURXHL)bUART(0,oUBRDIV)bUART(1,oULCON)bUART(1,oUCON)bUART(1,oUFCON)bUART(1,oUMCON)bUART(1,oUTRSTAT)bUART(1,oUERSTAT)bUART(1,oUFSTAT)#defineUMSTAT1bUART(1,oUMSTAT)#defineUTXH1bUART(1,oUTXHL)#defineURXH1bUART(1,oURXHL)#defineUBRDIV1bUART(1,oUBRDIV)#defineULC0N2bUART(2,oULCON)#defineUCON2bUART(2,oUCON)#defineUFCON2bUART(2,oUFCON)#defineUMCON2bUART(2,oUMCON)#defineUTRSTAT2bUART(2,oUTRSTAT)#defineUERSTAT2bUART(2,oUERSTAT)#defineUFSTAT2bUART(2,oUFSTAT)#defineUMSTAT2bUART(2,oUMSTAT)#defineUTXH2bUART(2,oUTXHL)#defineURXH2bUART(2,oURXHL)#defineUBRDIV2bUART(2,oUBRDIV)2)发送一个字符#defineWrUTXHO(ch)char)(ch)(*(volatileunsignedchar*)UTXH0)=(unsigned#defineWrUTXHl(ch)char)(ch)(*(volatileunsignedchar*)UTXH1)=(unsigned voidUart_SendByten(intUartnum,U8data)/向uartnum发送数据data /#defineU8unsignedcharif(Uartnum=0)while(!(UTRSTATO&0x4);/UARTOTx/Rx状态寄存器,其第寄存器为空中 Else选用UART1 2位标识传输buffer寄存器/是否为空(0为空),发送数据直到传输bufferhudelay(10);/等待10msWrUTXH0(data);/发送data到传输UTXH0/否则while(!(rUTRSTAT1&0x4);hudelay(10);WrUTXH1(data);(3)接收字符测试程序 charUart_Getchn(char/buffer数据是否准备好。1二有接收数据Revdata,intUartnum,inttimeout) /Revdata为接收的数据,uartnum为串口标识,timeout为超时 if(Uartnum=0) while(!(UTRSTAT0&0x1);/UART0Tx/Rx状态寄存器的第0位标识接收收缓冲寄存器return1;Else收数据/如果从UART1接while(!(rUTRSTAT1&0x1);/Receivedataread*Revdata=RdURXH1();returnTRUE;4)测试主程序intmain(void)charc11;charerr;ARMTargetlnit();最小系统/初始化ARM2410Uart_SendByten(0,0xa);/换行Uart_SendByten(0,0xd);/回车Uart_SendByten(0,t);/输出test字符Uart_SendByten(0,e);Uart_SendByten(0,s);uart_SendByten(0,t);Uart_SendByten(0,!);/此程序一直执行while(1)Uart_SendByten(0,0xa);/换行Uart_SendByten(0,0xd);/回车Uart_SendByten(0,0xa);/换行Uart_SendByten(0,0xd);/回车err=Uart_Getchn(c1,0,0);/接收字符Uart_SendByten(0,c10);/发送字符写一个程序,用一个链表存储接收的多个字符,只有当遇到回车时标识接收数据完成,并输出此段字符数据。写一个程序,用串口1发送数据,用串口2接收数据(相同设置)。写一个程序,用串口1发送数据,用串口2接收数据(不相同设置)。初始化设置(波特率,奇偶校验,数据位)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!