1、102第七章 中断接口技术内容提要: 1中断的基本概念; 28086 系统的中断源、矢量中断; 38259A 的功能、结构特点、中断响应过程、编程; 48259 A 的应用举例; 58259A 编程实验。 学习目标 : 1掌握 8086 内部中断的特点; 2掌握中断的基本概念,掌握对外部中断响应的区别; 3深刻理解中断类型码、中断矢量和中断向量表的概念,以及如何对中断服务程序寻址; 4了解 8259A 的编程结构,理解 8259A 工作方式、有关命令和初始化编程及其在 PC 机中应用。 难点: 8259A 工作方式、命令的理解。 学时: 6 7.1. 概述一中断的基本概念 中断:是指 CPU
2、在正常运行程序时,由于内部或外部事件引起 CPU 暂时中止执行现行程序,转去执行请求 CPU 为其服务的那个外设或事件的服务程序,待该服务程序执行完后又返回到被中止的程序这样一个过程。 中断源:能发出中断申请的外设或引起中断的原因。 中断源种类:I/O 设备、数据通道、实时时钟、故障源、软件中断。 1. 为什么要用中断? 中断技术的优点: (1)并行操作:指 CPU 和多个外设并行操作;分时操作:指 CPU 可分时执行多个用户程序和多道作业; (2)实现实时处理; (3)故障处理。;(4)基本功能调用:在 PC 机中,通过软件中断可实现 DOS 功能调用和基本 BIOS 调用。 2. 中断类型
3、 (1) 硬中断:也称为外部中断,它可分为两种: 一种是由中断电路发生的中断请求信号在 CPU 的 INTR 端引起的中断,也称可屏蔽中断。可屏蔽中断:凡是微处理器内部能够屏蔽(IF=0)的中断。 另一种是 CPU 的 NMI 端引起的中断,也称不可屏蔽中断。 不可屏蔽中断:凡是微处理器内部不能够屏蔽(不受 IF 状态影响)的中断。 (2)软件中断: 也称内部中断,是指程序中使用 INT 指令引起的中断。 3. 中断系统的功能 中断系统是指实现中断而设置的各种硬件与软件,包括中断控制逻辑及相应管理中断的指令。中断系统应具有以下功能: (1)实现中断请求的检测、中断响应、中断服务与返回; (2)
4、能实现中断优先级排队; (3)能实现中断嵌套。 103二中断的处理过程 大致可分为:中断请求、中断响应(关中断、保护断点、查找中断源等) 、保护现场、开中断、返回五步。 (1)中断请求 CPU 外部必须设置一个中断请求触发器锁存中断请求信号,以便 CPU 在现行指令周期结束时采样,还可设置中断屏蔽触发器。见下图。 (2)中断响应 中断响应的条件: 有中断请求; 外设中断没有被屏蔽; CPU 允许中断; 当前指令执行完。不可屏蔽中断申请:CPU 执行完当前指令后就响应; CPU 响应中断要自动完成下列几步操作: 发中断响应信号 ,同时内部关中断(IF0) ,以禁止其它可屏蔽中断请求; 把 F 以
5、及程序断点处的 CS、IP 内容压栈,以便中断处理完后能正确地返回主程序; 中断服务程序入口地址段地址CS ,偏移地址 IP 。 (3)中断处理程序员需在中断服务程序中,做以下事: 关中断 ; 保护断点 ; 识别中断源:查询中断,向量中断; 保护现场; 执行中断服务程序; 恢复现场; 开中断; 返回。 中断返回指令使得 CPU 自动地将堆栈中保存的 F 和程序断点处的 CS、IP 值弹到 F、CS 、IP中,使 CPU 返回主程序断点处继续执行主程序,同时中断返回指令使得 IF 自动恢复响应中断前的开中断状态。 三中断优先级当系统中有多个中断源时,需要考虑优先权问题,即确定 CPU 首先为哪个
6、中断源服务,以及服务的次序。优先权:根据中断源要求的轻重缓急,排好中断处理的优先次序,即优先级。104当 CPU 正在处理中断时,也能响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,即所谓多重中断的问题。确定中断源的优先权一般采用以下方法:1软件查询优先方式:是最简单的中断优先处理方式,8 个外设中断请求组合起来,作为一个端口,赋以设备号,接口电路见 P265 图 7-4。把各个外设的中断请求信号相“或”后,作为 INT 信号,这样任何一外设有中断请求都可以向 CPU 发出 INT 信号。CPU 响应中断后,把中断寄存器的状态作为一个外设信息读入 CPU,逐位检测其状态,若检测出某位
7、有中断则转入响应的中断服务程序入口。优点:不需要有判断优先级的硬件排队电路。缺点:在中断源较多的情况下,由询问跳到相应的中断服务程序的入口时间长。2硬件优先权排队电路:实现硬件查询的优先级中断链电路接口电路见 P266 图 7-5。来自 CPU 的中断响应信号从 A 设备开始串行地往下传送:当 A 设备有“中断请求”时,则“中断响应”信号在门 A2 处被封锁,不再下传,使后面的设备得不到 CPU 的“中断请求”信号。同时 A 设备的“数据允许”线 EN 变为有效,允许 A 设备使用数据总线,将其中断标志放上数据总线进入 CPU。当 A 设备无“中断请求”时, “中断响应”信号可以通过 A2 门
8、传给下一个设备 B。3中断优先级编码电路:用硬件编码器和比较器组成的中断优先级排队电路见教材 P267 图 7-6 所示。四中断的嵌套1中断嵌套的定义2中断嵌套与单级中断的区别:(1) 加如屏蔽本级和较低级别中断请求环节;(2) 在中断服务前要开放中断;(3) 中断服务结束之后,为了使恢复现场过程不受到任何中断请求的干扰,必须执行关中断指令,然后才能恢复现场;(4) 恢复现场后,应该执行开中断指令,以便允许任何其他的等待着的中断请求有可能被 CPU 响应。只有在执行完开中断指令后面的一条指令后,中断才被开放。7.2. 8086/8088 中断系统一 . 8086 系统的中断源 8086CPU
9、总共允许有 256 级中断,按产生的原因,系统有如下中断源: 二外部中断1不可屏蔽中断 NMI 边沿触发,正跳沿有效,此类中断不受中断允许标志位的限制,也不能用软件进行屏蔽。当NMI 端有一个上升沿触发信号时,CPU 就会在结束当前指令后,自动从中断向量表中找到类型 2105中断服务程序的入口地址,并转去执行。NMI 是一种比 INTR 优先级高的中断请求。 2可屏蔽中断 INTR 电平触发,高电平有效,该信号若为高电平,表示 I/O 设备向 CPU 发出中断申请,若IF=1,CPU 允许中断,就会在结束当前指令后响应该外设的中断请求,进入可屏蔽中断的处理程序。 三内部中断内部中断是通过软件指
10、令或软件陷阱而调用的非屏蔽中断(指不受 IF 状态影响) ,这是由程序运行的状态和指令代码执行后自动启动而不是由外界中断请求来调用的。 内部中断按其性质又可分为软件陷阱和软件中断。软件陷阱是指:在某些指令执行期间 FR 的标志位满足设定的条件或 CPU 的状态符合某种情况从而触发 CPU 内部逻辑去启动所需要的中断服务子程序,如除法出错中断和单步中断。软件中断是指通过指令来调用中断服务子程序。 类型:8086 的内部中断有溢出中断、除法错中断、断点中断、软中断及单步中断。 1除法溢出中断 当除数为 0 或除法结果商超出规定存放范围时,此时将自动产生类型号为 0 的内部中断。注意点:没有对应的中
11、断指令。 2溢出中断 溢出中断是通过 INTO 中断指令实现的。该指令跟在有符号数的算术运算指令以后,当在程序执行过程中,遇到 INTO 指令,且此时溢出标志 OF=1 时,则产生一个中断类型为 4 的中断,并转入溢出中断处理。 例:MOV BL,126 MOV AL,5 ADD AL,BL 执行到此指令后只能将 OF 置 1 INTO 执行到此产生中断 3软中断 是系统以软中断指令 INT n 方式实现的,n 为中断类型号,5n255,04 中断类型号作为专用中断的类型号,不允许用户修改; 53FH 为系统备用中断,一般不允许用户改作其它用途,并且其中许多中断已被系统开发使用,如 10H1F
12、H 为 ROMBIOS,21H 为 DOS 功能调用,40HFFH 为用户可用的中断,用户可用 INT n 使用,也可作为可屏蔽中断的类型号。 4单步中断 为了用户调试上机方便,当 TF=1 时,则每执行一条指令后,可以产生一个类型号为 1 的中断。在中断处理程序的控制下,可以给出有关寄存器的内容或状态标志位的状态,以便了解程序的执行情况。 5断点中断 断点中断也是提供给用户的一种程序调试手段。在相应的程序语句后设置断点,就可以分段落调试程序,从而避免单步调试的冗长和繁琐。 设置断点,实际上就是在用户程序的指定点(即对应的某一个存储单元,该单元一定是某条指令的第一个字节存储单元)用单字节的中断
13、指令 INT 3 来代替程序中原有指令的第一个字节代码(操作码) ,同时把原有指令第一个字节操作码保存起来。 当执行到断点位置时,就会执行中断指令 INT 3,进入类型码为 3 的中断服务子程序,显示一系列寄存器值和一些重要信息,供用户判断。 断点中断返回前,中断服务程序还负责恢复设置断点时原程序中被 INT 3 指令所替换的原来指令的第一个字节的操作码。然后修改断点地址,返回主程序再从被恢复的那条指令继续执行。6内部中断的特点:(1) 中断类型码或者包含在指令中,或者是预先规定的;106(2) 不执行 INTA 总线周期;(3) 除单步中断外,任何内部中断都无法禁止;(4) 除单步中断外,任
14、何内部中断的优先级都比任何外部中断的优先级高。7中断优先级见 P272 表 7-1 所示。四 中断矢量表 定义:将所有的中断处理程序的入口地址都集中在一起,构成一个中断矢量表。 特点:每个入口地址占 4 个字节,高地址的 2 个字节单元存放中断处理程序的段地址,低地址的2 个字节单元存放中断处理程序的段内偏移地址。 8086/8088 的中断向量表结构如教材 P272 的图 7-10。例:设某中断源的类型码为 13H,该中断源的中断服务程序的入口地址为 FF00H:2200H,试画出中断矢量表。 解:n=13 ,则 4n=13H*4=4CH 中断矢量表如下:当中断类型码为 n 时,则中断向量表
15、指针为 4n,则有:五中断类型号的获取(两种情况) 对于系统专用中断,系统将自动提供 04 中断类型号, (溢出中断需在算术运算指令之后执行 INT O 指令,断点中断需执行 INT 3 指令)从而能自动转到中断处理程序中去; 对于可屏蔽中断 INTR,则需外接接口电路。目前主要是利用 8259A 中断控制器来产生外设的中断类型号。 六 8086 中断处理流程 1 CPU 在获得中断类型号后,先自动将标志寄存器入栈,并自动将 IF 和 TF 清零; 2然后自动将当前代码段寄存器 CS 和指令指针寄存器 IP 内容入栈,并根据中断类型号 n 从中断矢量表中取出中断处理程序的段地址送入 CS; 再
16、从中断矢量表中取中断处理程序的偏移地址值送入 IP,从而实现向中断处理程序的转移; 3在中断处理程序完成后,用中断返回指令 IRET 恢复断点,从栈中弹回断点的偏移量和段地址值到 IP 和 CS 中,并恢复 FR 的内容,从而实现了向被中断程序的返回。 注意点:在处理程序的开始用开中断指令打开中断,以便实现中断嵌套。 7.3.可编程中断控制器 8259A 主要功能: 具有 8 级中断优先级控制,通过级连可扩展至 64 级中断优先级控制; 每一级中断都可以屏蔽或允许; 在中断响应总线周期,8259A 可提供相应的中断类型码; 有多种中断管理方式,可通过编程选择。 一 8259A 的内部结构与功能
17、1071 8259A 的内部结构由上图可见 8259A 有 8 个基本组成部分:(1)中断请求寄存器 IRR 8 位,每一位对应一个 I/O 设备,用来记录发生中断请求的外设。当某一外设(I/O 设备)发出中断请求信号 IRQ 时,对应位被置“1” 。简言之:用来存放要请求服务的所有中断请求信号。 (2)中断服务寄存器 ISR 8 位,用来存放正在被服务,包括尚未服务完毕而中途被别的中断打断了的所有中断级。 (3)优先权判决电路 PR 用来识别各中断请求信号的优先级别。当多个中断请求信号同时产生时,由判优电路判定哪一个中断请求具有最高优先权,若有中断正在被服务,则还需与 ISR 的当前中断服务
18、优先级相比较,以决定是否将 8259A 的中断申请线 INT 上升为高电平。 (4)中断屏蔽寄存器 IMR 8 位,对 IRR 起屏蔽作用,屏蔽位仅对对应的中断请求起作用。 (5)控制逻辑 用于向 8259A 内部其它部件发控制信号,外部向 CPU 发 INT 信号,接收 CPU 发来的 信号,控制 8259A 进入中断服务状态。 控制逻辑是 8259A 全部功能的核心,包括一组方式控制字寄存器和一组操作命令字寄存器,以及相关的控制电路。 (6)数据总线缓冲器 8 位双向三态缓冲器,是 8259A 与 CPU 之间数据接口。当 CPU 对 8259A 进行读操作时,数据总线缓冲器用来传输从 8
19、259A 内部读至 CPU 的数据/ 状态信息和中断类型码,写操作时由 CPU向 8259A 内部写入控制命令字。 (7)读/写控制逻辑 用于控制对 8259A 的读、写操作。 控制信号有: 、 、 、A0 共同控制,完成规定的操作。 8259A 芯片内可写的寄存器有:各种命令寄存器,可读的寄存器有: IRR、ISR 、IMR 等状态寄存器。 (8)级连缓冲器 多片 8259A 可级连使用,最多可以组成 64 级中断优先级控制,此时一片 8259A 作主片,另外 18 片作从片,主从片的 CAS0CAS2 并接在一起,作为级连总线。 在中断响应过程中,主片的 CAS0CAS2 为输出线,从片的
20、 CAS0CAS2 为输入线。在第一个 负脉冲结束时,主片把被响应的中断请求的从片编码送入 CAS0CAS2 级连总线。从片接收后,将主片送来的编码与自己的编码相比较,若相同,表明从片被选中,则在第二个中断响应总线周期把中断类型码送至 D7D0,供 CPU 读取。 见下图。10828259A 的中断优先级管理方式(1)完全嵌套方式:8259A 最常用和最基本的一种工作方式,按固定优先级别来管理中断的方式。(2)自动循环方式:适用于系统中多个中断源的优先级相等的情况。中断源的优先级别将随着中断响应过程的结束而改变的中断优先权管理方式。(3)特殊循环方式:用于中断源的优先权需要任意改变的情况。通过
21、在主程序或中断服务程序中发出特殊循环方式操作命令来指定某个中断源的优先级别为最低级,而其余中断源的优先级别也随着循环变化的中断优先管理方式。(4)特殊屏蔽方式:可使优先级低的中断也能得到响应。(5) 查询排序方法:用软件查询的方式来响应与 8259A 相连接的 8 级中断请求,此时 8259A 的 INT 引脚可不连接到 CPU 的 INTR 引脚,或者 CPU 正在处于关中断,所以 CPU 必须不能响应从 8259A 来的中断请求。CPU 若要了解有无中断请求,必须先用操作命令字发查询命令到 8259A,然后再用输入指令读取 IRR 寄存器的状态,并识别当前有无中断请求及优先级最高的中断请求
22、。38259A 中断结束方式:中断请求被 CPU 响应时,8259A 中的中断服务寄存器 ISR 中的对应的位被置“1” ,表示CPU 正在执行 ISX 为 1 的中断服务程序,要求在中断服务程序中或末尾通过适当的手段将正在执行的 ISX 位清“0” 。有两种清 “0”的方法:在中断服务程序结束之前向 8259A 发出 EOI 命令;在第二个 响应信号的后沿之后由 8259A 自动清除。(1)EOI 命令方式在中断服务程序末尾向 8259A 发出中断结束命令,清除 ISR 中的相关位,表示中断服务程序已经结束。普通 EOI 命令:自动清除 ISR 中所有已经置位的优先级最高的那一位,适用于完全
23、嵌套方式的中断结束,因为此时正在服务的中断源必定是优先级最高的。特殊 EOI 命令:适用于不工作在完全嵌套方式的中断结束,因为此时 ISR 中的优先级最高的那一位不一定就是正在服务的中断级别,因而必须采用特殊 EOI 命令。109(2)自动 EOI 方式采用此方式时,在第二个 响应信号的后沿由 8259A 自动执行普通 EOI 操作,复位 ISR 中已经置位的优先级最高的位。4. 8259A 的芯片引脚 见下图。 (1) :片选信号,输入,低电平有效,当 =0 时,8259A 被选中。 (2) 、 :读、写命令信号,输入。 D7D0 0 1 0 CPU 写命令控制字到 8259A 0 0 1
24、CPU 从 8259A 读状态字/ 数据/中断类型码 (3)D7D0:8 位双向三态数据总线,传送命令控制字、状态字和中断类型码和数据。 (4)IR7IR0:8 根中断请求输入线。 (5)INT:中断请求输出线。 (6) :CPU 发给 8259A 的中断响应信号,输入,低电平有效。 (7)A0:片内地址选择输入线,8259A 有两个 I/O 端口地址。 (8)CAS0CAS2:级连线,8259A 单片使用时无效。 采用级连方式时,作为主片的 8259A,它们是输出线;作为从片的 8259A,它们是输入线。 (9) / :级连/允许缓冲信号,双向,低电平有效。 在缓冲方式中,该引脚为输出线,控
25、制数据总线缓冲器的接收或发送,作 用,级联时主从片由 ICW4 的 M/S 位确定;当 8259A 工作于非缓冲方式时,该引脚为输入线 ,当 =1 的是主片, =0 的是从片。 (10)INT :中断请求信号,输出,高电平有效。 (11)IR0IR7:外设中断请求输入端,高电平有效。从 IR0IR7 上输入的中断请求信号被命名为 IRQ0IRQ7。 (12)Vcc、GND:+5V 电源和地线。 5、8259A 的中断响应过程(顺序) 1. 当中断请求线(IR0IR7)上有一条或若干条变为高电平,则使 IRR 的相应的位置 1; 2. 当 IRR 的某一位或若干位被置 1 后,若 IMR 中相应
26、的位为 1,则屏蔽该中断请求,若 IMR中相应位为 0,则中断请求送 PR; 3. PR 把接到的中断请求的最高优先级与 ISR 中在服务中断级比较,若前者级别高于后者,或CPU 不在服务中,则置 INT 为高电平,否则 INT 低电平; 4. CPU 采样到 INT 为高后,响应中断进入连续的两个可屏蔽中断响应周期; 5. 8259A 接到第一个 负脉冲后,将对应的 ISR 位置位,而相应的 IRR 被复位; 6. 8259A 接到第二个 负脉冲后(第二个中断响应周期) ,在该脉冲期间,8259A 向 CPU110发出中断类型码。 7. 若 8259A 处于 AEOI(自动中断结束)方式,则
27、第二个 负脉冲结束时,相应的 ISR 位被复位。否则(工作在非自动中断结束方式)要等到 CPU 向 8259A 送内含中断结束(EOI)命令的 OCW2 后,相应的 ISR 位才被复位。 至此,CPU 根据中断类型码,从中断矢量表中获取对应的中断服务程序入口地址进入中断服务。 二 8259A 的初始化命令字及其编程在 8259A 开始正常工作之前,必须用初始化命令字建立起 8259A 操作的初始状态。 8259A 的初始化是通过 CPU 对 8259A 送 4 个方式控制字 ICW1、ICW2、ICW3、ICW4 以及3 个操作命令字 OCW1、OCW2 和 OCW3。 由于 8259A 只占
28、用两个 I/O 端口地址,但要写入四个方式控制字和三个操作命令字,因而其各寄存器的读写是 I/O 地址和特征位及顺序配合完成的:写入方式控制字必须按照 ICW1ICW4的顺序进行。 1. 初始化命令字:有 ICW1ICW4 四个。 ICW1 写入条件: =0、A0=0、特征位的 D4=1。 各位作用: D0:D0=1,要写 ICW4;D0=0,不需要写 ICW4,对于 8086CPU,要写 ICW4; D1:D1=1,单片方式; D1=0,级连方式; D3:D3=1,中断请求输入线 IR0IR7 为高电平有效的电平触发方式;D3=0,中断请求输入线 IR0IR7 为上升沿有效的边沿触发方式;
29、D2、D5D7:8086CPU 系统无意义,可全写“0 ”。 ICW2 写入条件:跟在 ICW1 之后, =0、A0=1。 各位作用: D7D3:规定中断类型码的高五位(T7T3) ; D2D0:无意义,可全写 0。 注意点:中断类型码的低 3 位由 IR0IR7 的下标编码确定。 ICW3 写入条件:跟在 ICW2 之后, =0、A0=1 且 ICW1 的 D1=0,使用在级连方式。 主 8259A ICW3 各位作用:若某个 IR 上接有 8259A,则对应的位写“1” ,否则写“0” 。 从 8259A ICW3 各位作用:D2D1D0:表示接入主 8259A 的 IR 端的编码; D7
30、D3:无意义。 注意点:主片和从片的 ICW3 必须不同。 ICW4 写入条件:跟在 ICW2 之后(若无 ICW3)或者跟在 ICW3 之后(若有 ICW3) ,特征位D7D5 均为 0, =0、A0=1 且 ICW1 的 D0=1。 各位作用: D4:D4=1,特殊完全嵌套方式,一般作为级联时主片的方式,工作在该方式时与工作在一般完全嵌套方式仅一点不同:在中断处理过程中,对优先级相等的同级中断也给予响应,能实现同级中断嵌套; D4=0,一般完全嵌套方式,一般作为级联时从片的方式,或单片使用时的方式; D3:D3=1,缓冲方式,是指 8259A 和 DB 之间需加一缓冲器(提高 DB 带负载
31、能力) ,此时 111/ 作为输出线 ,用以锁存或开启缓冲器; D3=0,非缓冲方式, / 作为主从片选择 。 D2:D2=1,在 D3=1 时(缓冲方式) ,主片; D2=0,在 D3=1 时(缓冲方式) ,从片。 在 D3=0 时,D2 无意义。 D1:D1=1,自动中断结束方式(AEOI ) ; D1=0:非自动中断结束方式。 D0:D0=1,8259A 用于 80X86CPU 系统; D0=0,8259A 用于非 80X86CPU 系统。 ICW1ICW4 写入 8259A 后,IR0IR7 优先级固定不变,优先级由高到低的顺序依次是:IR0、IR1、IR2、IR7,清零 ISR、IM
32、R,处于普通屏蔽方式,对 A0=0 的端口地址执行读操作时,读取的是 IRR 的状态。 2. 操作命令字 有 OCW1、OCW2、OCW3 三个,可随时动态写入,没有顺序,需写什么就写什么。 OCW1(A0=1) 用于实现中断屏蔽,也称屏蔽操作字,各位分别对应于 IR0IR7。被写入 8259A 中断屏蔽寄存器 IMR 中。 各位作用:为 1,屏蔽对应的中断请求; 为 0,不屏蔽对应的中断请求。 OCW2(A0=0) 用于控制中断结束、优先权循环等。 写入条件:A0=0 并且特征位 D4D3=00。 各位作用: D7:D7=1,中断优先顺序是循环轮换的,工作在循环优先级; D7=0,中断优先顺
33、序是固定不变的,工作在固定优先级。 D6:D6=1,D2D0 位将指明一个中断级; D6=0,D2D0 位无意义。 D5:D5=1,执行中断结束操作, (用于非自动中断结束方式)用作中断结束命令 EOI, 8259A 接到中断结束命令后,将 ISR 中对应的或指定的置 1 位清 0; D5=0,不执行中断结束操作。 D2D0:(D6=1 才有意义)指明结束哪一位的中断或设置哪一位优先级为最低。 OCW2 有 8 种组合方式,各有不同作用,如下表: OCW3 用来控制 8259A 的中断屏蔽和读取寄存器的状态。 硬件条件:A0=0 且特征位 D4D3=01,D7=0。 112各位作用: D4D3
34、:01,OCW3 的标志位; D2D1D0:名称分别是 P、RR 和 RIS,组合功能如下: D6D5:名称分别是 ESMW、SMM ,组合功能如下: 说明: 对 8259A A0=1 的端口地址执行读操作,可读取 IMR 状态(随机可读) ; 对 8259A A0=0 的端口地址执行读操作,可读取 IRR 状态或 ISR 状态(先写 ICW3,后读) 。 在读 IRR 状态或 ISR 状态前,必须输出对应的 OCW3,但只要读操作状态操作与前一次相符,则不必在读 IRR 或读 ISR 状态前输出 OCW3; 8259A 完成了初始化以后,自动处于读 IRR 状态; 8259A 为查询中断提供
35、了查询命令(OCW3 中的 D2=1 时,下一个 CPU 读指令为查询命令),使用查询命令前,CPU 首先必须关中断。一旦 CPU 发出查询命令,8259A 把 IN 指令的 脉冲当作响应信号,如有中断请求,就使 ISR 相应位置 1,并将下列查询字送到 DB 上,供 CPU 从 A0=0 的端口读取。 查询字各位的内容: D7:D7=1,表示 8259A 有中断请求,D7=0 ,则无中断请求; D2D1D0:请求中断服务的最高优先级的 IRQ 编码(在 D7=1 时,才有意义) ; D6D3:无意义。 所谓特殊屏蔽方式,即除了被 IMR 屏蔽的中断源外,8259A 对任何级别的中断请求都能响
36、应,即使对某些比正在处理的中断级别低的中断请求也能响应。 3.应用举例 例 1 教材 P289 例 1。例 2 教材 P290 例 2。例 3 如下图所示为 8259A 与系统总线的连接,图中 IR0IR7 与 8 个中断源相连接,单片使用。地址总线的 A2 和 A0 没有用上,故为部分译码法,地址为 00C0H00C7H(有重区) ,仅取00C0H 和 00C2H 作编程用。113初始化程序如下: START: MOV DX,00C0H ;A0=0,8259A 地址送 DXMOV AL,13H ;ICW1 为 13H OUT DX,AL MOV DX,00C2H ;A0=1,8259A 地址
37、送 DX MOV AL,48H ;ICW2 为 48H,中断类型码 OUT DX,AL MOV AL,03H ;ICW4,非缓冲方式,自动 EOI,一般完全嵌套 OUT DX,AL MOV AL,0E0H ;OCW1,屏蔽 IR5,IR6,IR7 OUT DX,AL 例 2 IBM PC/XT 启动时,首先执行 BIOS 中的系统初始化程序,其中根据实际使用情况对 8259A 进行编程,有关部分程序如下: MOV AL,13H ;ICW1 OUT 20H,AL MOV AL,8 ;ICW2 OUT 21H,AL MOV AL,9 OUT 21H,AL MOV AL,0FFH ;OCW1 OUT
38、 21H,AL程序中对 8259A 写入的 ICW1=13H=00010011B,表明外部中断请求信号为上升沿有效,单片8259A 工作,写入的 ICW2 是中断向量,现为 8,实际上 8 个中断源各自填入 D2D 0 三位,形成08H0FH 八个向量。ICW49H00001001B,指定了系统中的 CPU 为 8086,中断过程不自动结束,应写入一个含 EOI 命令的 OCW2 结束,数据线上有缓冲器,但取一般中断嵌套方式。最后送入的 OCW1=0FFH ,屏蔽所有硬中断,因为系统尚未初始化完毕,不能接受任何中断。 本章小结本章主要介绍了有关中断的基本知识中断的概念、中断源、中断处理过程、中断 优先级和中断嵌套。对 8086 的中断系 统以及典型的可编程中断控制器 8259A 的结构、功能做了详细的分析,114最后分析了 8259A 的应用实例。