




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.中断源
引起程序中断的事件称为中断源。中断源有外部中断和内部中断,内部中断由程序预先安排的中断指令(INTn)引起,或由于CPU运算中产生的某些错误(如除法出错、运算溢出)引起。外部中断是外部设备或协处理器向CPU发出中断申请引起的。2.中断响应中断请求何时发生是随机的。CPU在每条指令的最后一个T周期去检测INTR引脚,CPU一旦检测到有中断请求,在满足中断响应的条件下(IF=1),CPU响应中断,会向外设发出中断响应信号。并保护断点(当前CS、IP和PSW值入栈),然后转向中断服务程序。中断服务程序执行完毕,CPU返回原执行程序的中断处,继续向下执行,称为中断返回。3.中断向量表CPU响应中断后,必须由中断源提供地址信息,引导程序进入中断服务子程序,这些中断服务子程序的入口地址存放在中断向量表中。内存中专门开辟了一个区域,存放中断向量表(也称中断矢量表)。4.中断优先级当有多个中断源请求中断时,中断系统判别中断申请的优先级,CPU响应优先级高的中断,挂起优先级低的中断。当CPU在运行中中断服务子程序时,又有新的更高优先级的中断申请进入,CPU要挂起原中断进入更高级的中断服务子程序,实现中断嵌套功能。5.中断屏蔽当中断源申请中断时,CPU可以由软件设置,使之不能响应,称为中断屏蔽。二、中断分类 8086/8088有一个强有力的中断系统,可以处理256种不同的中断。8086/8088系统上的中断源如图7-1所示。图7-18086/8088中断源以产生中断的方法来分类,256种中断可以分为两大类:外部中断和内部中断。
外部中断也称为硬件中断,是由外部的硬件产生的,硬件中断又分成不可屏蔽中断和可屏蔽中断。下面分别加以说明。1.外部中断
8086/8088CPU有两个外部中断请求线:不可屏蔽中断请求线NMI和可屏蔽中断请求线INTR。(1)由NMI引脚引入的不可屏蔽中断请求,采用边沿触发,上升沿之后维持两个时钟周期高电平有效。对于不可屏蔽中断用户是不能用软件来屏蔽的,一旦有不可屏蔽中断请求,CPU必须予以响应。不可屏蔽中断请求的中断类型号为2,即中断处理程序的入口地址在0段的0008H~000BH的4个单元中。(2)由INTR引脚引入的外设提出的可屏蔽中断请求,采用电平触发,高电平有效,INTR信号的高电平必须维持到CPU响应中断才结束。可屏蔽中断是用户可以通过软件设置来屏蔽的外部中断,即使外部设备有中断请求,CPU可以不予响应。由外设引起的可屏蔽中断请求要得到响应应有两个条件:①外设中断请求是否被屏蔽;②CPU是否允许响应中断。 在8086CPU系统中,外设的中断请求信号接入可编程中断控制器8259A的IRi端,而8259A的中断输出INT连到CPU的INTR引脚上。8259A中设有中断屏蔽寄存器,它的8位对应控制8个外设,通过设置这个寄存器的某位为0或1,可以允许或禁止某个外设的中断请求。一块8259A可管理8个中断,当外设超过8个时,可以使用多个8259A进行级联,扩大到64级中断。外设与8259A的连接是由用户来设计的,硬件连线决定了中断类型号和中断优先级次序。 CPU是否允许响应中断,与中断允许位IF有关。IF=1,CPU允许响应中断;IF=0,CPU禁止响应中断。2.内部中断
内部中断又称为软件中断。软件中断通常有三种情况引起:①由中断指令INT引起的中断;②由CPU的某些运算错误引起的中断;③由调试程序debug设置的中断。※内部中断只要由上面三种情况引起了,是不可屏蔽的!(1)由中断指令INT引起的中断CPU执行一条INTn指令后立即产生中断,并且调用系统中相应的中断处理程序去完成中断功能,指令中的n指出了中断类型号。例7-1测试存储器容量
INT12H CPU执行这条指令时,立即产生一个中断。并从中断向量表的0:12H×4开始的单元中取出4个字节,其内容为中断服务子程序的段地址和偏移地址,然后转去此入口去执行中断服务子程序,完成对存储器的测试。(2)由CPU的某些运算错误引起的中断CPU在运行程序时,会发现一些运算中出现的错误,此时CPU就会中断,让用户去处理这些错误。主要有:①除法错中断:除法错中断类型号为0,在除法运算中,若除数为0或商超过了寄存器所能表达的范围,就产生一个类型号为0的中断,转去类型号为0的中断处理。②溢出中断:溢出中断类型号为4,专用指令为INTO。若OF=1执行中断指令INTO;若OF=0,不执行中断指令。通常INTO放在加、减法运算指令的后面。例7-2测试加法的溢出 ADDAX,BX INTO(3)由调试程序debug设置的中断 在调试程序时,为了检查中间结果或寻找程序中的错误,在程序中可设置断点或进行单步跟踪,调试程序debug有此功能它也是由中断来实现的。①单步中断:单步是每次只执行一条指令,然后屏幕显示当前各寄存器和有关存储单元的内容,以及下条要执行的指令。这样逐条运行指令,来跟踪程序的流程,以检查出程序中的错误。单步中断是在标志位TF=1时,每条指令执行后,CPU自动产生中断类型号为1的中断。②断点中断:中断类型号为3。用debug调试程序时,可用G命令设置断点。当CPU执行到断点时便产生中断,同时显示当前各寄存器和有关存储单元的内容,以及下条要执行的指令,供用户检查。设置断点实际上是把一条断点指令INT3插入到断点设置处。7-2中断处理过程可屏蔽中断处理的过程一般分成几步:中断请求;中断响应;保护现场;转入中断服务子程序;恢复现场和中断返回。其流程如图7-2所示。图7-2可屏蔽中断处理流程图一、CPU响应中断过程 CPU响应中断要有三个条件:●外设提出中断申请●本中断位未被屏蔽●中断允许 当中断接口电路中的中断屏蔽触发器未被屏蔽时,外设可通过中断接口发出中断申请。外设向CPU发出中断请求的时间是随机的,而CPU在每条指令的最后一个机器周期的最后一个T状态去采样中断请求输入线INTR,当CPU在INTR引脚上接收到一个有效的中断请求信号,而CPU内部的中断允许触发器是开放的,则在当前指令执行完后CPU响应中断。 CPU响应中断后,对外设接口发出两个中断响应信号,第一个信号通知外设,CPU已响应申请的中断请求,准备发送中断类型号;当外设收到第二个以后,立即往数据线上给CPU送中断类型号。CPU在响应外部中断,并转入相应中断服务子程序的过程中,自动依次做以下工作:(1)从数据总线上读取中断类型号,将其存入内部暂存器。(2)将标志寄存器PSW的值入栈。(3)将PSW中的中断允许标志IF和单步标志TF清0,以屏蔽外部其它中断请求,和避免CPU以单步方式执行中断处理子程序。(4)保护断点,将当前指令下面一条指令的段地址CS和指令指针IP的值入栈,使中断处理完毕后,能正确返回到主程序继续执行。(5)根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。(6)中断处理程序结束后,从堆栈中依次弹出IP、CS和PSW,然后返回主程序断点处,继续执行原来的程序。对于不可屏蔽中断请求,不必判断IF是否为1,也不是由外设接口给出中断类型号,从NMI引脚进入的中断请求规定其中断类型号为2。在运行中断子程序过程中,若NMI引脚上有不可屏蔽中断请求信号,CPU仍能响应。软件中断由程序设定,没有随机性,它不受中断允许标志位IF的影响,中断类型号由指令INTn中的n决定。正在执行软件中断时,如果有不可屏蔽中断请求,就会在当前指令执行完后立即予以响应。如果有可屏蔽中断请求,并且IF=1,也会在当前指令执行完后予以响应。二、中断向量表寻找中断源可以用查询中断及矢量中断两种方法。查询中断是采用软件查询方法,中断响应后启动中断查询程序,依次查询哪个设备的中断请求触发器为1,检测到后,转向此设备预先设置的中断服务程序入口地址。此方法较简单,但花费时间多,并且后面的设备服务机会少,在8086系统中一般采用矢量中断方法。矢量中断是将每个设备的中断服务程序的入口地址(矢量地址)集中,依次放在中断向量表中。当CPU响应中断后,控制逻辑根据外设提供的中断类型号查找中断向量表,然后将中断服务程序的入口地址送到CS段寄存器和指令指针IP,CPU转入中断服务子程序。这样大大加快了中断处理的速度。1.中断向量表中断向量表又称中断服务程序入口地址表。8086/8088系统允许处理256种类型的中断,对应的中断类型号为0~FFH在存储器的00000H~003FFH,占用1K字节空间,用作存放中断向量。每个类型号占4个字节,高2个字节存放中断入口地址的段地址,低2个字节存放段内偏移地址,如图7-4所示。图7-48086/8088中断向量表各个中断处理程序的段地址和偏移地址按中断类型号顺序存放在中断向量表中。因此由中断类型号n×4即可得到相应中断向量的地址,取4n和4n+1单元中的内容(中断入口程序偏移地址)装入指令指针IP,取4n+2和4n+3单元中的内容(中断入口程序段地址)装入代码段寄存器CS,即可转入中断处理服务子程序。例7-3某中断的中断类型号为68H,图7-5图示了中断操作过程:(1)取中断类型号68H;(2)计算中断向量地址68H×4=1A0H;(3)取中断入口地址的偏移地址送入IP,IP=2050H,段地址送入CS,CS=A000H;(4)转向中断服务程序;(5)中断返回到INT68H指令的下一条指令。图7-5中断操作过程例子2.中断向量(中断入口地址)的设置 IBMPC对256种中断类型已进行了地址分配,附录D中给出了中断向量地址分配表。其中类型0~4为专用中断,中断入口地址已由系统定义,用户不能修改;类型5~类型31为系统使用中断,也不允许用户修改;其余的中断类型号原则上可以由用户定义,但实际上,有些中断类型目前已有用途,例INT21H为系统功能调用,中断类型20H~3FH为DOS中断调用。 供用户使用的中断类型号,它可以由用户定义为软中断,由INTn指令引用;也可以通过INTR端直接接入,或通过中断控制器8259A引入可屏蔽硬件中断。使用时用户要自己将中断服务程序入口地址置入相应的中断向量表中。有两种方法可为中断类型号n设置中断向量,即将中断服务程序的入口地址置入中断类型号n所对应的中断向量表中。一种方法用指令来设置,另一种方法利用DOS功能调用来设置。例7-5用指令来设置中断服务程序的入口地址到中断类型号n所对应的中断向量表中。MOVAX,0MOVES,AXMOVBX,N*4MOVAX,OFFSETINTRAD;置入偏移地址MOV ES:WORDPTR[BX],AXMOVAX,SEGINTRAD ;置入段地址MOV ES:WORDPTR[BX+2],AX STI ┋INTRAD:;类型号n的中断服务子程序 ┋ IRET
实际上,在设置或检查任何中断向量时,总是避免直接使用中断向量的绝对地址,而是利用DOS功能调用INT21H设置中断向量和取出中断向量。此外要注意,在设置自己的中断向量时,应先保存原中断向量,在设置新的中断向量,在程序结束前恢复原中断向量。设置中断向量:把由AL中指定中断类型号的中断向量DS:DX放置在中断向量表中。则操作如下:
预置:AL=中断类型号 DS:DX=中断服务程序入口地址 AH=25H执行:INT21H取中断向量:把由AL中指定中断类型号的中断向量,从中断向量表中取到ES:BX中。则操作如下:预置:AL=中断类型号 AH=35H执行:INT21H返回:ES:BX=中断服务程序入口地址例7-6利用DOS功能调用设置中断向量和取中断向量。
MOV AL,N;取中断向量到ES:BX中 MOV AH,35H INT 21H
PUSH ES ;存原中断向量 PUSH BX PUSH DS
MOV AX,SEGINTRAD;设置新的中断向量 MOV DS,AX MOV DX,OFFSETINTRAD MOV AL,N MOV AH,25H INT 21H POP DS ┋
POP DX ;恢复原中断向量 POP DS MOV AL,N MOV AH,25H INT 21H
RETINTRAD: ;类型号n的中断服务子程序 ┋ IRET
3.中断类型号的获取(1)对于除法出错、单步中断、不可屏蔽中断NMI、断点中断和溢出中断,CPU分别自动提供中断类型号0~4。(2)对于用户自己确定的软件中断INTn,中断类型号就是n。(3)对外部可屏蔽中断INTR,可用硬件电路(例如通用并行接口芯片8212)设计产生中断类型号。(4)对外部可屏蔽中断INTR,可以用可编程中断控制器8259A获得中断类型号。 如图7-1所示,8个中断请求信号接到8259A。当外设申请中断时,8259A响应优先级高的中断源,将中断请求信号送到CPU的INTR端。8259A收到CPU发出的第二个中断响应信号时,将对应中断源的中断类型号送给CPU,CPU获取中断类型号后,自动转入相应的中断服务子程序。 IBMPC机内装有一片8259A,它的中断入口分配如表7-1所示:表7-18259A的中断源分配 8259A中有中断屏蔽寄存器,它的端口地址为21H,中断屏蔽寄存器的位7~0对应IR7~IR0。可以通过设置屏蔽寄存器的各位为0或1去控制每一个中断源的中断允许或屏蔽,此位为0,允许中断;此位为1,禁止中断。例7-7若某系统中允许定时和键盘中断,则中断屏蔽控制字为: MOV AL,11111100B OUT 21H,AL在中断服务程序的结束处,应发出中断结束命令(EOI)给中断命令寄存器,中断命令寄存器的端口地址为20H。例7-8IBMPC机中断结束命令的程序为: MOV AL,20H OUT 20H,AL 综合上面的介绍,我们对中断有了一定的了解,下面将有关中断的主程序编写方法归纳如下:1.主程序中的初始化(1)设置中断向量。(2)设置8259A的中断屏蔽寄存器的中断屏蔽位。(3)设置CPU中断允许位标志IF(开中断)。2.硬件(外设接口)和CPU自动完成(1)外设接口向CPUINTR端发中断请求。(2)当前指令执行完后,CPU发两个中断响应信号给外设接口。(3)CPU读取中断类型号n。(4)CPU自动将当前PSW、CS、IP内容入栈保护。(5)清除IF、TF,禁止外部中断和单步中断。(6)从中断向量表中取(4n)地址中内容→IP;取(4n+2)地址中内容→CS。(7)转向中断服务子程序。
这里一定要注意三点:①对重复前缀的指令(如REPMOVSB)作为一条指令处理。执行一次重复前缀和串指令即可响应中断,而不是把串操作全部执行完。②遇到开中断指令STI和中断返回指令IRET,要在这两条指令执行完后,再执行一条指令才能响应中断。③CPU自动清除IF和TF位,使CPU进入中断服务子程序后,不允许再产生新的中断,如果在中断服务子程序中还允许外部中断进入,则在中断服务子程序中必须再开中断。三、中断服务子程序 中断服务子程序的功能各有不同,但所有的中断服务子程序都有相同的结构形式。(1)程序开始必须保护中断时的现场,可以通过一系列PUSH指令将CPU各寄存器的值入栈保护。(2)若允许中断嵌套,则用STI指令来设置开中断,使中断允许标志IF=1。(3)执行中断处理程序。(4)用CLI指令来设置关中断,使中断允许标志IF=0,禁止其他中断请求进入。(5)给中断命令寄存器送中断结束命令EOI,使当前正在处理的中断请求标志位被清除,否则同级中断或低级中断的请求仍会被屏蔽掉。(6)恢复中断时的现场,通过一系列POP指令将CPU各寄存器的值恢复。(7)用中断返回指令IRET返回主程序,此时堆栈中保存的断点值和标志值分别装入IP、CS和PSW。 进入中断服务程序时,TF和IF清除,不再响应其他外设的中断请求,所以要设置开中断,以允许中断进入,实现中断嵌套。恢复寄存器内容时,为了防止有中断进入破坏其内容,要执行关中断,然后在中断返回时原来的PSW返回,使IF=1,又再开中断,这样返回主程序后,中断请求能得到允许。中断结束命令EOI一般在中断处理结束前发出,使一次中断处理的过程是完整的。四、中断响应时序 CPU对可屏蔽中断请求的响应过程要执行两个连续的中断响应总线周期,第一个中断响应总线周期,CPU通知外设准备响应中断,外设应该准备好中断类型号,第二个中断响应总线周期,CPU接收外设接口发来的中断类型号。图7-6给出了8086/8088中断响应时序。图7-68086/8088中断响应总线周期时序图7-3中断优先级和中断嵌套在实际系统中,经常有多个中断源同时向CPU请求中断,CPU响应哪个中断源的中断请求,由中断优先级排队决定,CPU先响应优先级高的中断请求。当CPU正在处理中断时,有更高优先级别的中断请求,并且IF=1,CPU能响应更高级别的中断请求,而屏蔽掉低级的中断请求,形成了中断嵌套,或称为多重中断。一、中断优先级 高低 IBMPC机中规定优先级从高到低的次序为:
内中断(除法错、INTO、INTn) 不可屏蔽中断(NMI) 可屏蔽中断(INTR) 单步中断
对于可屏蔽中断的优先级设定有三种方法:1.软件查询中断优先级 软件查询中断方式,是将各个外设的中断请求信号通过或门相或后,送到CPU的INTR端,同时把几个外设的中断请求状态位组成一个端口,赋以端口号。任一外设有中断请求,CPU响应中断后进入中断处理子程序,用软件读取端口内容,逐位查询端口的每位状态,查到哪个外设有中断请求,就转入哪个外设的中断服务程序。查询程序的次序,决定了外设优先级别的高低,先测试的中断源优先级别最高。当然在软件查询程序中也可用移位或屏蔽法来改变端口各位的测试次序,但查询时间较长,对中断源较多的情况不合适。2.硬件查询优先方式——菊花链法 菊花链法是采用硬件查询优先的方式,它是在每个外设的对应接口上连接一个逻辑电路构成一个链,控制了中断响应信号的通路,图7-8给出了它的原理图。图7-8菊花链优先查询法越靠近CPU的外设接口,优先级越高!3.矢量中断优先级 矢量中断优先级的设置是采用中断优先级控制器。图7-9给出了它的典型设计原理框图。
外设可以有8个中断请求IR0~IR7送入中断请求寄存器,中断屏蔽寄存器可由用户设置屏蔽某几位的中断请求。中断优先级管理逻辑电路判别出最高优先级中断请求,将其中断级转换成3位码,送到中断类型寄存器的低3位及当前中断服务寄存器。此后,中断优先级控制器向CPU发出中断请求信号,CPU开中断时,CPU发出中断响应信号,如上所述开始一个中断处理过程。中断处理结束引起中断服务寄存器对应为清0,级别较低的中断请求才能得到响应。图7-9矢量中断优先级控制器的原理图二、中断嵌套 IBMPC机没有规定中断嵌套的深度,但使用中受到堆栈容量的限制,必须要有足够的堆栈单元来保存多重中断的断点及寄存器。8259A在完全嵌套优先级工作方式下,中断优先次序为IR0、IR1…IR7,图7-10图示了中断嵌套序列的例子。图7-10中断嵌套序列7-4可编程中断控制器8259A一、功能和引脚 8259A是8086/8088系列的可编程中断控制器,它的主要功能是:(1)具有8级优先级控制,通过级联可以扩展到64级优先级;(2)每一级中断可由程序单独屏蔽或允许;(3)可提供中断类型号传送给CPU;(4)可以通过编程选择多种不同工作方式。 8259A是28个引脚的双列直插式芯片,其引脚图和内部结构框图如图7-11所示。图7-118259A芯片引脚图D7~D0:双向数据线,三态,它直接或通过总线驱动器与系统的数据总线相连。IR7~IR0:外设的中断请求信号输入端,输入,中断请求信号可以是电平触发或边沿触发。中断级联时,连接8259A从片INT端。INT:向CPU发出的中断请求信号,输出,与CPU的INTR端相连。:读命令信号,输入,低电平有效,用来控制数据由8259A读到CPU。:写命令信号,输入,低电平有效,用来控制数据由CPU写到8259A。:片选信号,输入,通过译码电路与高位地址总线相连。
A0
:选择8259A的两个端口,输入,连低位地址线。:CPU给8259A的中断响应信号,输入。8259A要求两个负脉冲的中断响应信号,第一个是CPU响应中断的信号,第二个结束后,CPU读取8259A送去的中断类型号。CAS2~CAS0:双向级联信号线。8259A作主片时,为输出线,作从片时,为输入线。与配合实现8259A级联。:编程/双向使能缓冲。作为输入使用时,用来决定本片8259A是主片还是从片;若=1,则为主片;若=0,则为从片。作为输出使用时,启动8259A到CPU之间的数据总线驱动器。作为输入还是输出,决定于8259A是否采用缓冲方式工作,若采用缓冲方式工作,则作为输出,若采用非缓冲方式,作为输入。二、内部结构1.数据总线缓冲器 数据总线缓冲器是8位双向三态缓冲器,是8259A与系统数据总线接口,通常连接到低8位数据总线D7~D0。CPU编程控制字写入8259A、8259A的状态信息读出以及中断响应时8259A送出的中断类型号,都经过它传送。2.读写控制电路
读写控制电路接收CPU送来的读/写信号、,片选信号
及端口选择信号A0。高位地址译码后送
作片选信号。A0连地址总线A0或A1,用来选择8259A的两个I/O端口,一个为奇地址,一个为偶地址。读写操作由这4个信号控制来实现的,使8259A接收CPU送来的初始化命令字(ICW)和操作命令字(OCW),或将内部状态信息送给CPU。、、、A0的控制作用见表7-2。表7-2中D4、D3代表控制字的第4位和第3位。
表7-28259A的读写功能在IBMPC/XT机中用A9~A1译码来产生信号,组合为00001××××,产生I/O端口地址为20H~3FH,共32个。而8259A只需要两个I/O端口地址,IBMPC/XT取20H、21H两个地址在编程时使用。但其他30地址为映像地址,不可能再分配给其他I/O设备使用。 8088系统中数据线为8位,8259A数据线为8位,所以地址总线的A0连8259A的A0,可以分配给8259A两个端口地址,一个奇地址,一个偶地址,从而满足8259A的编程要求。 8086系统中,接口电路与CPU的连接问题!!8086系统中接口芯片8259A的译码电路3.级联缓冲/比较器8259A与系统总线相连有两种方式:(1)缓冲方式:在多片8259A级联的系统中,8259A通过总线驱动器和数据总线相连,这就是缓冲方式。在缓冲方式下,8259A的端与总线驱动器允许端相连,控制总线驱动器启动,作为输出端当=0,8259A控制数据从8259A送到CPU,当=1时,控制数据从CPU送到8259A。(2)非缓冲方式:单片8259A或少量8259A级联时,可以将8259A直接与数据总线相连,称为非缓冲方式。非缓冲方式下,8259A的端作输入端,控制8259A作为主片还是从片,=1,表示此8259A为主片,=0,表示此8259A为从片。单片8259A时,接高电平。由初始化命令字ICW4来设置缓冲方式或非缓冲方式!4.中断请求寄存器IRR
中断请求寄存器是一个8位寄存器,存放外部输入的中断请求信号IR7~IR0。当某个IR端有中断请求时,IRR相应的某位置‘1’。可以允许8个中断请求信号同时进入,此时IRR寄存器被置成全‘1’。当中断请求被响应时,IRR的相应位复位。5.中断屏蔽寄存器IMR 中断屏蔽寄存器是一个8位寄存器,用来存放对各级中断请求的屏蔽信息。当用软件编程使IMR寄存器中某一位置‘0’时,允许IRR寄存器中相应位的中断请求进入中断优先级判别器。若IMR中某位为‘1’,则此位中断请求被屏蔽。各个中断屏蔽位是独立的,屏蔽了优先级高的中断,不影响其他优先级低的中断允许。6.优先级判别器PR 优先级判别器对保存在IRR寄存器中的中断请求进行优先级识别,送出最高优先级的中断请求到中断服务寄存器ISR中去。当出现多重中断时,PR判定是否允许所出现的中断去打断正在处理的中断,让优先级更高的中断优先处理。7.中断服务寄存器ISR 中断服务寄存器是一个8位寄存器,保存正在处理中的中断请求信号,某个IR端的中断请求被CPU响应后,当CPU发出第一个信号时,ISR寄存器中的相应位置‘1’,一直保持到该级中断处理结束为止。允许多重中断时,ISR多位同时被置成‘1’。8.控制电路 控制电路是8259A的内部控制器。根据中断请求寄存器IRR的置位情况和中断屏蔽寄存器IMR设置的情况,通过优先级判别器PR判定优先级,向8259A内部及其他部件发出控制信号。并向CPU发出中断请求信号INT和接收CPU的中断响应信号,使中断服务寄存器ISR相应位置‘1’,并使中断请求寄存器IRR相应位置‘0’。当CPU第二个信号到来时,控制8259A送出中断类型号,使CPU转入中断服务子程序。如果方式控制字ICW4的中断自动结束位为‘1’则第二个脉冲结束时,将8259A中断服务寄存器ISR的相应位清‘0’。三、8259A的中断管理方式8259A有多种工作方式,这些工作方式都是通过编程方法来设置的,使用十分灵活。首先我们来看一下8259A的编程结构,然后再介绍8259A的中断工作方式。1.8259A的编程结构 从图7-128259A编程结构中可以看到,中断管理方式是通过8259A初始化时写入初始化命令字和操作命令字来设置的。初始化命令字写入寄存器ICW1~ICW4,它是由初始化程序设置的,初始化命令字一经设定,在系统工作过程中就不再改变。操作命令字写入寄存器OCW1~OCW3,它是由应用程序设定的,用来对中断处理过程进行控制,在系统运行过程中,操作命令字可以重新设置。
8259A的中断优先级的管理采用多种方式,优先级既可以固定设置,又可以循环设置,给用户极大的方便。中断优先级设定后,允许中断嵌套,通常允许高级中断打断低级中断,不允许低级或同级中断打断高级中断。特殊情况下与中断结束方式有关,也可以低级中断打断高级中断,称为重复中断。2.优先级设置方式(1)完全嵌套方式若8259A初始化后没有设置其他优先级方式,就自动进入完全嵌套方式。在这种方式下,中断优先级分配固定级别0~7级,IR0具有最高优先级,IR7优先级最低。也可用初始化命令字ICW4中SFNM=0,将8259A置成完全嵌套优先级方式。在完全嵌套工作方式下,当一个中断请求被响应后,中断服务寄存器ISR中的对应位置‘1’,中断类型号被放到数据总线上,CPU转入中断服务程序。一般情况下(除自动中断结束方式外),在CPU发出中断结束命令EOI前,ISR寄存器中对应位一直保持‘1’。当新的中断请求中断请求进入时,中断优先级裁决器将新的中断请求和当前ISR寄存器中置‘1’比较,判断哪一个优先级更高。允许打断正在处理的中断,优先处理更高级的中断,实现中断嵌套,但禁止同级与低级中断请求进入。中断嵌套时,ISR寄存器中内容发生变化,又有一个对应位置‘1’,当实现8级中断嵌套时,ISR寄存器内容为FFH。 在完全嵌套方式中有两种中断结束方式:普通EOI结束方式和自动AEOI结束方式。(2)特殊全嵌套工作方式 在级联时,还有一种特殊全嵌套工作方式,它与完全嵌套工作方式基本相同。区别在于当处理某级中断时,有同级中断请求进入,8259A也会响应,从而实现了对同级中断请求的特殊嵌套。 在级联方式中,主片编程为特殊全嵌套工作方式,从片为其他优先级方式。当从片上有中断请求进入并正在处理时,同一从片上又进入更高级别的中断请求,从片能响应更高优先级中断请求,并向主片申请中断,但对主片来说是同级中断请求。当主片处于特殊全嵌套工作方式时,主片就能允许对相同级别的中断请求开放。所以特殊全嵌套工作方式是专门为多片8259A系统提供的,可以用来确定从片内部优先级的工作方式。特殊全嵌套工作方式的设置是主片初始化时ICW4中的SFNM=1,同时应将主片ICW4中EOI位置‘0’,设成非自动结束方式,通常用特殊EOI结束方式。(3)优先级自动循环方式在优先级自动循环方式中,优先级别可以改变。初始优先级次序规定为IR0、IR1、┅、IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求,其他依次类推。例当前IR3中断请求,则处理IR3,处理完IR3后,IR4变成最高优先级,优先级依次为IR4、IR5、IR6、┅、IR2、IR3。所以,优先级自动循环方式适合用在多个中断源优先级相等的场合。 用操作命令字OCW2中R、SL=10就可设置优先级自动循环方式。根据结束方式不同,有两种自动循环方式:普通EOI循环方式和自动EOI循环方式。(4)优先级特殊循环方式优先级特殊循环方式和优先级自动循环方式相比,不同之处在于优先级特殊循环方式中,初始时最低优先级由程序规定,最高先级就确定了。例如初始时指定IR1为最低优先级,则IR2为最高优先级,其他依次类推。而优先级自动循环方式初始时最高优先级一定是IR0。用操作命令字OCW2中R、SL=11就可以设置优先级特殊循环方式,根据结束方式不同,通常用特殊EOI循环方式。3.中断结束方式在固定优先级方式中,对中断结束的处理有自动AEOI结束方式和非自动结束方式,非自动结束方式又分普通EOI结束方式和特殊SEOI结束方式。中断结束处理实际上就是对中断服务寄存器ISR中对应位的处理。当一个中断得到响应时,8259A使ISR寄存器中对应位置‘1’,表明此对应外设正在服务,并为中断优先判别器提供判别依据。中断结束时,必须使ISR寄存器中对应位置‘0’,否则中断优先级判别会不正常。什么时刻使ISR中对应位置‘0’,就产生不同的中断结束方式。(1)普通EOI结束方式在完全嵌套工作方式下,任何一级中断处理结束返回上一级程序前,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令后,自动将ISR寄存器中级别最高的置‘1’位清成‘0’(此位对应当前正在处理的中断)。EOI结束命令字必须放在返回指令IRET前,没有EOI结束命令,ISR寄存器中对应位仍为‘1’,继续屏蔽同级或低级的中断请求。若EOI结束命令字放在中断服务程序中其他位置,会引起同级或低级中断在本级未处理完前进入,容易产生错误。(2)特殊EOI结束方式在非完全嵌套工作方式下,中断服务寄存器无法确定哪一级中断为最后响应和处理的,这时要采用特殊SEOI结束方式。CPU向8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别也传给8259A。此时,8259A将ISR寄存器中指定级别的对应位清‘0’,它在任何情况下均可使用。(3)自动EOI结束方式在自动AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置‘1’,但在CPU进入中断响应周期,发第二个脉冲后,8259A自动将ISR寄存器中对应位清‘0’。此时,尽管对某个外设正在进行中断服务,但对8259A来说,ISR寄存器中没有指示,好象已结束了中断处理一样。这种方式虽然简单,但因为ISR寄存器中没有标志,低级中断申请时,可以打断高级中断,产生重复嵌套,嵌套深度也无法控制,容易产生错误,使用时要特别小心。在级联方式下,一般用非自动结束方式,无论用普通EOI结束方式,还是用特殊EOI结束方式,中断处理结束时,要发两次中断结束命令,一次是对主片发的,一次是对从片发的。
4.循环优先级的循环方法在循环优先级方式中,与中断结束方式有关,有三种循环方式。(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为最低优先级,则IR6就为最高优先级,其他各级依次类推。这样在当前中断服务程序结束前,使CPU给8259A回送特殊EOI结束命令,8259A收到此命令字后,指定最低优先级,并重新排列优先级级别。(2)特殊EOI循环方式例7-11
某一时刻8259A中IR2,IR6有中断嵌套服务。在IR2中断服务程序中安排了最低优先级赋给IR3指令,指令执行后,中断优先级变化情况如表7-4。
表7-4特殊EOI循环方式在自动EOI循环方式中,任何一级中断被响应后,中断响应总线周期中第二个信号的后沿自动将ISR寄存器中相应位清0,并立即改变各级中断的优先级别,改变方式与普通EOI循环方式相同。使用这种方式要小心,防止重复嵌套产生。 (3)自动EOI循环方式5.中断屏蔽方式 CPU由CLI指令禁止所有可屏蔽中断进入,中断优先级管理也可以对中断请求单独屏蔽,通过对中断屏蔽寄存器的操作可以实现对某几位的屏蔽。有两种屏蔽方式:(1)普通屏蔽方式 将中断屏蔽寄存器IMR中某一位或某几位置‘1’,即可将对应位的中断请求屏蔽掉。普通屏蔽方式的设置通过设置操作命令字OCW1来实现。例7-12屏蔽第2、3、5、6位进入的中断请求,假设8259A的端口地址为20H,21H。 MOV AL,01101100B OUT 21H,AL
对OCW1的设置可以在主程序中,也可放在中断服务程序中,具体根据中断处理要求而定。
(2)特殊屏蔽方式某些场合,希望一个中断服务程序能动态地改变系统的优先级结构。例如当CPU正在处理中断程序的某一部分时,希望禁止低级中断请求,但在执行中断处理程序的另一部分时,希望开放较低级中断请求,此时可采用特殊屏蔽方式。此方式能对本级中断进行屏蔽,而允许优先级比它高或低的中断进入。
特殊屏蔽方式总是在中断处理程序中使用,特殊屏蔽方式的设置是通过设置操作命令字OCW3中的ESMM,SMM=11来实现的,例如当前正在执行IR3的中断服务程序,设置了特殊屏蔽方式后,再用OCW1对中断屏蔽寄存器中第3位置‘1’时,就会同时使当前中断服务寄存器中对应位自动清‘0’,这样可以既屏蔽了当前正在处理的中断,又开放了较低级别的中断。待中断服务程序结束时,应将IMR寄存器的第3位复位,并将SMM位复位,标志退出特殊屏蔽方式。
6.中断请求引入方式中断请求引入有三种方式:(1)边沿触发方式在边沿触发方式下,8259A将中断请求输入端出现的上升沿作为中断请求信号。中断请求输入端出现上升沿触发信号后,可以一直保持高电平。(2)电平触发方式在电平触发方式下,8259A将中断请求输入端出现的高电平作为中断请求信号。但当中断得到响应后,中断输入端必须及时撤除高电平,否则在CPU进入中断处理过程,并且开中断的情况下,原输入端的高电平会引起第二次中断的错误。初始化命令字ICW1中的LTIM位可用来设置这两种触发方式,LTIM=1,设置为电平触发方式;LTIM=0,设置为边沿触发方式。(3)中断查询方式在中断查询方式下,外部设备向8259A发中断请求信号,中断请求可以是边沿触发,也可以是电平触发。但8259A不通过INT信号向CPU发中断请求信号,因为CPU内部的中断允许触发器复位,所以禁止了8259A对CPU的中断请求。CPU要使用软件查询来确定中断源,才能实现对外设的中断服务。因此,中断查询方式既有中断的特点,又有查询的特点。CPU执行的查询软件中必须有查询命令,才能实现查询功能。CPU通过操作命令字OCW3的设置来发出查询命令的。若外设发出中断请求,8259A的中断服务寄存器相应位置‘1’,CPU就可以在查询命令之后的下一个读操作,读取中断服务寄存器中的优先级。所以,CPU所执行的查询程序应包括以下过程:
①系统关中断;②用OUT指令使CPU向8259A端口(偶地址端口)送OCW3命令字;③若外设已发出过中断请求,8259A在当前中断服务寄存器中使对应位置‘1’,且立即组成查询字。④CPU用IN指令从端口(偶地址)读取8259A的查询字。
OCW3命令字构成的查询命令格式为:其中D2位为1,使OCW3具有查询性质。8259A得到查询命令后,立即组成查询字,等待CPU读取。CPU从8259A中读取的查询字格式为:其中IR=1,表示有设备请求中断服务;IR=0,表示没有设备请求中断服务。W2、W1、W0组成的代码表示当前中断请求的最高优先级。四、8259A的编程方法对8259A的编程有两类命令字:初始化命令字ICW和操作命令字OCW。系统复位后,初始化程序对8259A置入初始化命令字。初始化后可通过发出操作命令字OCW来定义8259A的操作方式,实现对8259A的状态、中断方式和优先级管理的控制。初始化命令字只发一次,操作命令字允许重置,以动态改变8259A的操作与控制方式。1.初始化命令字初始化命令字完成的功能:①设定中断请求信号触发方式;②设定8259A工作方式,单片或级联;③设定8259A中断类型号基值,即IR0对应的中断类型号;④设定优先级设置方式;⑤设定中断处理结束时的结束操作方式。 对8259A编程初始化命令字,共预置4个命令字:ICW1、ICW2、ICW3、ICW4。初始化命令字必须顺序填写,但并不是任何情况下都要预置4个命令字,用户根据具体使用情况而定。(1)ICW1——芯片控制初始化命令字例7-13IBMPC/XT系统初始化中,设CW1=13H,表示8259A为单片方式,上升沿触发,要求设置ICW4。指令为: MOV AL,13H OUT 20H,AL(2)ICW2——设置中断类型号初始化命令字8259A中IR0端对应的中断类型号为中断类型号基值,它是可以被8整除的正整数ICW2用来设置这个中断类型号基值,由此提供外部中断的中断类型号。ICW2低3位为0,高5位由用户设定。当8259A收到CPU发来的第二个信号,它向CPU发送中断类型号,其中高5位ICW2的高5位,低3位根据IR0~IR7中断响应哪级中断来确定。
例7-14
在IBMPC/XT系统中,T7~T3=00001,所以8个中断的类型号为08H~0FH。A0=1,I/O端口地址位21H。设置ICW2的指令为: MOV AL,00001000B OUT 21H,AL(3)ICW3——标识主片/从片初始化命令字ICW3命令字在级联时(即ICW1中SNGL=0)才设置。8259A主片格式:8259A从片格式: 对于从片8259A来说,ID2~ID0=000~111表示从片接在主片的哪个中断请求输入端上,例ID2~ID0=010,表示从片接在主片8259A的IR2端。例7-15某8259A主片的IR3、IR7端连接两个8259A从片,编写初始化命令字。主片: MOV AL,10001000B OUT 21H,AL;主片端口地址20H,21H从片1: MOV AL,00000011B OUT 61H,AL;从片1端口地址60H,61H从片2: MOV AL,00000111B OUT 71H,AL;从片2端口地址70H,71H(4)ICW4——方式控制初始化命令字
ICW1中IC4为1时,要求预置ICW4命令字,对8086/8088系统必须预置ICW4。格式:※初始化命令字的设置有固定次序,端口地址也有明确规定,并不会因为只有两个端口输出指令而混淆,设置次序如图7-13所示。初始化命令字必须从ICW1开始设置,依下顺序进行设置,并分别根据ICW1中的SNGL位和IC4位决定是否设置ICW3和ICW4。级联时要设置ICW3,并且从片与主片的ICW3的设置不同。 在初始化命令字设置完成前,对A0=1的输出指令不可能是操作命令字。而初始化命令序列设置完成后,在操作命令字的设置中,不可能出现第二次初始化,因此不会混淆。
图7-13初始化命令字设置次序2.操作命令字操作命令字决定中断屏蔽,中断优先级次序,中断结束方式等。中断管理较复杂,包括有:完全嵌套优先方式、特殊嵌套优先方式、自动循环优先方式、特殊循环优先方式、特殊屏蔽方式、查询方式等。它是由操作命令字的设置来实现的,设置时,次序上没有严格要求,但端口地址有严格规定,OCW1必须写入奇地址端口,OCW2和OCW3必须写入偶地址端口。(1)OCW1——中断屏蔽操作命令字例7-18设某中断系统要求屏蔽IR3,IR5,8259A编程指令为: MOV AL,00101000B OUT 21H,AL(2)OCW2——优先级循环方式和中断结束 方式操作字
标志位:OCW2的D4、D3位等于00,是标志位。以区别ICW1和OCW3控制字的设置;
L2~L0:SL=1时,L2~L0有效。L2~L0有两个用途,一个是当OCW2设置为特殊EOI结束方式时,L2~L0指出清除中断服务寄存器中的哪一位,第二个当OCW2设置为特殊优先级循环方式时,L2~L0指出循环开始时设置的最低优先级;
R、SL、EOI:这三位组合起来才能指明优先级设置方式和中断结束控制方式,但每位也有自己的意义;R(Rotate):R=1,中断优先级是按循环方式设置的,即每个中断级轮流成为最高优先级。当前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025解除劳动合同证明书参考范本
- 2025委托研发合同范本
- 2025国际BOT投资合同范本参考
- 2025质押担保借款合同书模板
- 2025建筑外墙装修工程施工合同
- 2025年物业委托管理合同范本
- 老年护理理论知识
- 进一步加强文明素质教育
- 自动化工程师面试题库及答案
- 紫色霓虹科技风商业计划模板
- 国家医保局-2024年医保支付方式改革培训班-DRG.DIP2.0版培训
- 智障个别化教育计划案例(3篇)
- 2025届新高考语文热点冲刺复习:新高考作文教学及备考策略
- (高清版)DB3204∕T 1024-2021 污水排入城镇污水管网排放口设置技术规范
- 海南省海口市(2024年-2025年小学六年级语文)部编版期中考试(下学期)试卷及答案
- 旅游消费者行为学课件:社会群体与旅游消费者行为
- 《材料成形测试技术》课件-第7章 轧制过程在线检测
- 2025年春新北师大版数学一年级下册课件 第5单元 第5课时 有趣的算式
- 部编版四年级语文下册第六单元教学计划(含课标分析、教材分析、单元教学目标、教学策略、学情分析等)
- 小学生情绪管理课件幽默
- 短视频与直播电商教学大纲教案
评论
0/150
提交评论