1、第 13 章 中断系统,本章主要内容,(1)中断及中断处理的基本概念 (2)80x86实模式中断系统 (3)可编程中断控制器8259A,13.1 基本概念,13.1.1 中断的定义 在程序运行时,系统外部、内部或现行程序本身若出现紧急事件,处理器必须立即强行中止现行程序的运行,改变机器的工作状态并启动相应的程序来处理这些事件,然后再恢复原来的程序运行,这一过程称为中断。,13.1.2 中断响应和处理过程,CPU在执行每条指令的适当时刻,检测中断请求信号。 若发现中断请求信号有效,对于可屏蔽中断还必须CPU开放中断,则在下一机器周期进入中断响应周期。 进入中断响应周期后,中断响应和处理的过程如下
2、:,1. 关中断 CPU在响应中断时,发出中断响应信号INTA,同时内部自动地关中断,以禁止接受其他的中断请求。 2. 保存断点 把断点处的指令指针IP值和CS值压入堆栈,以使中断处理完后能正确地返回主程序断点。,3. 识别中断源 CPU要对中断请求进行处理,必须找到相应的中断服务程序的入口地址,这就是中断的识别。 4. 保护现场 为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器(指在中断服务程序中要使用的寄存器)的内容以及标志寄存器的状态压入堆栈保护。,5. 执行中断服务程序 在执行中断服务程序中,可在适当时刻重新开放中断,以便允许响应较高优先级的中断。 6. 恢复现场并返
3、回 即把中断服务程序执行前压入堆栈的现场信息弹回原寄存器,然后执行中断返回指令,从而返回主程序继续运行。,在上述中断响应及处理的6项操作中,前3项是中断响应过程,一般由中断系统硬件负责完成; 后3项是中断处理过程,通常是由用户或系统程序设计者编制的中断处理程序(软件)负责完成。针对一个具体的系统或机型,中断服务程序设计者应该清楚该系统在中断响应时,中断响应硬件完成了哪些操作(如程序状态字PSW是否已被压入堆栈),还需中断处理软件(中断服务程序)完成哪些操作。,13.1.3 中断优先级和中断嵌套,1. 中断优先级 在实际系统中,多个中断请求可能同时出现,但中断系统只能按一定的次序来响应和处理,这
4、时CPU必须确定服务的次序,即根据中断源的重要性和实时性,照顾到操作系统处理的方便,对中断源的响应次序进行确定。 这个响应次序称为中断优先级(priority)。,通常,可用软件查询法确定中断优先级,也可用硬件组成中断优先级编码电路来实现。 现代PC机中多采用可编程中断控制器(如8259A)来处理中断优先级问题。 (1) 软件查寻法确定中断优先级 采用软件查询法解决中断优先级只需要少量硬件电路。如图13.1所示,系统中有多种外部设备,将这些设备的中断请求信号相“或”,从而产生一个总的中断请求信号INTR发给CPU。,图13.1 软件查询接口电路,当CPU响应中断请求进入中断处理程序后,必须在中
5、断处理程序的开始部分安排一段带优先级的查询程序,查询的先后顺序就体现了不同设备的中断优先级,即先查的设备具有较高的优先级,后查的设备具有较低的优先级。一般来说总是先查速度较快或是实时性较高的设备。软件查询的流程如图13.2所示。,图13.2 软件查询流程图,(2) 菊花链优先级排队电路 菊花链优先级排队电路是一种优先级管理的简单硬件方案。它是在每个设备接口设置一个简单的逻辑电路,以便根据优先级顺序来传递或截留CPU发出的中断响应信号INTA,以实现响应中断的优先顺序。 典型的菊花链优先级结构如图13.3(a) 所示。,图13.3 菊花链优先级结构 (a) 菊花链排队电路,图13.3 菊花链优先
6、级结构 (b) 菊花链逻辑,中断 请求 信号 (高电平有效),中断响应信号 (低电平有效),INTR,2. 中断嵌套 当CPU正在执行优先级较低的中断服务程序时,允许响应比它优先级高的中断请求,而将正在处理的中断暂时挂起,这就是中断嵌套。 此时,CPU首先为级别高的中断服务,待优先级高的中断服务结束后,再返回到刚才被中断的较低的那一级,继续为它进行中断服务。 如图13.4所示。,图13.4 中断嵌套示意图,STI,IRET,STI,IRET,. . . .,. . . .,. . . .,中断嵌套的深度(中断服务程序又被中断的层次)受到堆栈容量的限制。 所以在编写中断服务程序时,必须要考虑有足
7、够的堆栈单元来保留多次中断的断点信息及有关寄存器的内容。,13.2 80x86实模式的中断系统,13.2.1 中断的分类 中断分类的方式很多。 根据进入中断的方式可分为自愿中断和强迫中断。 根据其重要性可分为可屏蔽中断和不可屏蔽中断。 根据中断源的位置可分为内部中断和外部中断等等。 如图13.5所示。,图13.5 80x86实模式系统的中断分类,INT n 指令,中 断 逻 辑,断点中断 (INT 3),溢出中断 (INTO, OF=1),单步中断 (TF=1),除法错 中断,软件中断(内部中断),非屏蔽中断请求,中 断 控 制 器 (8259A),NMI,INTR,IRQ0,. . . .,
8、IRQ7,可 屏 蔽 中 断,硬件中断(外部中断),关于中断分类的补充说明,为了支持多任务和虚拟存储器等功能,80386及以上CPU 把外部中断称为“中断”(interrupt),把内部中断称为“异常”(exception) 。与8086一样,它也最多处理256种中断和异常。 根据引起异常的程序是否可被恢复和恢复点的不同,又把异常分为三类:故障(fault)陷阱(trap)中止(abort) 把对应的异常处理程序分别称为故障处理程序、陷阱处理程序和中止处理程序。,故障是在引起异常的指令之前,把异常通知给系统的一种异常。故障的特点是可以排除的。例如,在执行一条指令时,如果发现它要访问的段不在内存
9、中,那磨停止该指令的执行,并产生一个段不存在异常,对应的故障处理程序可通过从外存加载该段到内存的方法来排除故障。之后,原引起异常的指令就可以继续执行,就不再产生异常。 陷阱是在引起异常的指令执行之后触发的一种异常。在转入异常处理程序时,引起陷阱的指令已完成。陷阱处理程序执行完,返回到引起陷阱指令的下一条指令。软中断指令INT n 是陷阱的例子。 中止是在系统出现严重的不可恢复的事件时触发的一种异常。产生中止后,正执行的程序不能恢复执行,系统要重新启动才能恢复正常运行状态。,13.2.2 中断向量表,所谓中断向量(interrupt vector),实际上就是中断服务程序的入口地址,每个中断类型
10、对应一个中断向量。 每个中断向量占4字节的存储单元。 其中: 前两个字节单元存放中断服务程序入口地址的偏移量(IP),低字节在前,高字节在后; 后两个字节单元存放中断服务程序入口地址的段基值(CS),也是低字节在前,高字节在后。,80x86实模式系统允许引入的中断可达256个,因此需占用1K字节的存储空间来存放这256个中断服务程序入口地址。 80x86实模式系统把中断服务程序入口地址信息设置在存储器的最低端,即从00000H003FFH的1K字节存储空间中。 这一存储空间就叫中断向量表,如图13.6所示。,图13.6 实模式系统的中断向量表,类型255 (十进制),类型32 类型31 (十进
11、制),供用户定义的中断 (共224个),类型5类型4类型3类型2类型1类型0,保留的中断 (共27个),专用的中断 (共5个),0000: 03FFH0000:007FH 0000:007EH0000:0014H 0000:0013H0000:0010H 0000:000FH0000:000CH 0000:000BH0000:0008H 0000:0007H0000:0004H 0000:0003H0000:0000H,溢出中断,断点中断,非屏蔽中断,单步中断,除数为0中断,在中断向量表中,各中断向量按中断类型码从0到255顺序存放。这样,知道了中断类型码,很快就可算出相应中断向量的存放位置,
12、从而取出中断向量。 例如,中断类型码为27H的中断所对应的中断向量应存放在从0000H:009CH开始的4个连续字节单元中。 如果相应存储单元的内容如图13.7所示,那么27H号中断的中断服务程序的入口地址即为8765H:4321H。,图13.7 中断向量的存放格式,87H65H43H21H,0000:009FH0000:009CH,由于中断向量在中断向量表中是按中断类型码(也称中断向量号)顺序存放的,所以每个中断向量的地址可由中断类型码乘以4计算出来。 CPU响应中断时,只要把中断类型码N左移2位(乘以4),即可得到中断向量在中断向量表中的对应地址4N(该中断向量所占4个字节单元的第一个字节
13、单元的地址)。 然后把由此地址开始的两个低字节单元的内容装入IP寄存器: IP (4N, 4N+1) 再把两个高字节单元的内容装入 CS 寄存器: CS (4N+2, 4N+3),这就是使程序转入中断类型码为N的中断服务程序的控制过程,如下面例1所示。 至于中断类型码N的来源,对于不同的中断类型(内部中断、外部中断),情况有所不同,详见后述。例13.1 若中断类型码为3,则由中断类型码取得中断服务入口地址的过程如图13.8所示。,图13.8 根据中断类型码取得中断服务程序入口地址,例13.2 中断类型码为20H,则中断服务程序的入口地址存放在中断向量表从0000:0080H开始的4个字节单元中
14、。若这4个字节单元的内容分别为: (0000:0080H)= 10H (0000:0081H)= 20H (0000:0082H)= 30H (0000:0083H)= 40H 试指出相应的中断服务程序的入口地址。 解: 中断服务程序的入口地址为 。,例13.3 中断类型码为17H,若中断服务程序的入口地址为2340H:7890H,试指出中断向量表中存放该中断向量的4个字节单元的地址及内容。 解: 由于中断类型码为17H,所以中断向量表中存放相应中断向量的4个字节单元的地址分别为0000:005CH、0000:005DH、0000:005EH、0000:005FH,4个字节单元的内容分别为 。
15、,13.2.3 外部中断,由外部的中断请求信号启动的中断,称为外部中断,也称硬件中断。 80x86 CPU为外部中断提供两条引线,即NMI和INTR,用来输入中断请求信号。 1. 非屏蔽中断 从NMI引脚进入的中断为非屏蔽中断,它不受中断允许标志IF的影响。 非屏蔽中断的类型码为2,因此,非屏蔽中断处理子程序的入口地址存放在08H、09H、0AH和0BH这4个字节单元中 。,2. 可屏蔽中断 一般外部设备请求的中断都是从CPU的INTR端引入的可屏蔽中断。 当CPU接收到一个可屏蔽中断请求时,如果中断允许标志IF为1,那么CPU就会在执行完当前指令后响应这一中断请求。下面以8086系统为例,具
16、体介绍一下可屏蔽中断的响应时序。,图13.9 8086的中断响应总线周期,T1 T2 T3 T4 TI TI TI T1 T2 T3 T4,第一个总线周期,第二个总线周期,三个空闲状态,中断类型码,CLK,_ INTA,AD7AD0,13.2.4 内部中断,内部中断也称软件中断。 它是由于CPU执行了INT n(含INT 3)、INTO指令,或者由于除法出错以及进行单步操作所引起的中断,主要包括INT n指令中断、断点中断、溢出中断、除法错中断以及单步中断。,(1) INT n 指令中断。 80x86系统提供了直接调用中断处理子程序的手段,这就是中断指令INT n。 指令中的中断类型码n告诉C
17、PU调用哪个中断处理子程序。 (2) 除法错中断(类型0) 在执行除法指令DIV 或IDIV 后,若所得的商超出了目标寄存器所能表示的范围,比如用数值0作除数,则CPU立即产生一个0型中断。,(3) 溢出中断(类型4) 若上一条指令执行的结果使溢出标志位OF置1,则紧接着执行INTO指令时,将引起类型为4的内部中断,CPU将转入溢出错误处理。 若OF=0时,则INTO指令执行空操作,即INTO指令不起作用。INTO指令通常安排在算术运算指令之后,以便在发生溢出时能及时处理。 典型情况如表13-1所示。,表 13-1,. . .,. . .,. . .,. . .,(4) 单步中断(类型1) 当
18、把CPU标志寄存器的TF位置为1以后,CPU便处于单步工作方式。 在单步工作方式下,CPU每执行完一条指令,就会自动产生一个1 型中断,进入1型中断处理程序。 此处理程序显示CPU内部各寄存器的内容并告知某些附带的信息。,(5) 断点中断 (类型3) 与单步中断类似,断点中断也是一种调试程序的手段,并且常常和单步中断结合使用。 对一个大的程序,不可能对整个程序全部用单步方式来调试,而只能先将程序中的某一错误确定在程序中的一小段中,再对这一小段程序用单步方式跟踪调试。 断点中断就是用来达到这个目的的。,在所有INT n形式的指令中,只有断点中断指令INT 3是一条单字节长的指令,其他中断指令都是
19、两字节指令。,图13.10 断点的设置,ADD AL, BL,JMP 201H,INC AL,CMP AL, 0FFH,JL 200H,不转移,转移,断点,1FCH,1FDH,1FEH,1FFH,200H,201H,202H,203H,204H,内部中断的特点是: (1) 中断类型码由CPU内部自动提供(含从INT n指令中自动提取),不需要执行中断响应总线周期(INTA总线周期)去读取中断类型码。 (2) 除单步中断外,所有内部中断都不可以用软件的方法来禁止(屏蔽)。单步中断可以通过软件将TF标志置1或清0来予以允许或禁止。 (3) 除单步中断外,所有内部中断的优先级都比外部中断高。,13.
20、2.5 中断响应和中断处理过程,1. 可屏蔽中断的响应和处理过程图13.11给出了可屏蔽中断从中断请求信号产生到中断服务程序结束并返回被中断程序的全过程。,图13.11 可屏蔽中断全过程,INTR_INTA,IP,CS,PSW(FR),中断类型码寄存器,CPU完成现行指令, 发出中断响应信号,Q 中断 请求,中断 屏蔽,接口发中断请求信号INTR,CPU读取中断类型码N,新的(IP) 新的(CS)旧的(IP) 旧的(CS) 旧的(PSW),被中断 的程序 . . . . .,STI . . .,IRET,中断服务程序 . . .,存储器,中断向量表,16位,4N 4N+2,清除IF和TF,转入
21、 中断服务 程序,返回被中 断的程序,开放中断 (可选),现行PSW、 CS、IP压栈,IRET指令使 旧的IP、CS、PSW 弹出堆栈,CPU,外设接口,取CS、 IP新值,2. 80x86 实模式中断响应和中断处理过程80x86实模式中断响应和处理流程如图13.12所示。,图13.12 80x86实模式中断响应和中断处理过程,80x86实模式中断优先级,结束当前指令,除法错,INTO,INT n?,NMI,INTR?,TF=1?,执行下一条指令,N,N,N,N,TF=1?,N,Y,Y,Y,Y,Y,内部自动形成中断类型码N,读中断类型码N,标志压入堆栈,令TEMPTF,清除IF和TF,CS和
22、IP压入堆栈,(4N,4N+1)IP (4N+2,4N+3)CS,执行中断处理程序,IP、CS出栈,标志寄存器出栈,返回被中断的主程序,有NMI?,TEMP=1?,Y,Y,N,N,执行IRET指令,判断与思考:若在主程序中已使IF=1(开中),则在响应中断请求并执行完中断服务程序返回主程序后,IF 标志位是否为1决定于在中断服务程序中是否执行了STI指令。,需要说明的是,在图13.12所示的中断响应和处理过程中,其中的步(含)是由处理器内部的中断系统硬件自动完成的,即无需程序员的直接控制和干预; 其后的中断处理过程则是通过执行中断服务程序(软件)来完成的。,单步运行方式时发生其他中断的处理过程
23、,单步运行方式时发生中断的处理过程(续),堆堆栈的情形:,13.3 可编程中断控制器8259A (8259A Programmable Interrupt Controller-PIC),Intel 8259A用于管理和控制80x86的外部中断请求,实现优先级判决,提供中断类型码,屏蔽中断输入等功能。使用单片8259A可以管理8级中断,采用级联方式,可扩充到64级(用9片8259A)。,.,13.3.1 8259A的引脚功能,封装形式 28脚双列直插(28pin DIP), DIP:Dual-In-line Package ,如图13.13所示。,片选信号(Chip Select)低电平有效,
24、来自地址译码器的输出只有 有效时,CPU才能对8259A进行读写操作。写信号,低电平有效,来自CPU的输出;当 有效且 有效时, 使8259A接受CPU送来的命令字。读信号,低电平有效,来自CPU的 输出;当 有效且 有效时, 使8259A将状态信息放到数据总路线上,供CPU检测。,D7 D0 :双向数据总线,接到系统数据总线的D7 D0 上,用来传送控制字、状态字和中断类型号。 IR7IR0 :中断请求信号,输入,来自外部接口电路。(单片时) INT:向CPU发出的中断请求信号。(单片时)。 INTA:中断响应信号,由此接收CPU发来的中断响应脉冲。,A0:地址输入信号,用于对8259A内部
25、寄存器的寻址。 CAS2 CAS0:级联线(CASCADE LINES),传送3位标识码,用于区分特定的从控制器。双向:对于主片为输出,对于从片为输入。:从片/允许缓冲器信号。双功能引脚: 作为输入时,8259A作为主片( 1) 8259A作为从片( 0)见P462图13.15 作为输出时,用来启动(允许)数据总线收发器(如8286)。*究竟是作为输入还是输出,取决于8259A是否工作于“缓冲方式”(即8259A是否通过一个“数据总线收发器”与系统总线相连)。详见后面ICW4的格式。,13.3.2 8259A的内部结构,8259A的内部逻辑结构如图13.14所示。,图13.14 8259A的内
26、部逻辑结构,CPU,AD7AD0,INTR,ISR,ICW1,OCW1 (IMR),ICW2,OCW2,ICW3,OCW3,ICW4,PR,IRR,D7D0,地址 译码,. . .,INT,A0,CAS0,CAS1,CAS2,. . .,IR7,IR0,8259A的编程结构,IRRInterrupt Request Register PR-Priority Resolver ISR-In-Service Register IMR-Interrupt Mask Register ICWs-Initialization Command Words OCWs-Operation Command Wo
27、rds 7个CPU可访问的寄存器,分两组: 初始化命令字ICW1 ICW4-系统初启时设定。 操作命令字OCW1OCW3系统运行时,由应用程序设定(实现对中断处理的动态管理和控制).The OCWs can be written into the 8259A anytime after initialization.(手册P6P7)。,7个寄存器的寻址问题:,规规定:A0,8259A的处理部件: 中断请求寄存器IRR8位寄存器控制逻辑作用:接受并锁存来自IR0IR7的中断请求信号。 中断服务寄存器ISR作用:保存当前正在处理的中断请求。 优先级裁决器PR作用:把新进入的中断请求和当前正在处理的
28、中断进行比较,以决定哪一个优先级更高。,处理过程: IR0IR7上出现某一中断请求信号-IRR对应位被置“1”-由IMR的相应位决定是否将其屏蔽(屏蔽位=1,不通过;屏蔽位=0,通过)-中断请求进PR-PR把新进入的中断请求和当前正在处理的中断进行优先级比较-若新进入的中断优先级高,该中断请求被送到CPU。 若CPU的IF=1,CPU完成当前指令后,响应中断,在 引脚上发出两个负脉冲 (执行两个中断响应总线周期,参见P463 图13.16)。,图13.9 8086的中断响应总线周期,T1 T2 T3 T4 TI TI TI T1 T2 T3 T4,第一个总线周期,第二个总线周期,三个空闲状态,
29、中断类型码,CLK,_ INTA,AD7AD0,8259A收到第一个负脉冲后: 使IRR锁存允许,不予接受IR0IR7上的中断请求信号;直到第二个负脉冲结束后,才又使IRR锁存禁止(输入输出透明)。 使ISR的相应位置“1”,以便为优先级裁决器以后的裁决提供依据。 清除IRR的相应位。 8259A收到第二个负脉冲后: 把中断类型码寄存器的内容(ICW2的内容)送到D7D0 如果ICW4的AEOI位为1,则在第二个 脉冲结束时,将ISR中被第一个 脉冲置“1”的位清除(自动结束);否则,要等到中断结束命令(EOI)发送后才能清除。,13.3.3 8259A的工作方式,1. 设置优先级的方式 (1
30、) 全嵌套方式(FULLY NESTED MODE) 也称固定优先级方式。在这种方式下,由IRi引入的中断请求具有固定的优先级IR0(最高)IR7(最低). This mode is entered after initialization unless another mode is programmed.,当一个中断请求被响应时,ISR中的对应位ISn被置“1”,8259A把中断类型码放到数据总线上,然后,进入中断服务程序。 一般情况下(除了“中断自动结束”方式外),在CPU发出中断结束命令(EOI)前,此对应位一直保持为“1”封锁同级或低级的中断响应,但并不禁止比本级优先级高的中断响应实
31、现中断“嵌套”。,(2) 特殊全嵌套方式(SPECIAL FULLY NESTED MODESFNM) 在处理某一级中断时,不但允许优先级更高的中断请求进入,也允许同级的中断请求进入。 用于主从结构的8259系统中,将主片设置为“特殊全嵌套方式”。 通过ICW4的“SFNM”位可以设置此种方式。(参见p464),(3) 优先级自动循环方式(AUTOMATIC ROTATION) 优先级是循环变化的(不希望有固定的优先级差别)一个设备的中断服务完成后,其优先级自动降为最低,而将最高优先级赋给原来比它低一级的中断请求。 开始时,优先级队列还是:IR0-IR7 ,若此时出现了IR0请求,响应IR0并
32、处理完成后,队列变为: IR1,IR2,IR3,IR4 ,IR5 ,IR6 ,IR7,IR0。 若又出现了IR4请求,处理完IR4后,队列变为: _ 系统中是否采用“自动循环优先级”,由操作命令字OCW2来设定。( 参见p466),(4)优先级特殊循环方式(SPECIFIC ROTATION) 与“优先级自动循环方式”相比,只有一点不同,即可以设置开始的最低优先级。 例如,设定IR4为最低优先级,那么IR5就是最高优先级,其余各级按循环方法类推。,2. 屏蔽中断源的方式(中断屏蔽方式) 普通屏蔽方式 通过对中断屏蔽寄存器(IMR)的设定,实现对相应位为“1”的中断请求的屏蔽。 可通过OCW1使
33、IMR的一位或几位置“1”。 *特殊屏蔽方式(SPECIAL MASK MODE) 作用:P462 实现:,3. 中断结束方式(END OF INTERRUPTEOI) (1)中断自动结束方式(AUTOMATICAEOI方式) 在第二个 后沿,即完成把对应的ISR位复位。 注意:AEOI方式是在中断响应后,而不是在中断处理程序结束后将ISR位清0。 这样,在中断处理过程中,8259A中就没有“正在处理”的标识。此时,若有中断请求出现,且IF1,则无论其优先级如何(比本级高、低或相同),都将得到响应。 尤其是当某一中断请求信号被CPU响应后,如不及时撤销,就会再次被响应“二次中断”。,所以,AE
34、OI方式适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。 通过ICW4可以设置AEOI方式(AEOI=1)。,(2)一般(常规)中断结束方式 适合于全嵌套方式。 实现:在中断服务程序结束时,向8259A发常规中断结束命令(OCW2:EOI=1,SL=0,R=0) 例:MOV AL,20H; OCW2=20HOUT 20H,AL; 端口地址=20H(偶地址) 在全嵌套方式下,ISR中最高优先级的置“1”位,正对应于当前正在处理的中断,将其清“0”,就完成了当前正在处理中断的结束操作。,IR0,IR7,(3)特殊中断结束方式(SPECIFIC EOISEOI) 在非全嵌套方式下,无
35、固定的优先级序列(使用设置优先权命令或特殊屏蔽方式),此时,根据ISR的内容就无法确定刚刚所响应(处理)的中断。 这种情况下,就不能用上述的EOI方式进行中断结束处理,而必须用特殊的中断结束命令SEOI用OCW2:EOI=1,SL=1,R=0,L2L0. 由L2L0指定清除ISR中的哪一位。,4. 中断触发方式 电平触发方式:由IRi上的有效电平来触发“中断请求触发器”。边沿触发方式:由IRi上由低电平向高电平的跳变来触发“中断请求触发器”。由ICW1的LTIM位可以设置中断触发方式。,5. 连接系统总线的方式 缓冲方式(ICW4的BUF=1) 8259A通过总线驱动器(如8286)和数据总线
36、相连。 在缓冲方式下,8259A的 作为输出( 有效),此时,由ICW4的M/S位来定义(标识)本8259A是主片还是从片。 非缓冲方式(ICW4的BUF=0) 即8259A直接与数据总线相连 在“非缓冲方式下”,8259A的 作为输入( 有效)此时,由 端来标识本8259A是主片还是从片。 在“非缓冲方式下”,ICW4的BUF0,M/S位无意义。,“中断查询”方式 特点:既有中断的特点,又有查询(Polling)的特点。 外设仍然向8259A发中断请求信号,要求CPU服务。 CPU的IF=0,不响应外部的中断请求(对CPU的中断请求信号不起作用) 此时,CPU需要用软件查询方法来确认中断源,
37、从而实现对设备的服务 先向8259A发查询命令(poll command) OCW3:,P,紧接着执行一条读指令(IN指令),读出专门的“中断状态字”:当8259A收到P=1的查询命令后,在下一个 信号将使ISR的相应位置“1”,就像收到了 一样,并把上述的“中断状态字”送到数据总线上,由CPU读入AL。,13.3.5 8259A的控制字及编程使用,8259A的控制寄存器可分为两组,一组是初始化命令字ICWICW4,另一组是操作命令字OCWOCW3。 每片8259A具有两个内部端口地址,一个偶地址端口(A0 = 0),一个奇地址端口(A0 = 1),其他高位地址码由用户定义,用来产生8259A
38、的片选信号。,1. 初始化命令字,初始化命令字用来对8259A初始化,包括ICWICW4 4个初始化命令字。 (1) ICW1 ICW1 使用偶地址端口(A0 = 0),其中D4 位为特征位(标志位),此时该位固定为1,表示当前写入的是ICW (OCW1 也用偶地址端口写入,但OCW1 的D4 位为0)。 ICW 的格式如下:,初始化命令字 ICW1格式,解释:IC4 规定初始化时是否要写入ICW4。IC4 = 0表示不写入ICW4,IC4 = 1表示写入ICW4。 SNGL规定8259A的用法。SNGL=0表示为级联方式,同时要写入ICW3 ;SNGL=1表示为单片方式,不要写入ICW3。
39、ADI为配合8085工作时选用CALL指令字节数而设,80x86不用这一位。 LTIM规定中断检测方式。LTIM=0表示边沿触发,LTIM=1表示电平触发。 A5A7 在8085微处理器中用这几位作中断向量字,80x86不用这三位。,(2) ICW ICW2 使用奇地址端口(A0 = 1),紧跟在ICW之后设置。ICW 的格式如下:,A15/T7,A14/T6,A13/T5,A12/T4,A11/T3,A10,A9,A8,1,ICW2,A0 D7 D6 D5 D4 D3 D2 D1 D0,初始化命令字 ICW2格式,对于80x86系统,ICW的D7D3位用来确定中断类型码N的高5位T7T3位,
40、低3位D2D0未定义; 对于非80x86系统,ICW的8位全部用来作中断向量地址的高8位A15A8。在80x86系统中,8259A在中断响应周期的第二个总线周期内,从数据总线上向CPU送出8位中断类型码N的值。 其中高5位D7D3即T7T3,由ICW在初始化编程时设定;低3位D2D0则由8259A根据中断进入的引脚序号而自动填入,从IR0IR7依次为000111。,例: 若将 ICW2 初始化为28H , 则在中断响应总线周期从数据总线上向CPU送出的对应于 IR的中断类型码为2AH,对应于 IR的中断类型码为 等。,(3) ICW ICW 只在级联方式中使用,端口地址为奇地址,其格式如下:,
41、初始化命令字 ICW3格式,对于主片8259A,ICW 表示哪些IRi 引脚接有从片8259A。接有从片8259A的相应S位置1,否则置0。例如,若IR2、IR6 上接有从片8259A,且其他IR引脚未接有从片8259A,则ICW 为01000100。,对于从片8259A,用ICW 中的ID2ID0 表示本8259A接在主片8259A的哪一根IR引脚上。与IR0IR7 分别对应的ID码为000111。例如,若从片8259A接在主片8259A的IR6 上,则从片8259A的ICW 应设定为:ID2=1,ID1=1,ID0=0,(4) ICW4 在80x86系统中必须设置ICW4,端口地址为奇地址
42、,其格式如下:,初始化命令字 ICW4格式,其中,PM规定是哪种系统。PM = 0表示是8080/8085系统,PM = 1表示是80x86系统。 AEOI表示中断结束方式。AEOI=0为普通EOI方式,AEOI=1表示自动EOI方式。 BUF表示本8259A工作于缓冲方式还是非缓冲方式。BUF=1为缓冲方式,BUF=0为非缓冲方式。,在缓冲方式下,SP/EN引脚作为输出能使信号给总线收发器。此时,由M/S位来定义本8259A是主片还是从片。所谓8259A工作于缓冲方式,是指在多片8259A级联的大系统中,8259A通过总线收发器(驱动器)和数据总线相连。 M/S位用来在缓冲方式下规定本825
43、9A是主片还是从片。M/S=0表示是从片,M/S=1表示是主片。 在非缓冲方式(BUF=0)下,M/S位无效。 SFNM表示中断嵌套方式。SFNM=0表示全嵌套方式,SFNM=1表示特殊全嵌套方式。,8259A的初始化流程,8259A的初始化命令字(ICW)是在加电之后由CPU按特定的顺序写入的。也就是说,各初始化命令字的识别一方面依赖于地址信号A0和初始化命令字中的特定标识位,另一方面也与写入的先后次序有关。8259A的初始化顺序及相应的寻址标志如图13.17所示。, 在初始化操作过程的开头,总要依次写入命令字ICW和ICW。 只有当ICW中的SNGL位=0,才需写入ICW。对于主片和从片均
44、需写入ICW,而且它们的格式不同。 只有当ICW中的IC4=1时,才需写入ICW4。对于80x86系统,ICW4总是需要设置的。,在系统中,单片8259A与80x86 CPU配置时,初始化要写入的预置命令字是:ICW、ICW、ICW4 。而级联系统要写入预置命令字是:ICW、ICW、ICW和ICW4。初始化过程结束,8259A进入所设置的状态后,才能写入操作命令字(OCW)。,2. 操作命令字,在8259A工作期间,可通过设置操作命令字来修改或控制8259A的工作方式。 需要说明的是,与初始化命令字ICWICW4需要按规定的顺序进行设置不同,操作命令字OCW1OCW3 的设置没有规定其先后顺序
45、,使用时可根据需要灵活选择不同的操作命令字写入到8259A中。 当然,也需注意奇、偶端口地址及有关标识位的规定。,(1) OCW1 OCW1 为中断屏蔽操作命令字,用来实现中断屏蔽功能,要求写入8259A的奇地址端口(A0=1)。 OCW1 的内容被直接置入中断屏蔽寄存器IMR中,其格式如下:,操作命令字OCW1,其中M0M7 分别对应8259A的IR0IR7。 当OCW1 中的Mi 位为1时,则相应的IRi 的中断请求就被屏蔽。例如, 若通过OCW1向中断屏蔽寄存器写入代码11110000,将导致中断输入IR7IR4被屏蔽掉,而IR3IR0撤销屏蔽。,(2) OCW2 OCW2 用来设置优先
46、级循环方式和中断结束方式。占用偶地址端口(A0=0)。OCW2 的格式如下:,操作命令字OCW2,其中,DD= 00是OCW2 的标识位。 R表示中断优先级是否按循环方式设置。R1表示采用循环方式,R0表示采用非循环方式。 SL表示OCW2 中的L2、L1、L0 是否有效。SL1表示有效,SL0表示无效。 EOI为中断结束命令位。EOI1使当前ISR寄存器的相应位清0。当ICW4 中的AEOI为0时,ISR中的相应置1位就要由该命令位来清除。,L2、L1、L0 在SL=1时配合R、SL、EOI的设置,用来确定一个中断优先级的编码。 L2、L1、L0 的8种编码000111分别与IR0IR7 相
47、对应。 由R、SL、EOI三位可以定义多种不同的中断结束命令或优先级循环方式。 综合起来,R、SL、EOI的设置与其代表的意义如表13-2所示。,表13-2 R、SL、EOI的设置及意义,(3) OCW3 OCW3 的端口为偶地址(A0=0),其格式如下:,操作命令字OCW3,其中D D = 01是OCW 的特征位。 ESMM是特殊屏蔽方式允许位,SMM是特殊屏蔽方式位。当ESMM为0时,SMM的值不起用。 当ESMM为1时,由SMM位决定是否工作在特殊屏蔽方式。 当ESMM=1,SMM=0时,表示8259A不是工作在特殊屏蔽方式。 当ESMM=SMM=1时,表示8259A工作在特殊屏蔽方式。,P是查询命令(Poll Command)标识位。 当P=1时,表示向8259A发查询命令,查询当前是否有中断请求,以及在有中断请求时,当前正在请求的中断最高优先级是哪一级。 查询的中断状态字的格式如下:,中断状态字,8259A初始化编程举例,