第7章串口通信原理与应用本章内容串口通信原理S5PV210的UART通信概述S5PV210的UART功能寄存器用UART实现发送和接收数据4123教学大纲要求串口通信原理:串口通信的重要参数、串口通信接口和通用异步接收器和发送器。S5PV210的UART功能寄存器,包括控制寄存器和操作寄存器UART通信程序编写和分析。了解理解掌握本章内容串口通信原理S5PV210的UART通信概述S5PV210的UART功能寄存器用UART实现发送和接收数据41237.1串口通信原理7.1.1串口通信的重要参数波特率数据位停止位奇偶校验重要参数1.波特率高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。衡量通信速率的参数,表示每秒传输的位的个数。通信电话线的波特率为14400、28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。例如,300波特率表示每秒发送300个位。2.数据位每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。衡量通信中实际数据位的参数。如何设置取决于想传输的信息。比如,标准的ASCII码是0-127(7位),扩展的ASCII码是0-255(8位)。当计算机发送一个信息包,标准的值是5、6、7和8位。3.停止位用于表示单个包的最后一位。注意2.使用的停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。1.典型的值为1、1.5和2位。4.奇偶校验位例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1。在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值来确保传输的数据有偶数个或者奇数个逻辑高位。有四种检错方式:偶、奇、高和低,当然没有校验位也是可以的。7.1.2串行通信接口RS232美国电子工业协会EIA在1970年指定的一种串行通信接口标准,9芯D插头。RS422采用4根数据线,加一根地线,全双工、差分传输、多点通信的数据传输协议。RS485是在RS-422的基础上,为扩大应用范围,EIA制定了RS-485标准,添加了多点、双向通信能力。7.1.2串行通信接口7.1.2串行通信接口RS-232-CDB-9各引脚定义:CD:载波检测RXD:接收数据线TXD:发送数据线DTR:数据终端就绪SG:信号线DSR:数据设备就绪RTS:请求发送CTS:清除发送RI:振铃提示RS-232-C远距离通信系统本章内容串口通信原理S5PV210的UART通信概述S5PV210的UART功能寄存器用UART实现发送和接收数据41237.1.3通用异步接收器和发送器(UART)UART支持比特率高达3Mbps,每个UART通道包含两个FIFO用来接收和发送数据,其中,UART0支持接收/发送独立的256字节FIFO,UART1支持64B的FIF0,UART2、3、均支持16B的FIFO。S5PV210提供4个基于DMA或中断的操作的独立异步串行I/O端口,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输。UART是一种通用串行数据的总线,用于异步通信,该总线双向通信,可以实现全双工传输和接收。特点7.1.3通用异步接收器和发送器(UART)发送器和接收器包含了FIFO和数据移位器。每个UART包含一个波特率发生器、发送器、接收器和一个控制单元。S5PV210的UART包括可编程波特率,红外发射器/接收器,插入1个或2个停止位,5位、6位、7位或8位的数据宽度以及奇偶校验。特点UART结构图1.数据传输模式回环模式中断或轮询DMA模式(此模式仅用于测试,不用做传输数据)。S5PV210的UART提供了一个参考环回模式测试模式,有助于排除在通信连接中的故障。通过设置UART控制寄存器中的环回位来选择此模式。当有数据到来或数据可发送时产生中断,通知CPU。这种方式要求通信硬件比较高,需要支持产生中断信号。通常实现数据的转移或复制时,CPU将从源地址复制数据到寄存器,然后将寄存器数据再写入到目的地址处,这个操作是由CPU来执行。2.数据发送发送的数据帧是可编程的,包括一个开始位,5-8个数据位,一个可选的奇偶位和1-2个停止位,其可由线性控制寄存器ULCONn来设置。发送器也可以产生一个终止条件,其可以对一个发送时间强制串行输出为逻辑0。在当前发送字被完全传输完以后,该模块发送一个终止信号。在终止信号发送后,其不断发送数据到TxFIFO中。UART数据帧格式3.数据接收溢出错误奇偶校验错误帧错误终止条件是指在旧数据被读取新数据覆盖了旧数据是指接收器侦测到一个不希望的奇偶条件。是指接收到的数据没有一个有效的停止位。是指RxDn输入保持逻辑0状态长于一个帧的传输时间。4.波特率每个UART波特率发生器为发送器和接收器提供串行时钟。存储在波特率除数寄存器和分槽寄存器的值使用来确定串行Tx/Rx时钟速率。DIV_VAL=UBRDIVn+(numof1’sinUDIVSLOTn)/16DIV_VAL=(PCLK/(bps*16))-1DIV_VAL=(SCLK_UART/(BPS*16))-1举例:如果波特率是115200bps且SLCK_UART时钟是40MHz,UBRDIVn和UDIVSLOTn的值为:DIV_VAL=(40000000/(115200*-16))-1=21.7-1UBRDIVn=20(DIV_VAL的整数部分)(UDIVSLOTn中1的数量)/16=0.7则(UDIVSLOTn中1的数量)=11本章内容串口通信原理S5PV210的UART通信概述S5PV210的UART功能寄存器用UART实现发送和接收数据41237.2S5PV210的UART功能寄存器行控制寄存器(ULCONn)控制寄存器(UCONn)FIFO控制寄存器(UFCONn)UART功能寄存器MODEM控制寄存器(UMCONn)接收发送状态寄存器(UTRSTATn)FIFO状态寄存器(UFSTATn)MODEM状态寄存器(UMSTATn)发送缓存寄存器(UTXHn)接收缓存寄存器(URXHn)波特率除数寄存器(UBRDIVn)错误状态寄存器(UERSTARn)分槽寄存器(UDIVSLOTn)初始化用到的寄存器有:ULCONn、UCONn、UFCONn、UMCONn、UBRDIVn、UDIVSLOTn。收到用到的寄存器有:UTRSTATn、UTXHn、URXHn。以下就对这几个寄存器相应的参数进行详细说明。7.2.1UART控制寄存器1.UART行控制寄存器通过设置ULCONn来设置UART的通信方式,是否使用红外,数据帧中奇偶校验类型、停止位的个数、和数据位的位数。S5PV210中有4个UART,所以行控制寄存器也四个分别是ULCON0、ULCON1、ULCON2、ULCON3,如表所示:一般的正常通信模式下,通常设置为无奇偶校验位、1个停止位、8个数据位,则ULCONn设置为0x3。2.UART控制寄存器(UCONn)UCONn控制寄存器当选择有FCLK提供时钟频率时的分频除数、时钟选择、发送接收终端产生类型、发送接收模式等。下表为UCONn的详细设置表。3.FIFO控制寄存器(UFCONn)UFCONnFIFO控制寄存器用来设置是否使能FIFO、发送接收FIFO触发级别、是否自动清空缓冲区。下表为UFCONn寄存器的设置位。4.UARTMODEM控制寄存器(UMCONn)UMCONn寄存器设置时有启用AFC自动流控,通常不使用AFC自动流控,所以通常设置为0,UMCONn寄存器详细位可参看数据手册。5.UART波特率除数寄存器和UART分槽寄存器UBRDIVn寄存器和UDIVSLOTn寄存器用来决定波特率。7.2.2UART操作寄存器1.UART接收发送状态寄存器(UTRSTATn)UTRSTATn寄存器用于记录UART发送和接收的状态,其中包括发送器是否为空、发送缓冲寄存器是否为空。如下表所示:2.UART发送、接收缓冲寄存器UTXHn、URXHn寄存器用于缓冲发送和接收的数据,因为数据存储分为大端模式和小端模式。UTXHn发送缓冲寄存器为只写寄存器、URXHn接收寄存器为只读寄存器。缓冲寄存器位描述初始值TXDATAn[31:8]保留--[7:0]UARTn的发送数据--RXDATAn[31:8]保留0[7:0]UARTn的接收数据0x00本章内容串口通信原理S5PV210的UART通信概述S5PV210的UART功能寄存器用UART实现发送和接收数据41237.3UART通信实例(一)IO程序编程步骤第1步查看电路连接图第2步翻查数据手册第3步确定关键定义第4步编写程序第5步实验程序7.3.1查看电路连接图通常使用的串口是RS-232,在RS-232标准中定义了逻辑1和逻辑0电压级数,以及标准的传输速率和连接器类型。专用芯片SP3232,用于实现RS-232串行数据通信接口和TTL兼容的数字逻辑电路之间的电平转换,提供了两路双向的接收发送驱动器,可以同时对Rx、Tx、CTS和RTS思路信号进行转换。串口的连接通常使用简单连接方式,只连接三根线,即发送、接收和信号地线,需要连接RSTXD0、RSRXD0、GND三根线。由图可知TXD0和GPA0_1引脚连接,RXD0和GPA0_0引脚连接。7.3.2翻查数据手册查看数据手册中GPIO中A0组中两个引脚的设置。图中TXD0、RXD0和GPA0复用一个引脚,所以使用之前一定要设置引脚的功能。7.3.4编写程序1.初始化在程序运行之前一定要对相关的寄存器进行初始化,下面的uart_init函数是对UART相关寄存器进行初始化,clock_init函数是对clock相关寄存器进行初始化。voiduart_init(){GPA0CON&=~0xFF;GPA0CON|=0x22;//0b00100010/*8-bits/Onestopbit/Noparity/Normalmodeoperation*//*每次8位,1个停止位,无奇偶验证,正常发送模式(非红外)*/ULCON0=0x3|(02)|(03)|(06);//0b00xx011/*Interruptrequestorpollingmode/Normaltransmit/Normaloperation/PCLK/*//*发送和接受引脚采用中断和轮询查询模式,正常发送,常规操作,时钟选择为PCLK*/UCON0=1|(12)|(010);/*禁止FIFO*/UFCON0=0;/***波特率计算:115200bps**PCLK=66MHz**DIV_VAL=(66000000/(115200x16))-1=35.8-1=34.8**UBRDIV0=34(DIV_VAL的整数部分)**(numof1'sinUDIVSLOTn)/16=0.8(DIV_VAL的小数部分)**(numof1'sinUDIVSLOTn)=12**UDIVSLOT0=0xDDDD(在数据手册上880页查表)*/UBRDIV0=34;//波特率分度值UDIVSLOT0=0xDDDD;}voiduart_send_byte(unsignedcharbyte){while(!(UTRSTAT0&(12)));/*等待发送缓冲区为空*/UTXH0=byte;/*发送一字节数据*/}unsignedcharuart_recv_byte(){while(!(UTRSTAT0&1));/*等待接收缓冲区有数据可读*/returnURXH0;/*接收一字节数据*/}voiduart_send_string(char*str){char*p=str;while(*p)uart_send_byte(*p++)