10串行通信和DMA控制接口10.1串行通信的基本概念串行通信指的是数据一位一位地依次传输,每一位数据占据一个固定的时间长度。这种情况只要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外部设备之间的远距离通信,但串行通信的速度比较慢。串行通信线路有如下3种方式如图所示:(1)单工通信:它只允许一个方向传输数据。A只作为数据发送器,B只作为数据接收器,不能进行反方向传输。(2)半双工通信:它允许两个方向传输数据,但不能同时传输,只能交替进行,A发B收或B发A收。在这种情况下,为了控制线路换向,必须对两端设备进行控制,以确定数据流向。这种协调可以靠增加接口的附加控制线来实现,也可用软件约定来实现。(3)全双工通信:它允许两个方向同时进行数据传输,A收B发的同时可A发B收,如图所示。显然,两个传输方向的资源必须完全独立,A与B都必须有独立的接收器和发送器,从A到B和从B到A的数据通路也必须完全分开(至少在逻辑上是分开的)。图8.2110.1.2串行通信数据的收发方式在串行通信中数据的收发可采用异步和同步两种基本的工作方式。1.异步通信方式异步通信所采用的数据格式是以一组不定“位数”数组组成。第1位称起始位,它的宽度为1位,低电平;接着传送一个字节(8位)的数据,以高电平为“1”,低电平为“0”;最后是停止位,宽度可以是1位,1.5位或2位,在两个数据组之间可有空闲位。异步通信的数据格式见图10.2。每秒传送数据的位数称为传送速率,即波特率(bandrate)。波特率一般在300,600,900,1,200,2,400,…,9,600波特之间。计算机之间的异步通信速率一经确定后,一般不应变动,但通信的数据是可变动的,也就是数据组之间的空闲位是可变的。2.同步通信方式在同步通信时所使用的数据格式根据控制规程分为面向字符及面向比特的两种。(1)面向字符型的数据格式:面向字符型的同步通信数据格式可采用单同步、双同步及外同步3种数据格式,如下图所示。图8.24单同步是指在传送数据之前先传送一个同步字符“SYNC”,双同步则先传送两个同步字符“SYNC”。接收端检测到该同步字符后开始接收数据。外同步通信的数据格式中没有同步字符,而是用一条专用控制线来传送同步字符,使接收方及发送端实现同步。当每一帧信息结束时均用两个字节的循环控制码CRC为结束。(2)面向比特型的数据格式:根据同步数据链路控制规程(SDLC),面向比特型的数据以帧为单位传输,每帧由6个部分组成。第1部分是开始标志“7EH”;第2部分是一个字节的地址场;第3部分是一个字节的控制场;第4部分是需要传送的数据,数据都是位(bit)的集合;第5部分是两个字节的循环控制码CRC;最后部分又是“7EH”,作为结束标志。面向比特型的数据格式如图所示。图8.25在SDLC规程中不允许在数据段和CRC段中出现6个“1”,否则会误认为是结束标志。因此要求在发送端进行检验,当连续出现5个“1”,则立即插入一个“0”,到接收端要将这个插入的“0”去掉,恢复原来的数据,保证通信的正常进行。通常,异步通信速率要比同步通信的低。最高同步通信速率可达到800k位,因此适用于传送信息量大,要求传送速率很高的系统中。10.2可编程串行通信接口芯片8251A8251A是一个通用串行输入/输出接口,可用来将86系列CPU以同步或异步方式与外部设备进行串行通信。它能将并行输入的8位数据变换成逐位输出的串行信号;也能将串行输入数据变换成并行数据,一次传送给处理机。广泛应用于长距离通信系统及计算机网络。10.2.18251A芯片内部结构及其功能8251A由发送器、接收器、数据总线缓冲存储器、读/写控制电路及调制/解调控制电路等5部分组成,如图10.4(a)所示。引脚信号如图10.4(b)所示。图8.26图8.271.发送器8251A的发送器包括发送缓冲存储器,发送移位寄存器(并→串转换)及发送控制电路3部分,CPU需要发送的数据经数据发送缓冲存储器并行输入,并锁存到发送缓冲存储器中。如果是采用同步方式,则在发送数据之前,发送器将自动送出一个(单同步)或两个(双同步)同步字符(Sync)。然后,逐位串行输出数据。如果采用异步方式,则由发送控制电路在其首尾加上起始位及停止位,然后从起始位开始,经移位寄存器从数据输出线TXD逐位串行输出,其发送速率由TXC端上收到的发送时钟频率决定。2.接收器8251A的接收器包括接收缓冲存储器,接收移位寄存器(串→并转换)及接收控制电路3部分。外部通信数据从RXT端,逐位进入接收移位寄存器中。如果是同步方式,则要检测同步字符,确认已经达到同步,接收器才可开始串行接收数据,待一组数据接收完毕,便把移位寄存器中的数据并行置入接收缓冲存储器中;如果是异步方式,则应识别并删除起始位和停止位。这时RXDRY线输出高电平,表示接收器已准备好数据,等待向CPU输出。8251A接收数据的速率由RXC端输入的时钟频率决定。接收缓冲存储器和接收移位寄存器构成接收器的双缓冲结构。3.数据总线缓冲存储器数据总线缓冲存储器是CPU与8251A之间信息交换的通道。它包含3个8位缓冲寄存器,其中两个用来存放CPU向8251A读取的数据及状态,当CPU执行IN指令时,便从这两个寄存器中读取数据字及状态字。另一个缓冲寄存器存放CPU向8251A写入的数据或控制字。当CPU执行OUT指令时,可向这个寄存器写入,由于两者公用一个缓冲寄存器,这就要求CPU在向8251A写入控制字时,该寄存器中无将要发送的数据。为此,该接口电路必需要有一定的措施来防止。4.读/写控制电路读/写控制电路用来接收一系列的控制信号,由它们可确定8251A处于什么状态,并向8251A内部各功能部件发出有关的控制信号,因此它实际上是8251A的内部控制器。由读/写控制电路接收的控制信号如下:(1)RESET——复位信号。向8251A输入,高电平有效。RESET有效,迫使8251A中各寄存器处于复位状态,收、发线路上均处于空闲状态。(2)CLK——主时钟。向8251A输入。CLK信号用来产生8251A内部的定时信号。对于同步方式,CLK必须大于发送时钟(TXC)和接收时钟(RXC)频率的30倍。对于异步方式,CLK必须大于发送和接收时钟的4.5倍。8251A还规定CLK频率要在0.74~3.1MHz范围内。(3)CS——选片信号。由CPU输入,低电平有效。CS有效,表示该8251A芯片被选,通常由8251A的高位端口地址译码得到。(4)RD和WR——读和写控制信号。由CPU输入,低电平有效。(5)C/D——控制/数据信号。C/D=1,表示当前通过数据总经传送的是控制字或状态信息;C/D=0,表示当前通过数据总线传送的是数据;均可由一位地址码来选择。5.调制/解调控制电路当使用8251A实现远距离串行通信时,8251A的数据输出端要经过调制器将数字信号转换成模拟信号,数据接收端收到的是经过解调器转换来的数字信号,因此8251A要与调制/解调器直接相连,它们之间的接口信号如下:(1)DTR——数据终端准备好信号,向调制/解调器输出,低电平有效。DTR有效,表示CPU已准备好接收数据,它可软件定义。控制字中DTR位=1时,输出DTR为有效信号。(2)DSR——数据装置准备好信号。由调制/解调器输入,低电平有效。DSR有效,表示调制/解调器或外部设备已准备好发送数据,它实际上是对DTR的回答信号。CPU可利用IN指令读入8251A状态寄存器内容,检测DSR位状态,当DSR=1时,表示DSR有效。(3)RTS——请求发送信号。向调制/解调器输出,低电平有效。RTS有效,表示CPU已准备好发送数据,可由软件定义。控制字中RTS位=1时,输出RTS有效信号。(4)CTS——清除发送信号。由调制/解调器输入,低电平有效。CTS有效,表示调制/解调器已作为接收数据准备,只要控制字中TXEN位=1,CTS有效时,发送器才可串行发送数据。它实际上是对RTS的回答信号。如果在数据发送过程中使CTS无效,或TXEN=0,发送器将正在发送的字符结束时停止继续发送。10.2.28251A芯片的编程可编程串行通信接口芯片8251A在使用前必须进行初始化,以确定它的工作方式,传送速率,字符格式以及停止位长度等,可使用的控制字如下:1.方式选择控制字其使用格式如图10.5所示。B2B1位用来定义8251A的工作方式是同步方式还是异步方式,如果是异步方式还可由B2B1的取值来确定传送速率。×1表示输入的时钟频率与波特率相同,允许发送和接收波特率不同,RXC和TXC也可不相同,但是它们的波特率系数必须相同;×16表示时钟频率是波特率的16倍;×64表示时钟频率是波特率的64倍。图10.5因此通常称1,16和64为波特率系数,它们之间存在如下的关系:发送/接收时钟频率=发送/接收波特率×波特率系数L2L1位用来定义数据字符的长度可为5,6,7或8位。PEN位用来定义是否带奇偶校验,称作校验允许位。在PEN=1情况下,由EP位定义是采用奇校验还是偶校验。S2S1位用来定义异步方式的停止位长度(1位、15位或2位)。对于同步方式,S1位用来定义是外同步(S1=1)还是内同步(S1=0),S2位用来定义是单同步(S2=1)还是双同步(S2=0)。2.操作命令控制字其使用格式如图10.6所示,TXEN位是允许发送位,TXEN=1,发送器才能通过TXD线向外部串行发送数据。图10.6DTR位是数据终端准备好位。DTR=1,表示CPU已准备好接收数据,这时DTR引线端输出有效。RXE位是允许接收位。RXE=1,接收器才能通过RXD线从外部串行接收数据。SBRK位是发送断缺字符位。SBRK=1,通过TXD线一直发送“0”信号。正常通信过程中SBRK位应保持为“0”。ER位是清除错误标志位。8251A设置有3个出错标志,分别是奇偶校验标志PE,越界错误标志OE和帧校验错标志FE。ER=1时将PE,OE和FE标志同时清“0”。RTS位是请求发送信号。RTS=1,迫使8251A输出RTS有效,表示CPU已作好发送数据准备,请求向调制/解调器或外部设备发送数据。IR位是内部复位信号。IR=1,迫使8251A回到接收方式选择控制字的状态。EH位为跟踪方式位。EH位只对同步方式有效,EH=1,表示开始搜索同步字符,因此对于同步方式,一旦允许接收(RXE=1),必须同时使EH=1,并且使ER=1,清除全部错误标志,才能开始搜索同步字符。从此以后所有写入的8251A的控制字都是操作命令控制字。只有外部复位命令RESET=1或内部复位命令IR=1才能使8251A回到接收方式选择命令字状态。3.状态控制字CPU可在8251A工作过程中利用IN指令读取当前8251A的状态控制字,其使用格式如图10.7所示。图10.7CPU可在任意时刻用IN指令读8251A状态字,这时C/D引线端应输入为“1”,在CPU读状态期间,8251A将自动禁止改变状态位。对8251A进行初始化编程,必须在系统复位之后,总是先使用方式选择控制字,并且必须紧跟在复位命令之后。如果定义8251A工作于异步方式,那么必须紧跟操作命令控制字进行定义,然后才可开始传送数据。在数据传送过程中,可使用操作命令字重新定义,或使用状态控制字读取8251A的状态,待数据传送结束,必须用操作命令控制字将IR位置“1”,向8251A传送内部复位命令后,8251A才可重新接收方式选择命令字、改变工作方式完成其他传送任务。如果是采用同步工作方式,那么在方式选择控制字之后应输出同步字符,在一个或两个同步字符之后再使用操作命令控制字,以后的过程同异步方式。10.2.38251A串行接口应用举例采用8251A实现串行接口通信是在两台微机中各设置一个RS232串行接口。每个RS232串行接口采用一片8251A芯片,其通信结构流程图如图8.32所示。可采用异步或同步方式实现单工、双工或半双工通信。当采用查询方式,异步传送,双方实现半双工通信时,初始化程序由两部分组成