§4.3Intel8250可编程异步通讯接口4.3.18250的基本性能指标①完全双工、双缓冲器发送和接收器的异步通信接口电路。②异步传送:5~8位字符,时钟频率为通讯波特率的16倍。③通信波特率:50~9,600。④停止位可编程选择为1、1.5和2位,可编程产生终止字符。⑤可编程选择奇偶校验方式:奇校验、偶校验。⑥出错检测——具有奇偶、溢出、帧错误等检测电路。⑦片内具有优先权中断控制逻辑,具有很强的中断控制能力。4.3.28250的功能结构4.3.2.1发送与接收部分⑴发送器发送器接收到发送数据后,将发送数据保存在数据发送缓冲器(THR)中。当发送移位寄存器没有正在发送的数据时,8250把待发送数据由发送缓冲器传送到移位寄存器(TSR),按照编程指定的参数(包括数据格式和波特率等),加入起始位、奇偶校验位和停止位,从8250的串行数据输出端(SOUT)移位输出,输出的顺序为字符的低位在前、高位在后。当将THR中的数据传送至TSR以后,THR“空”状态位置位或通过中断逻辑发出中断申请,要求CPU传送下一个字符。当CPU向THR写入一个字符后,THR“空”状态位复位并清除中断请求。当在TSR中的字符移位输出完后,8250再次把THR中的字符,传送至TSR,开始下一个字符的传送过程。另外,发送器的另一个功能是能发送终止符(BreakCharacter)。终止符是由在通信线上的连续的低电平组成,用来通知接收方终止完全双工通信中通信。⑵接收器接收移位寄存器(RSR)对数据输入端(SIN)输入的串行数据进行移位接收。在接收时,首先要搜索起始位,使用16倍波特率的数据接收时钟(RCLK)采样传送电路上的输入信号。当输入信号由高电平变低后,连续测试8个RCLK时钟周期,若采样到的都是低电平,则确认为起始位,否则认为是传输线上的干扰。确认起始位后,每隔16个RCLK时钟周期对SIN输入的数据位进行采样,直到规定的数据格式结束。RSR接收完一个字符后,接收控制电路按规定的数据格式进行奇偶校验,如果没有错误自动删除起始位、奇偶校验位和停止位,把串行输入的数据移位转换成并行数据送人接收缓冲寄存器(RBR),使接收数据“可用位”置位,并通过中断控制电路发出读取数据中断请求。对RBR的读取,使接收数据“可用位”复位,清除中断请求。在上述过程中接收器继续接收字符。接收时,如果发现接收数据出现奇偶校验错(PE)、数据格式错——帧错误(FE)、接收数据时发生溢出错(OE),即上一个保存在RBR中的数据尚未被读取,下一个接收的数据准备送至RBR中、接收到终止信号(BI),都置位状态寄存器中的相应位,并通过中断控制逻辑发出中断请求,要求处理。4.3.2.2通信控制和状态寄存器通过对LCR写入控制信息,确定通信的字符格式(包括字符长度、停止位的个数、奇偶校验设置)。也可以使LCR的第6位置“1”迫使8250输出终止符。LCR的最高位是一种特殊用途,在8250内部有10个寄存器,但8250只有三条地址线(A2~A0)来寻址内部寄存器,最多只能寻址8个内部寄存器,所以,存在有两组寄存器要共用同一个地址,LCR的最高位DLAB作为另一个寻址依据,来区分是寻址哪一组寄存器。LSR提供串行数据发送和接收时的状态,供CPU读取和处理。CPU不仅可以对LSR实行读出,也可以对其写入(除第6位以外),供系统自检时使用。4.3.2.3波特率发生控制电路8250使用频率1.8432MHz作为基准时钟输入信号。需用分频方法产生所需的波特率。8250传送或接收串行数据时,使用的时钟信号频率是数据传送波特率的16倍。当8250工作于不同的波特率时,所使用的分频系数也是不同的,在8250内部有两个保存分频系数的寄存器称为除数锁存器。波特率与除数寄存器的值之间的关系如表4-6示。4.3.2.4调制解调控制部分D2/D3=1时,引脚OUT1/OUT2=04.3.2.5中断控制1.中断识别寄存器(IIR)当接收数据错、接收缓冲寄存器满、发送缓冲器空以及应答联络的输入控制信号的状态变化等有一种或多种出现时,在允许中断的情况下,可通过读中断识别寄存器识别是何种事件引起中断。有选择地设置中断允许位,可以改变8250内部的中断控制机构。4.3.2.68250内部寄存器的寻址8250内部有上述的10个可访问的寄存器,都是通过8250的引脚A2~A0来访问。存在有两个端口地址由两个寄存器共用的情况,这就要求引入另一个信号区别共用同一地址的寄存器。完成上述功能的选择信号是8250中的通信线路控制寄存器最高位,即除数锁存器访问位(DLAB)来识别。参见表4-8。表4-8用于8250内部寄存器选择地址表4.3.38250的引脚4.3.3.1与系统相连接部分⑴数据线D0~D7(双向、三态、高电平有效,引脚1~8)CPU与8250之间的信息通过这些数据线传送。具体包括:对8250的编程信息;从8250的有关寄存器中读取的状态;通过8250发送的数据;8250接收的数据;数据输入选通脉冲DISTR、DISTR:两者中只要有一个有效,就允许从8250读取状态信息或数据。即只需用两个信号中的一个信号作为选通控制信号,另一个可以固定为无效。数据输出选通脉冲DOSTR、DOSTR:情况与数据输入选通脉冲相似。⑵数据选通线驱动器禁止信号DDIS(输出):每当CPU从8250读取信息时,DDIS变为低电平。输出高电平时,用来禁止外部的收发器继续往PC机发送数据。⑶地址线A0~A2(输入):这三条引线一般与系统地址总线相连,CPU用这三个信息来寻址8250内部不同的寄存器。⑷选片控制信号CS0、CS1、CS2:三个选片控制信号,必须三个信号都有效时8250才能正常工作。一般用CPU访问外设控制线和高位地址组成选片信号。⑸地址选通脉冲ADS(输入):其有效时,锁存地址(A0、Al、A2)和选片信号(CS0、CS1、CS2)。⑹主复位信号MR(输入):该信号连接到系统的复位信号。当其有效时,清除所有寄存器(除了接收缓冲器、发送缓冲器和除数锁存器外)和8250的控制逻辑以及有关的输出信号,如表4-9所示。4.3.3.2与通信设备相连部分⑴外部时钟输人/输出XTAL1、XTAL2(引脚16、17):这两个引脚把串行通信的主定时基准信号(晶体振荡器或时钟信号)接到8250。⑵接收时钟RCLK(输入、引脚9):从这个引脚向8250输人16×波特率的接收器时钟。⑶BOUNDOUT波特率输出(输出、引脚15):是8250输出的一个时钟信号,其频率是8250的主振频率除以除数锁存器的值,即为16×波特率。通常可用该信号作为接收器时钟,所以常把它连至RCLK输入端。⑷串行数据输入信号SIN(输入):由通信设备(外设或调制解调器)送来的串行的输人数据。⑸串行数据输出信号SOUT(输出):8250发送给通信设备(外设或调制解调器)的串行输出数据。⑹数据终端准备就绪DTR(输出):可由CPU使调制解调控制寄存器的位0(DTR位)置“1”而输出有效(低电平),主复位信号MR把它置为高电平。通常情况下,当8250已准备好通信,这有效信号用以通知通信设备或调制解调器。⑺发送请求RTS(输出):当8250已准备好通信,使RTS输出有效信号以通知通信设备。此信号可由CPU使调制解调控制寄存器的位1(RTS位)置“1”而输出有效(低电平),主复位信号把它置为高电平。⑻允许发送CTS(输入):当调制解调器作好了通信准备时,向8250输入有效的CTS信号,通知8250开始发送。它的状态可由读调制解调状态寄存器的第4位得到。调制解调器状态寄存器的位0,指示自最后一次读操作以来,CTS的输入状态是否发生变化。如果编程允许调制解调器状态中断,CTS状态的变化就产生中断请求。⑼数据设备准备就绪DSR(输入):当调制解调器或通信设备已准备好建立通信环路(链)准备与8250传送数据时,就向8250输送有效的DSR信号。它的状态可由读调制解调状态寄存器的第5位得到,此寄存器的第1位指示了自上次读操作后此信号是否发生了变化。若允许调制解调器状态中断的话,DSR状态的变化就产生中断请求。⑽接收线路检测RLSD和振铃指示RI(输入):它们为低电平(有效)时,表示通信设备已检测到数据串(RLSD)或收到了振铃信号(RI)。它们的状态可由读调制解调状态寄存器的第7、6位得到,此寄存器的第3、2位分别表示自上一次读操作以后这些信号是否发生了变化。若允许调制解调器状态中断,这两信号中的任意一个状态发生变化,都将产生中断请求。⑾中断请求信号INTRPT(输出):8250内部的中断申请源任一个未被屏蔽源有请求时,INTRPT输出高电平。适当的中断服务和主复位信号使INTRPT处于低电平。⑿输出信号OUT1、OUT2(输出):是两个编程控制的输出。可对调制解调器控制寄存器的第2位和第3位编程使其输出有效信号。主复位信号使这两者处在高电平。⒀选片输出CSOUT(输出):当8250的三个选片输入端CS0、CS1和CS2都有效时,此引脚输出高电平,此时才能开始数据传送。§4.3.48250的初始化编程编程主要步骤是:①确定波特率:设置除数锁存器的分频值。为了能对除数锁存器写入,要先使通信线路控制寄存器的D7=1。②设置通信的数据格式:通过对通信线路控制寄存器编程实现,而且要使它的D7=0,以便接下来对接收和发送缓冲器以及中断允许寄存器进行操作。③如果使用中断,则设置中断允许寄存器的状态。若不使用中断,这个寄存器可设置成0。④设置调制解调器控制寄存器:通常,这寄存器设定的值为03H,使8250输出DTR和RTS这两个调制解调器控制信号。如果系统中不使用这两个信号,这样的设置也不会带来问题。如果使用中断,OUT2位应设置为“1”,这样8250产生的中断信号可以通过系统总线送给8259中断控制器。下面举一个例子:要求以9600波特率进行异步通信,每字符的数据位7位,2个停止位,奇校验,允许所有中断。下面给出了采用8086汇编编写的8250初始化部分程序。;BIOS分配异步通信的端口地址为3F8H~3FFHMOVAL,80HMOVDX,3FBHOUTDX,AL;使通信线控制寄存器最高位置1MOVAL,0CHMOVDX,3F8HOUTDX,ALMOVDX,3F9HMOVAL,0OUTDX,AL;对除数锁存器置初值MOVAL,00001110B;设置数据格式为7位/字符两个停止位,奇校验MOVDX,3FBHOUTDX,ALMOVAL,0FH;允许所有中断MOVDX,3F9HOUTDX,ALMOVAL,OBH;OUT2、DTR、RTS信号有效MOVDX,3FCHOUTDX,AL§4.3.5INS8250应用编程1、查询方式发送初始化8250读LSRD5=1?发送一个字符发完?结束YYNN2、查询方式接收初始化8250读LSRD0=1?接收一个字符收完?结束YYNN有错?NY错误处理发送寄存器接收数据就绪3、中断方式通信程序设计1)中断通信方式初始化修改中断向量:按使用的端口COM1或COM2,接管中断0CH或中断0BH(保存原中断向量,将新的中断向量替换上去,注意程序结束时恢复原中断向量)。确定通信协议:设置波特率及数据传输格式。确定INS8250操作方式:设置中断允许寄存器相应位的允许或禁止,并设允许向量中断模式(置MCR的D3=1)。开放通信中断:对8259A中断控制器的屏蔽寄存器编程(OCW1),允许中断IRQ4或IRQ3。中断通信方式有查询中断和向量中断两种方式。DATASEGMENT‘DATA’INT_SEGDW?INT_OFFDW?DATAENDS……moval,0ch;取原OCH中断向量movah,35hint21hmovINT_OFF,bx;将返回的向量ES:BX保存在双字movbx,es;变量INT中movINT_SEG,bxcl