1、第七章 微型计算机中断系统,7-1 概述,一、中断概念,当CPU正常运行程序时,由于微处理器内部事件或外设请求,引起CPU中断正在运行的程序,转去执行请求中断的外设(或内部事件)的中断服务子程序,中断服务程序执行完毕后,再返回被中止的程序,这一过程称为中断。,1. 中断源,2. 中断响应,3. 中断向量表,4. 中断优先级,5. 中断屏蔽,二、中断分类,8086/8088有一个强有力的中断系统,可以处理256种不同的中断。 8086/8088系统上的中断源如图7-1所示。,以产生中断的方法来分类,256种中断可以分为两大类:外部中断和内部中断。,外部中断也称为硬件中断,是由外部的硬件产生的,硬
2、件中断又分成不可屏蔽中断和可屏蔽中断。下面分别加以说明。,1. 外部中断,8086/8088 CPU有两个外部中断请求线:不可屏蔽中断请求线NMI和可屏蔽中断请求线INTR。,(1)由NMI引脚引入的不可屏蔽中断请求,采用边沿触发,上升沿之后维持两个时钟周期高电平有效。对于不可屏蔽中断用户是不能用软件来屏蔽的,一旦有不可屏蔽中断请求,CPU必须予以响应。不可屏蔽中断请求的中断类型号为2,即中断处理程序的入口地址在0段的0008H000BH的4个单元中。,(2)由INTR引脚引入的外设提出的可屏蔽中断请求,采用电平触发,高电平有效,INTR信号的高电平必须维持到CPU响应中断才结束。可屏蔽中断是
3、用户可以通过软件设置来屏蔽的外部中断,即使外部设备有中断请求,CPU可以不予响应。,在8086 CPU系统中,外设的中断请求信号接入可编程中断控制器8259A的IRi端,而8259A的中断输出INT连到CPU的INTR引脚上。8259A中设有中断屏蔽寄存器,它的8位对应控制8个外设,通过设置这个寄存器的某位为0或1,可以允许或禁止某个外设的中断请求。一块8259A可管理8个中断,当外设超过8个时,可以使用多个8259A进行级联,扩大到64级中断。外设与8259A的连接是由用户来设计的,硬件连线决定了中断类型号和中断优先级次序。,2. 内部中断,内部中断又称为软件中断。软件中断通常有三种情况引起
4、:,由中断指令INT引起的中断; 由CPU的某些运算错误引起的中断; 由调试程序debug设置的中断。,内部中断只要由上面三种情况引起了,是不可屏蔽的!,(1)由中断指令INT引起的中断,CPU执行一条INT n指令后立即产生中断,并且调用系统中相应的中断处理程序去完成中断功能,指令中的n指出了中断类型号。,(2)由CPU的某些运算错误引起的中断,CPU在运行程序时,会发现一些运算中出现的错误,此时CPU就会中断,让用户去处理这些错误。主要有:,除法错中断:除法错中断类型号为0,在除法运算中,若除数为0或商超过了寄存器所能表达的范围,就产生一个类型号为0的中断,转去类型号为0的中断处理。,溢出
5、中断:溢出中断类型号为4,专用指令为INTO。若OF=1执行中断指令INTO;若OF=0,不执行中断指令。通常INTO放 在加、减法运算指令的后面。,(3)由调试程序debug设置的中断,在调试程序时,为了检查中间结果或寻找程序中的错误,在程序中可设置断点或进行单步跟踪,调试程序debug有此功能它也是由中断来实现的。,单步中断:单步是每次只执行一条指令,然后屏幕显示当前各寄存器和有关存储单元的内容,以及下条要执行的指令。这样逐条运行指令,来跟踪程序的流程,以检查出程序中的错误。单步中断是在标志位TF=1时,每条指令执行后,CPU自动产生中断类型号为1的中断。,断点中断:中断类型号为3。用de
6、bug调试程序时,可用G命令设置断点。当CPU执行到断点时便产生中断,同时显示当前各寄存器和有关存储单元的内容,以及下条要执行的指令,供用户检查。设置断点实际上是把一条断点指令INT 3插入到断点设置处。,7-2 中断处理过程,可屏蔽中断处理的过程一般分成几步:中断请求;中断响应;保护现场;转入中断服务子程序;恢复现场和中断返回。其流程如图7-2所示。,图7-2 可屏蔽中断处理流程图,一、CPU响应中断过程,CPU响应中断要有三个条件: 外设提出中断申请 本中断位未被屏蔽 中断允许,当中断接口电路中的中断屏蔽触发器未被屏蔽时,外设可通过中断接口发出中断申请。外设向CPU发出中断请求的时间是随机
7、的,而CPU在每条指令的最后一个机器周期的最后一个T状态去采样中断请求输入线INTR,当CPU在INTR引脚上接收到一个有效的中断请求信号,而CPU内部的中断允许触发器是开放的,则在当前指令执行完后CPU响应中断。,CPU响应中断后,对外设接口发出两个中断响应信号 ,第一个 信号通知外设,CPU已响应申请的中断请求,准备发送中断类型号;当外设收到第二个 以后,立即往数据线上给CPU送中断类型号。CPU在响应外部中断,并转入相应中断服务子程序的过程中,自动依次做以下工作:,(1)从数据总线上读取中断类型号,将其存入内部暂存器。,(2)将标志寄存器PSW的值入栈。,(3)将PSW中的中断允许标志I
8、F和单步标志TF清0,以屏蔽外部其它中断请求,和避免CPU以单步方式执行中断处理子程序。,(4)保护断点,将当前指令下面一条指令的段地址CS和指令指针IP的值入栈,使中断处理完毕后,能正确返回到主程序继续执行。,(5)根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。,(6)中断处理程序结束后,从堆栈中依次弹出IP、CS和PSW,然后返回主程序断点处,继续执行原来的程序。,二、中断向量表,寻找中断源可以用查询中断及矢量中断两种方法。,1. 中断向量表,中断向量表又称中断服务程序入口地址表。8086/8088系统允许处理256种类型的中断,对应的中断类型号为0FFH在存储器的00
9、000H003FFH,占用1K字节空间,用作存放中断向量。每个类型号占4个字节,高2个字节存放中断入口地址的段地址,低2个字节存放段内偏移地址,如图7-4所示。,图7-4 8086/8088中断向量表,例7-3 某中断的中断类型号为68H,图7-5图示了中断操作过程: (1)取中断类型号68H; (2)计算中断向量地址68H4=1A0H; (3)取中断入口地址的偏移地址送入IP, IP=2050H,段地址送入CS, CS=A000H; (4)转向中断服务程序; (5)中断返回到INT 68H指令的下一条指令。,图7-5 中断操作过程例子,2. 中断向量(中断入口地址)的设置,IBM PC对25
10、6种中断类型已进行了地址分配,附录D中给出了中断向量地址分配表。其中类型04为专用中断,中断入口地址已由系统定义,用户不能修改;类型5类型31为系统使用中断,也不允许用户修改;其余的中断类型号原则上可以由用户定义,但实际上,有些中断类型目前已有用途,例 INT 21H为系统功能调用,中断类型20H3FH为DOS中断调用。,供用户使用的中断类型号,它可以由用户定义为软中断,由INT n指令引用;也可以通过INTR端直接接入,或通过中断控制器8259A引入可屏蔽硬件中断。使用时用户要自己将中断服务程序入口地址置入相应的中断向量表中。有两种方法可为中断类型号n设置中断向量,即将中断服务程序的入口地址
11、置入中断类型号n所对应的中断向量表中。一种方法用指令来设置,另一种方法利用DOS功能调用来设置。,例7-5 用指令来设置中断服务程序的入口地址到中断类型号n所对应的中断向量表中。MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSET INTRAD;置入偏移地址 MOV ES:WORD PTRBX,AX MOV AX,SEG INTRAD ;置入段地址 MOV ES:WORD PTRBX+2,AXSTI INTRAD: ;类型号n的中断服务子程序IRET,设置中断向量:把由AL中指定中断类型号的中断向量DS:DX放置在中断向量表中。则操作如下:预置:AL=中断类型
12、号DS:DX=中断服务程序入口地址AH=25H执行:INT 21H,取中断向量:把由AL中指定中断类型号的中断向量,从中断向量表中取到ES:BX中。则操作如下:预置:AL=中断类型号AH=35H执行:INT 21H返回:ES:BX=中断服务程序入口地址,例7-6 利用DOS功能调用设置中断向量和取中断向量。MOV AL,N ;取中断向量到ES:BX中MOV AH,35HINT 21HPUSH ES ;存原中断向量PUSH BXPUSH DSMOV AX,SEG INTRAD ;设置新的中断向量MOV DS,AXMOV DX,OFFSET INTRADMOV AL,NMOV AH,25HINT
13、21HPOP DS,POP DX ;恢复原中断向量POP DSMOV AL,NMOV AH,25HINT 21HRET INTRAD: ;类型号n的中断服务子程序IRET,3. 中断类型号的获取,(1)对于除法出错、单步中断、不可屏蔽中断NMI、断点中断和溢出中断,CPU分别自动提供中断类型号04。,(2)对于用户自己确定的软件中断INT n,中断类型号就是n。,(3)对外部可屏蔽中断INTR,可用硬件电路(例如通用并行接口芯片8212)设计产生中断类型号。,(4)对外部可屏蔽中断INTR,可以用可编程中断控制器8259A获得中断类型号。,如图7-1所示,8个中断请求信号接到8259A。当外设
14、申请中断时,8259A响应优先级高的中断源,将中断请求信号送到CPU的INTR端。8259A收到CPU发出的第二个中断响应信号 时,将对应中断源的中断类型号送给CPU,CPU获取中断类型号后,自动转入相应的中断服务子程序。,IBM PC机内装有一片8259A,它的中断入口分配如表7-1所示:,8259A中有中断屏蔽寄存器,它的端口地址为21H,中断屏蔽寄存器的位70对应IR7IR0。可以通过设置屏蔽寄存器的各位为0或1去控制每一个中断源的中断允许或屏蔽,此位为0,允许中断;此位为1,禁止中断。,在中断服务程序的结束处,应发出中断结束命令(EOI)给中断命令寄存器,中断命令寄存器的端口地址为20
15、H。,综合上面的介绍,我们对中断有了一定的了解,下面将有关中断的主程序编写方法归纳如下:,1. 主程序中的初始化,(1)设置中断向量。,(2)设置8259A的中断屏蔽寄存器的中断屏蔽位。,(3)设置CPU中断允许位标志IF(开中断)。,2. 硬件(外设接口)和CPU自动完成,(1)外设接口向CPU INTR端发中断请求。,(2)当前指令执行完后,CPU发两个中断响应信号 给外设接口。,(3)CPU读取中断类型号n。,(4)CPU自动将当前PSW、CS、IP内容入栈保护。,(5)清除IF、TF,禁止外部中断和单步中断。,(6)从中断向量表中取(4n)地址中内容IP;取(4n+2)地址中内容CS。
16、,(7)转向中断服务子程序。,这里一定要注意三点: 对重复前缀的指令(如REP MOVSB)作为一条指令处理。执行一次重复前缀和串指令即可响应中断,而不是把串操作全部执行完。,遇到开中断指令STI和中断返回指令IRET,要在这两条指令执行完后,再执行一条指令才能响应中断。,CPU自动清除IF和TF位,使CPU进入中断服务子程序后,不允许再产生新的中断,如果在中断服务子程序中还允许外部中断进入,则在中断服务子程序中必须再开中断。,三、中断服务子程序,中断服务子程序的功能各有不同,但所有的中断服务子程序都有相同的结构形式。,(1)程序开始必须保护中断时的现场,可以通过一系列PUSH指令将CPU各寄
17、存器的值入栈保护。,(2)若允许中断嵌套,则用STI指令来设置开中断,使中断允许标志IF=1。,(3)执行中断处理程序。,(4)用CLI指令来设置关中断,使中断允许标志IF=0,禁止其他中断请求进入。,(5)给中断命令寄存器送中断结束命令EOI,使当前正在处理的中断请求标志位被清除,否则同级中断或低级中断的请求仍 会被屏蔽掉。,(6)恢复中断时的现场,通过一系列POP指令将CPU各寄存器的值恢复。,(7)用中断返回指令IRET返回主程序,此时堆栈中保存的断点值和标志值分别装入IP、CS和PSW。,四、中断响应时序,CPU对可屏蔽中断请求的响应过程要执行两个连续的中断响应 总线周期,第一个中断响
18、应总线周期,CPU通知外设准备响应中断,外设应该准备好中断类型号,第二个中断响应总线周期,CPU接收外设接口发来的中断类型号。图7-6给出了8086/8088中断响应时序。,7-3 中断优先级和中断嵌套,在实际系统中,经常有多个中断源同时向CPU请求中断,CPU响应哪个中断源的中断请求,由中断优先级排队决定,CPU先响应优先级高的中断请求。当CPU正在处理中断时,有更高优先级别的中断请求,并且IF=1,CPU能响应更高级别的中断请求,而屏蔽掉低级的中断请求,形成了中断嵌套,或称为多重中断。,一、中断优先级,对于可屏蔽中断的优先级设定有三种方法:,1. 软件查询中断优先级,软件查询中断方式,是将
19、各个外设的中断请求信号通过或门相或后,送到CPU的INTR端,同时把几个外设的中断请求状态位组成一个端口,赋以端口号。任一外设有中断请求,CPU响应中断后进入中断处理子程序,用软件读取端口内容,逐位查询端口的每位状态,查到哪个外设有中断请求,就转入哪个外设的中断服务程序。查询程序的次序,决定了外设优先级别的高低,先测试的中断源优先级别最高。当然在软件查询程序中也可用移位或屏蔽法来改变端口各位的测试次序,但查询时间较长,对中断源较多的情况不合适。,2. 硬件查询优先方式菊花链法菊花链法是采用硬件查询优先的方式,它是在每个外设的对应接口上连接一个逻辑电路构成一个链,控制了中断响应信号的通路,图7-
20、8给出了它的原理图。,图7-8 菊花链优先查询法,越靠近CPU的外设 接口,优先级越高!,3. 矢量中断优先级矢量中断优先级的设置是采用中断优先级控制器。图7-9 给出了它的典型设计原理框图。外设可以有8个中断请求IR0IR7送入中断请求寄存器, 中断屏蔽寄存器可由用户设置屏蔽某几位的中断请求。中断优 先级管理逻辑电路判别出最高优先级中断请求,将其中断级转 换成3位码,送到中断类型寄存器的低3位及当前中断服务寄存 器。此后,中断优先级控制器向CPU发出中断请求信号,CPU 开中断时,CPU发出中断响应信号,如上所述开始一个中断处 理过程。中断处理结束引起中断服务寄存器对应为清0,级别 较低的中
21、断请求才能得到响应。,图7-9 矢量中断 优先级控制器 的原理图,二、中断嵌套IBM PC机没有规定中断嵌套的深度,但使用中受到堆 栈容量的限制,必须要有足够的堆栈单元来保存多重中断的断 点及寄存器。8259A在完全嵌套优先级工作方式下,中断优先 次序为IR0、IR1IR7,图7-10图示了中断嵌套序列的例子。,图7-10 中断嵌套序列,7-4 可编程中断控制器8259A,一、功能和引脚,8259A是8086/8088系列的可编程中断控制器,它的主要功能是:,(1)具有8级优先级控制,通过级联可以扩展到64级优先级;,(2)每一级中断可由程序单独屏蔽或允许;,(3)可提供中断类型号传送给CPU
22、;,(4)可以通过编程选择多种不同工作方式。,8259A是28个引脚的双列直插式芯片,其引脚图和内部结构框图如图7-11所示。,图7-11 8259A芯片引脚图,二、内部结构,1. 数据总线缓冲器数据总线缓冲器是8位双向三态缓冲器,是8259A与系统数据总线接口,通常连接到低8位数据总线D7D0。CPU编程控制字写入8259A、8259A的状态信息读出以及中断响应时8259A送出的中断类型号,都经过它传送。,2. 读写控制电路读写控制电路接收CPU送来的读/写信号 、 ,片选信号 及端口选择信号A0。高位地址译码后送 作片选信号。A0连地址总线A0或A1,用来选择8259A的两个I/O端口,一
23、个为奇地址,一个为偶地址。读写操作由这4个信号控制来实现的,使8259A接收CPU送来的初始化命令字(ICW)和操作命令字(OCW),或将内部状态信息送给CPU。 、 、 、A0的控制作用见表7-2。表7-2中D4、D3代表控制字的第4位和第3位。,表7-2 8259A的读写功能,8088系统中数据线为8位,8259A数据线为8位,所以地址总线的A0连8259A的A0,可以分配给8259A两个端口地址,一个奇地址,一个偶地址,从而满足8259A的编程要求。,8086系统中,接口电路与CPU的连接问题!,8086系统中接口芯片8259A的译码电路,3. 级联缓冲/比较器,8259A与系统总线相连
24、有两种方式:,(1)缓冲方式:在多片8259A级联的系统中,8259A通过总线驱动器和数据总线相连,这就是缓冲方式。在缓冲方式下, 8259A的 端与总线驱动器允许端相连,控制总线驱动器启动,作为输出端当 =0,8259A控制数据从8259A送到CPU,当 =1时,控制数据从CPU送到8259A。,(2)非缓冲方式:单片8259A或少量8259A级联时,可以将8259A直接与数据总线相连,称为非缓冲方式。非缓冲方式下,8259A的 端作输入端,控制8259A作为主片还是从片, =1, 表示此8259A为主片, =0,表示此8259A为从片。单片8259A时, 接高电平。,由初始化命令字ICW4
25、来设置缓冲方式或非缓冲方式!,4. 中断请求寄存器IRR中断请求寄存器是一个8位寄存器,存放外部输入的中断请求信号IR7IR0。当某个IR端有中断请求时,IRR相应的某位置1。可以允许8个中断请求信号同时进入,此时IRR寄存器被置成全1。当中断请求被响应时,IRR的相应位复位。,5. 中断屏蔽寄存器IMR中断屏蔽寄存器是一个8位寄存器,用来存放对各级中断请求的屏蔽信息。当用软件编程使IMR寄存器中某一位置0时,允许IRR寄存器中相应位的中断请求进入中断优先级判别器。若IMR中某位为1,则此位中断请求被屏蔽。各个中断屏蔽位是独立的,屏蔽了优先级高的中断,不影响其他优先级低的中断允许。,6. 优先
26、级判别器PR优先级判别器对保存在IRR寄存器中的中断请求进行优先级识别,送出最高优先级的中断请求到中断服务寄存器ISR中去。当出现多重中断时,PR判定是否允许所出现的中断去打断正在处理的中断,让优先级更高的中断优先处理。,7. 中断服务寄存器ISR中断服务寄存器是一个8位寄存器,保存正在处理中的中断请求信号,某个IR端的中断请求被CPU响应后,当CPU发出第一个 信号时,ISR寄存器中的相应位置1,一直保持到该级中断处理结束为止。允许多重中断时,ISR多位同时被置成1。,8. 控制电路控制电路是8259A的内部控制器。根据中断请求寄存器IRR的置位情况和中断屏蔽寄存器IMR设置的情况,通过优先
27、级判别器PR判定优先级,向8259A内部及其他部件发出控制信号。并向CPU发出中断请求信号INT和接收CPU的中断响应信号 ,使中断服务寄存器ISR相应位置1,并使中断请求寄存器IRR相应位置0。当CPU第二个 信号到来时,控制8259A送出中断类型号,使CPU转入中断服务子程序。如果方式控制字ICW4的中断自动结束位为1 则第二个 脉冲结束时,将8259A中断服务寄存器ISR的相应位清0。,三、8259A的中断管理方式8259A有多种工作方式,这些工作方式 都是通过编程方法来设置的,使用十分灵活。首先我们来看一下8259A的编程结构,然 后再介绍8259A的中断工作方式。,1. 8259A的
28、编程结构,8259A的中断优先级的管理采用多种 方式,优先级既可以固定设置,又可以循 环设置,给用户极大的方便。中断优先级 设定后,允许中断嵌套,通常允许高级中 断打断低级中断,不允许低级或同级中断 打断高级中断。特殊情况下与中断结束方 式有关,也可以低级中断打断高级中断, 称为重复中断。,2. 优先级设置方式,(1)完全嵌套方式,若8259A初始化后没有设置其他优先级方式,就自动进入完全嵌套方式。在这种方式下,中断优先级分配固定级别07级,IR0具有最高优先级,IR7优先级最低。也可用初始化命令字ICW4中SFNM=0,将8259A置成完全嵌套优先级方式。,(2)特殊全嵌套工作方式,在级联时
29、,还有一种特殊全嵌套工作方 式,它与完全嵌套工作方式基本相同。区别 在于当处理某级中断时,有同级中断请求进 入,8259A也会响应,从而实现了对同级中断 请求的特殊嵌套。,(3)优先级自动循环方式,在优先级自动循环方式中,优先级别可以改变。初始优先级次序规定为IR0、IR1、IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求,其他依次类推。例当前IR3中断请求,则处理IR3,处理完IR3后,IR4变成最高优先级,优先级依次为IR4、IR5、IR6、IR2、IR3。所以,优先级自动循环方式适合用在多个中断源优先级相等的场合。,(4)优先级特殊循环方式
30、,优先级特殊循环方式和优先级自动循环方式相比,不同之处在于优先级特殊循环方式中,初始时最低优先级由程序规定,最高先级就确定了。例如初始时指定IR1为最低优先级,则IR2为最高优先级,其他依次类推。而优先级自动循环方式初始时最高优先级一定是IR0。用操作命令字OCW2中R、SL=11就可以设置优先级特殊循环方式,根据结束方式不同,通常用特殊EOI循环方式。,3. 中断结束方式,在固定优先级方式中,对中断结束的处理有自动AEOI结束方式和非自动结束方式,非自动结束方式又分普通EOI结束方式和特殊SEOI结束方式。,(1)普通EOI结束方式,在完全嵌套工作方式下,任何一级中断处理结束返回上一级程序前
31、,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令后,自动将ISR寄存器中级别最高的置1位清成0(此位对应当前正在处理的中断)。EOI结束命令字必须放在返回指令IRET前,没有EOI结束命令,ISR寄存器中对应位仍为1,继续屏蔽同级或低级的中断请求。若EOI结束命令字放在中断服务程序中其他位置,会引起同级或低级中断在本级未处理完前进入,容易产生错误。,(2)特殊EOI结束方式,在非完全嵌套工作方式下,中断服务寄存器无法确定哪一级中断为最后响应和处理的,这时要采用特殊SEOI结束方式。CPU向8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别也传给8259A。此
32、时,8259A将ISR寄存器中指定级别的对应位清0,它在任何情况下均可使用。,(3)自动EOI结束方式,在自动AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置1,但在CPU进入中断响应周期,发第二个 脉冲后,8259A自动将ISR寄存器中对应位清0。此时,尽管对某个外设正在进行中断服务,但对8259A来说,ISR寄存器中没有指示,好象已结束了中断处理一样。这种方式虽然简单,但因为ISR寄存器中没有标志,低级中断申请时,可以打断高级中断,产生重复嵌套,嵌套深度也无法控制,容易产生错误,使用时要特别小心。,4. 循环优先级的循环方法,在循环优先级方式中,与中断结束方式有关,有三种循环方式
33、。,(1)普通EOI循环方式,在主程序或中断服务程序中设置操作命令字,当任何一级中断被处理完后,使CPU给8259A回送普通EOI循环命令, 8259A收到循环命令后,将ISR寄存器中,最高优先级的IRi置1位清0,并赋给它最低优先级,将最高优先级赋给它的下一级IRi+1,其它依次类推。,例7-10 某中断系统IR0为最高优先级,IR7为最低优先级。有IR2、IR5两个中断请求。设置为普通EOI循环方式,要求给出IR2及IR5中断处理完后中断优先级的变化情况。,表7-3 普通EOI循环方式,特殊EOI循环方式即指定最低级循环方式,最低优先级由编程确定,最高优先级也相应而定,例指定IR5为最低优
34、先级,则IR6就为最高优先级,其他各级依次类推。这样在当前中断服务程序结束前,使CPU给8259A回送特殊EOI结束命令,8259A收到此命令字后,指定最低优先级,并重新排列优先级级别。,(2)特殊EOI循环方式,例7-11 某一时刻8259A中IR2,IR6有中断嵌套服务。在IR2中断服务程序中安排了最低优先级赋给IR3指令,指令执行后,中断优先级变化情况如表7-4。,表7-4 特殊EOI循环方式,在自动EOI循环方式中,任何一级中断被响应后,中断响应总线周期中第二个 信号的后沿自动将ISR寄存器中相应位清0,并立即改变各级中断的优先级别,改变方式与普通EOI循环方式相同。使用这种方式要小心
35、,防止重复嵌套产生。,(3)自动EOI循环方式,5. 中断屏蔽方式,CPU由CLI指令禁止所有可屏蔽中断进入,中断优先级管理也可以对中断请求单独屏蔽,通过对中断屏蔽寄存器的操作可以实现对某几位的屏蔽。有两种屏蔽方式:,(1)普通屏蔽方式,将中断屏蔽寄存器IMR中某一位或某几位置1,即可将对应位的中断请求屏蔽掉。普通屏蔽方式的设置通过设置操作命令字OCW1来实现。,例7-12 屏蔽第2、3、5、6位进入的中断请求,假设8259A的端口地址为20H,21H。MOV AL,01101100BOUT 21H,AL对OCW1的设置可以在主程序中,也可放在中断服务程序中,具体根据中断处理要求而定。,(2)
36、特殊屏蔽方式,6. 中断请求引入方式,中断请求引入有三种方式:,(1)边沿触发方式,(2)电平触发方式,(3)中断查询方式,CPU执行的查询软件中必须有查询命令,才能实现查询功能。CPU通过操作命令字OCW3的设置来发出查询命令的。若外设发出中断请求,8259A的中断服务寄存器相应位置1,CPU就可以在查询命令之后的下一个读操作,读取中断服务寄存器中的优先级。所以,CPU所执行的查询程序应包括以下过程:,系统关中断;,用OUT指令使CPU向8259A端口(偶地址端口)送OCW3命令字;,若外设已发出过中断请求,8259A在当前中断服务寄存器中使对应位置1,且立即组成查询字。,CPU用IN指令从
37、端口(偶地址)读取8259A的查询字。,OCW3命令字构成的查询命令格式为:,其中D2位为1,使OCW3具有查询性质。8259A得到查询命令后,立即组成查询字,等待CPU读取。CPU从8259A中读取的查询字格式为:,四、8259A的编程方法,对8259A的编程有两类命令字:初始化命令字ICW和操作命令字OCW。系统复位后,初始化程序对8259A置入初始化 命令字。初始化后可通过发出操作命令字OCW来定义8259A的操作方式,实现对8259A的状态、中断方式和优先级管理的控制。初始化命令字只发一次,操作命令字允许重置,以动态改变8259A的操作与控制方式。,1. 初始化命令字,初始化命令字完成
38、的功能:,设定中断请求信号触发方式;,设定8259A工作方式,单片或级联;,设定8259A中断类型号基值,即IR0对应的中断类型号;,设定优先级设置方式;,设定中断处理结束时的结束操作方式。,(1)ICW1芯片控制初始化命令字,例7-13 IBM PC/XT系统初始化中,设CW1=13H,表示8259A为单片方式,上升沿触发,要求设置ICW4。指令为:MOV AL,13HOUT 20H,AL,(2)ICW2设置中断类型号初始化命令字,8259A中IR0端对应的中断类型号为中断类型号基值,它是可以被8整除的正整数ICW2用来设置这个中断类型号基值,由此 提供外部中断的中断类型号。ICW2低3位为
39、0,高5位由用户设定。当8259A收到CPU发来的第二个 信号,它向CPU发送中断类型号,其中高5位ICW2的高5位,低3位根据IR0IR7中断响应哪级中断来确定。,(3)ICW3标识主片/从片初始化命令字,ICW3命令字在级联时(即ICW1中SNGL=0)才设置。,8259A主片格式:,8259A从片格式:,对于从片8259A来说,ID2ID0=000111表示从片接在主片的哪个中断请求输入端上,例ID2DI0=010,表示从片接在主片8259A的IR2端。,例7-15 某8259A主片的IR3、IR7端连接两个8259A从片,编写初始化命令字。 主片:MOV AL,10001000BOUT
40、 21H,AL ;主片端口地址20H,21H 从片1:MOV AL,00000011BOUT 61H,AL ;从片1端口地址60H,61H 从片2:MOV AL,00000111BOUT 71H,AL ;从片2端口地址70H,71H,(4)ICW4方式控制初始化命令字,ICW1中IC4为1时,要求预置ICW4命令字,对8086/8088系统必须预置ICW4。 格式:,初始化命令字的设置有固定次序,端口地址也有明确规定,并不会因为只有两个端口输出指令而混淆,设置次序如图7-13所示。初始化命令字必须从ICW1开始设置,依下顺序进行设置,并分别根据ICW1中的SNGL位和IC4位决定是否设置ICW
41、3和ICW4。级联时要设置ICW3,并且从片与主片的ICW3的设置不同。,在初始化命令字设置完成前,对A0=1的输出指令不可能是操作命令字。而初始化命令序列设置完成后,在操作命令字的设置中,不可能出现第二次初始化,因此不会混淆。,图7-13 初始化命令字设置次序,2. 操作命令字,操作命令字决定中断屏蔽,中断优先级次序,中断结束方式等。中断管理较复杂,包括有:完全嵌套优先方式、特殊嵌套优先方式、自动循环优先方式、特殊循环优先方式、特殊屏蔽方式、查询方式等。它是由操作命令字的设置来实现的,设置时,次序上没有严格要求,但端口地址有严格规定,OCW1必须写入奇地址端口,OCW2和OCW3必须写入偶地
42、址端口。,(1)OCW1中断屏蔽操作命令字,例7-18 设某中断系统要求屏蔽IR3,IR5,8259A编程指令为:MOV AL,00101000BOUT 21H,AL,(2)OCW2优先级循环方式和中断结束方式操作字,(3)OCW3特殊屏蔽方式和查询方式操作字,OCW3功能有三个:设定特殊屏蔽方式,设置对8259A寄存器的读出及设置中断查询工作方式。 格式:,例7-19 P=1时,优先级次序为IR3、IR4、IR1、IR2。当前在IR4和IR1引脚上有中断请求。CPU再执行一条输入指令,得到查询字1 100。说明当前级别最高的中断请求为IR4,CPU转入IR4中断处理程序。,五、8259A的中
43、断级联一片8259A管理8级中断,当申请中断的外设多于8级时, 可以将8259A级联使用,图714给出了两级级联的例子,第一 级为8259A主片,第二级为8259A从片,主片可接18片8259A 从片,这样最多可管理64级中断源。级联使用时,主片8259A的 端接VCC,从片的端接地。若系统中连接数据总线驱动器,主片的 端与数据总线驱动器的输出允许端 相连。从片的INT脚接 主片的IRi 端,主片的IRi 若未接从片,可直接连中断源。主片 的CAS2CAS0作为输出端,从片的CAS2CAS0作为输入端, 两者相连。在级联系统中,主片和从片都要设置初始化命令字进行 初始化,设置主片初始化命令字与
44、无级联单片8259A初始化时 不同处有几点: (1)级联时,ICW1中SNGL=0,单片时SNGL=1; (2)级联时,要求设置ICW3,若某个IRi 引脚上连有从片,,主片ICW3的对应位设为1,未连从片的对应位设为0。单片不要 设置ICW3。 (3)级联时,可设置为特殊全嵌套工作方式,此时,ICW4中 SFNM=1,通常应定义在特殊完全嵌套工作方式。设置从片初始化命令字时,应注意以下两点: (1)从片的ICW1中,SNGL=0 (2)从片必须设置ICW3,由ICW3中三个最低有效位ID2ID0 的组合来标记此从片连到主片的哪个IRi 引脚上。在完全嵌套工作方式下,8259A在级联使用时,某
45、从片 的IRi 端收到一个或多个中断请求信号,经从片优先权判别器 判优后,确定本片当前最高优先级。从片发出一个中断请求信 号INT到主片,再经过主片优先权判别器判优后,确定当前最 高优先级。通过主片INT输出端发中断请求送到CPU,若IF=1 CPU响应中断回送两个 信号。主片收到第一个 信号后,置中断服务寄存器ISR 相应位为“1”,清中断请求IRR相应位为“0”。检测ICW3决定,中断请求是否来自从片,若是,则将从片的级联地址从CAS2 CAS0从三条线上输出到所有8259A从片,只有级联地址与CAS2 CAS0相同的从片才能选通。从片收到第一个 信号后, 将从片中ISR寄存器中相应位置“1”,将IRR寄存器中相应位清0。第二个 信号到达后,选中的从片将中断类型耗号 送到数据总线上,以后操作与单片8259A工作情况相同。,