LOGO1第八章通信网络接口8通信网络接口嵌入式系统早已进入网络时代。嵌入式系统的组网方式和协议有许多种,即有异步串行通信的方式,也有同步串行通信的方式,即有复杂的通信协议,也有简单的通信协议。异步串行通信简单、灵活,对同步时钟的要求不高,但其传输效率较低,因此常用于传输信息量不大的场合。8.1异步串行通信接口串行通信方式是将数据一位一位的进行传输,数据的各位分时使用同一个传输信号线。串行通信的传输模式有同步传输和异步传输2种。所谓的异步是指发生方、接收方用于控制通信的时钟信号是各自独立的信号。异步串行通信的原理示意图如下图:异步通信中几个通信术语信术语(1)数据速率。即数据线上每秒钟传送的码元数,其计量单位为波特,1波特=1位/秒(即1bps)。(2)发送时钟、接收时钟、采样时钟。发送时钟即是发送方的移位时钟信号。接收时钟即是接收方的移位时钟信号。它们在通信时,必须保持一致。其频率的数值应该等于波特率。采样时钟是指接收方对信号线上的信号进行提取样本的时钟,其频率值通常是波特率的n倍(n可以是:8、16、32等)。(3)奇偶校验。通信中不可避免地会产生数据传输出错,因此,通信系统中需要校错、纠错的方法,以提高通信的可靠性。异步串行通信中常采用奇偶校验来进行校错。(4)通信数据格式。异步串行通信时,一次仅发送一个字符,发送一个字符的数据格式在RS-232协议中被约定。异步串行通信数据格式的特点是一个字符一个字符的传输,并且传送一个字符时总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。字符的数据位通常为5位~8位,其格式如下图所示。数据终端设备DTE——数据源和目的地数据通信设备DCE——使数据符合线路要求1.串行通信系统引脚其他表示法信号名方向1PG保护地设备地2TxD,SD发送数据DTE→DCE3RxD接收数据DCE→DTE4RTS,RS请求发送DTE→DCE5CTS,CS允许/清除发送DCE→DTE6DSR,MRDCE就绪DCE→DTE7SG信号地信号公共地8RLSD,DCD接收线路信号检测DCE→DTE20DTRDTE就绪DTE→DCE22RI振铃指示DCE→DTE2.常用的RS-232C信号线3.常用的RS-232C连接1)使用MODEM92)不使用MODEM3)简单连接4)最简单连接(3线连接)4.电气特性1)应保证电平在±(5~15)V之间对于数据线:逻辑“1”(MARK)=-3V~-15V,逻辑“0”(SPACE)=+3V~+15V对于控制信号:接通状态(ON)即信号有效的电平=+3V~15V断开状态(OUT)即信号无效的电平=-3Ⅴ~-15V。2)必须进行电平转换RS-232C接口采用的是负逻辑,其逻辑电平与TTL电平不一样,不能兼容。因此,为了实现与TTL电路的连接,必须进行电平转换。目前可以使用新型电平转换芯片MAX232和MAX232A(高速)双组RS-232C发送/接收器,以及MC1488,MC1489实现TTL电平与RS-232C电平双向转换。RS-232C接口设计示例RS-232C接口是广泛使用的异步串行通信接口。下图是一个典型的RS-232C接口电路。上图电路中所采用的电平转换芯片为MAX3232。S3C2440芯片的UART0相关引脚(即:TxD0、RxD0、nRTS0、nCTS0)经过MAX3232电平转换后连接到DB9型的插座上。这样就可以使用S3C2440芯片内部的UART0部件来控制符合RS-232C标准的串行通信。初始化UART0的函数、一字节发送/接收函数的示例请参见教材8.1.4节。5.机械特性1)连接器S3C2440的异步串行通信部件S3C2440芯片内部集成有3个异步串行通信部件(即UART部件),分别称为:UART0、UART1、UART2。UART的内部结构:UART部件的波特率产生器为自身的传送器和接收器提供连续的发送和接收时钟。16位除数的计算公式如下:除数=(PCLK/(波特率×16))-1或:除数=(UCLK/(波特率×16))-1例如,如果波特率为115200bps且PCLK或UCLK为40MHz,除数=(int)(40000000)(115200*16))-1=(int)(21.7)-1=21-1=20UART专用寄存器3个UART,每个都有11个专用寄存器,共29个寄存器RegisterAddressR/WDescriptionResetValueULCONn0x5000x000R/W线路控制寄存器0x00UCONn0x5000x004R/W控制寄存器0x00UFCONn0x5000x008R/WFIFO控制寄存器0x00UMCONn0x5000x00CR/WMODEM控制寄存器*0x00UTRSTATn0x5000x010R发送/接收状态寄存器0x6UERSTATn0x5000x014RRx错误状态寄存器0x0UFSTATn0x5000x018RFIFO状态寄存器0x00UMSTATn0x5000x01CRMODEM状态寄存器*0x0UTXHn0x5000x020/23W发送缓冲寄存器-URXHn0x5000x024/27R接收缓冲寄存器-UBRDIVn0x5000x028R/W波特率除数寄存器-(1)UART线路控制寄存器(ULCONn)ULCONn寄存器共有3个:ULCON0、ULCON1、ULCON2。用于设置传输格式格式如下:(2)UART控制寄存器(UCONn)UCONn寄存器共有3个:UCON0、UCON1、UCON2。它用于选择UART时钟源、设置UART中断方式,格式如下:(3)UARTFIFO控制寄存器(UFCONn)UFCONn寄存器共有3个:UFCON0、UFCON1、UFCON2。UFCONn寄存器用于设置是否使用FIFO,设置各FIFO的触发阙值,即发送FIFO中有多少个数据时产生中断、接收FIFO中有多少个数据时产生中断。并可以通过设置格式如下:4、MODEM控制寄存器(UMCON)RegisterAddressR/WDescriptionResetValueUMCON00x5000000CR/WUART0FIFO控制寄存器0x00UMCON10x5000400CR/WUART1FIFO控制寄存器0x00reserved0x5000800C-保留-字段名位意义初值reserved7:5保留(为0)000AutoFlowControl(AFC)4自动流控制。0:一般方式;1:自动流控制0reserved3:1保留(为0)000RequesttoSend0nRTS引脚信号控制。0:nRTS为高电平;1:nRTS为低电平,有效。05、发送/接收状态寄存器(UTRSTAT)RegisterAddressR/WDescriptionResetValueUTRSTAT00x50000010RUART0状态寄存器0x06UTRSTAT10x50004010RUART1状态寄存器0x06UTRSTAT20x50008010RUART2状态寄存器0x06字段名位意义初值Transmitterempty2发送器空状态位。0:发送器未空1:发送器、发送缓冲器均空。1Transmitbufferempty1发送缓冲器空状态位。0:未空;1:空在非FIFO模式,激发中断或DMA请求1Receivebufferdataready0接收缓冲器状态位。0:空;1:有数据在非FIFO模式,激发中断或DMA请求06、Rx错误状态寄存器(UERSTAT)RegisterAddressR/WDescriptionResetValueUERSTAT00x50000014RUART0Rx错误状态寄存器0x0UERSTAT10x50004014RUART1Rx错误状态寄存器0x0UERSTAT20x50008014RUART2Rx错误状态寄存器0x0字段名位意义初值BreakDetect3暂停信号状态。0:无暂停信号;1:收到暂停信号(产生中断请求)0FrameError2帧错误状态位。0:无帧错误;1:有帧错误(产生中断请求)0ParityError1奇偶校验错误状态。0:无奇偶校验错1:有奇偶校验错误(产生中断请求)0OverrunError0溢出错误状态位。0:无溢出错误;1:溢出错误(产生中断请求)07、FIFO状态寄存器(UFSTAT)RegisterAddressR/WDescriptionResetValueUFSTAT00x50000018RUART0FIFO状态寄存器0x00UFSTAT10x50004018RUART1FIFO状态寄存器0x00UFSTAT20x50008018RUART2FIFO状态寄存器0x00字段名位意义初值Reserved15:10保留(为0)0TxFIFOFull9发送FIFO满状态。0:未满;1:满0RxFIFOFull8接收FIFO状态位。0:未满;1:满0TxFIFOCount7:4发送FIFO中数据的数目,字节单位。0RxFIFOCount3:0接收FIFO中数据的数目,字节单位。08、MODEM状态寄存器(UMSTAT)RegisterAddressR/WDescriptionResetValueUMSTAT00x5000001CRUART0Modem状态寄存器0x0UMSTAT10x5000401CRUART1Modem状态寄存器0x0Reserved0x5000801CR保留-字段名位意义初值Reserved3保留(为0)0DeltaCTS2nCTS引脚信号自上次读后变化状态。0:未改变;1:已改变。0Reserved1保留(为0)0CleartoSend0nCTS引脚信号状态。0:nCTS为高电平;1:nCTS引脚为低电平,有效。09、发送缓冲寄存器(UTxH)RegisterAddressR/WDescriptionResetValueUTxH00x50000020(L)0x50000023(B)W(byte)UART0发送缓冲寄存器-UTxH10x50004020(L)0x50004023(B)W(byte)UART1发送缓冲寄存器-UTxH20x50008020(L)0x50008023(B)W(byte)UART2发送缓冲寄存器-字段名位意义初值TxDATAn7:0UARTn发送的一个字节数据-10、接收缓冲寄存器(URxH)RegisterAddressR/WDescriptionResetValueURxH00x50000024(L)0x50000027(B)R(byte)UART0接收缓冲寄存器0x00URxH10x50004024(L)0x50004027(B)R(byte)UART1接收缓冲寄存器0x00URxH20x50008024(L)0x50008027(B)R(byte)UART2接收缓冲寄存器0x00字段名位意义初值RxDATAn7:0UARTn接收的一个字节数据。-11、波特率除数寄存器(UBRDIV)RegisterAddressR/WDescriptionResetValueUBRDIV00x50000028R/WUART0波特率除数寄存器-UBRDIV10x50004028R/WUART1波特率除数寄存器-UBRDIV20x50008028R/WUART2波特率除数寄存器-字段名位意义初值UBRDIV15:0波特率除数值。UBRDIVn0-四、UART应用举例编写一程序,使用S3C2440X的UART2进行串行数据收发,要求用脉冲请求中断的方式、使用收/发FIFO,8个数据位、1个停止位、不校验,波特率为125kb/s。设Pclk为50MHz。(提示:主程序对UART2初始化、引脚配置、中断初始化等,并进行一次发送;中断服务程序进行数据收发,标签清除中断请求标志和中断服务标志)解:(1)计算波特率除数:由公式:UBRDIVn=(int)(CLK/(fB*16))-1这里:Pclk=50MHz,fB=125