微型计算机中断技术.ppt
第9章 微型计算机中断技术,9.1 中断的基本概念9.2 8086的中断结构9.3 可编程中断控制器8259A,9.1 中断的基本概念,9.1.1 中断及中断源9.1.2 中断系统的功能9.1.3 中断工作过程,9.1.1 中断及中断源,1.中断 在CPU正常运行程序时,由于内部事件、外部事件或由程序预先安排的事件所引起的CPU暂时停止正在运行的程序,而转去执行请求CPU服务的内部/外部事件或预先安排事件的服务程序,待服务程序处理完毕后又返回去继续执行被暂停的程序。2.中断源 发出中断请求的外部设备或引起中断的内部原因称为中断源。中断源有以下几种:外设中断源。故障中断源。软件中断源。为调试而设置的中断源。定时时钟。,9.1.2 中断系统的功能,中断的实现与返回能实现优化级排队能实现中断的嵌套,9.1.3 中断工作过程,9.2 8086的中断结构,9.2.1 8086中断类型9.2.2 中断向量和中断向量表9.2.3 8086的中断响应过程,9.2.1 8086中断类型,8086采用向量中断,每个中断对应一个中断类型号0255,共256个。图9.3 8086中断结构图。,9.2.1 8086中断类型,1.外部中断:由外部硬件引起的中断,也叫硬件中断,是CPU外部中断请求信号引脚上输入有效的中断请求信号引起的,分为非屏蔽中断和可屏蔽中断两种。非屏蔽中断NMI。用户不能用软件屏蔽的中断。可屏蔽中断INTR。8086的INTR中断请求信号来自中断控制器8259A,是电平触发方式,高电平有效。2.内部中断:由CPU内部事件引起的中断,内部中断也称软件中断,包括溢出中断、除法出错中断、单步中断、断点中断和指令设置的中断。,表9.1 IBM PC/XT和IBM PC/AT系统外部中断,2.内部中断,溢出中断:INTO指令,条件:OF=1。除法出错中断:在执行除法指令时,若除数为0或商大于目的寄存器所能表达的范围,产生一个向量号为0的内部中断。单步中断:单步中断标志TF为1时,在每条指令执行结束后,产生一个向量号为1的内部中断。单步中断为系统提供了一种方便的调试手段,能够逐条地执行指令。断点中断:INT 3指令中断,执行一个INT 3指令,产生一个向量号为3的内部中断。断点中断常用于设置断点,停止正常程序的执行,转去执行某种类型的特殊处理,用于调试程序。指令中断:中断指令INT n。8086的中断优先级由高到低依次为软件中断(单步中断除外)、非屏蔽中断NMI、可屏蔽中断INTR、单步中断。,9.2.2 中断向量和中断向量表,8086/8088CPU采用向量中断,向量中断首先根据中断类型号获得中断向量,中断向量包含中断服务程序的入口地址信息。中断类型号:每个中断的编号,0255,共256个中断。中断向量:中断服务程序的入口地址信息,共4个字节,段地址及偏移地址(CS:IP)。中断向量表:把系统中所有的中断向量集中起来放到存储器的某一区域内,这个存放中断向量的存储区就叫中断向量表或中断服务程序入口地址表。中断向量地址:中断向量在表中的位置称为中断向量地址。中断向量地址中断类型号4,表9.2 8086CPU中断向量表,例:假设在实地址方式下,内存00140H到00147H中存放的数据如右图所示,求51H号中断的中断服务程序入口地址。,解:1、求中断向量地址 首地址 51H4=144H(左移两位方法)末地址 51H4+3=147H2、确定中断向量,即00144H到00147H单元中的内容。段地址=4540H 偏移地址=3430H,所以中断服务程序入口地址为 段地址 16+偏移地址=45400H+3430H=48830H,9.2.3 8086的中断响应过程,内部中断响应过程外部中断响应过,1内部中断响应过程,将类型号乘4,计算出中断向量的地址;CPU的标志寄存器入栈,以保护各个标志位,此操作类似于PUSHF指令。清除IF和TF标志,屏蔽新的INTR中断和单步中断。保存断点,即把断点处的IP和CS值压入堆栈,先压入CS值,再压入IP值。根据第一步计算出来的地址从中断向量表中取出中断服务程序的入口地址(段和偏移),分别送至CS和IP中。转入中断服务程序执行。,内部中断的特点,内部中断是由指令或程序运行时标志位状态的改变引起的,因此是可以预测的,这有点类似于子程序调用。内部中断由CPU内部引起,中断类型号的获得与外部无关,CPU不需要执行中断响应周期去获得中断类型号。除单步中断外,内部中断无法用软件禁止,不受中断允许标志IF的影响。,2外部中断响应过程,非屏蔽中断响应:NMI中断不受IF标志的影响,也不用外部接口给出中断类型号,CPU响应NMI中断时也没有中断响应周期。可屏蔽中断响应:当INTR信号有效时,如果中断允许标志IF1,则CPU就在当前指令执行完毕后,产生两个连续的中断响应总线周期。,图9.4 8086对INTR的中断响应时序,可屏蔽中断的响应过程,处理器接到中断申请,处理完当前指令即进入响应周期。第二阶段即中断响应周期,在其间CPU向外部中断控制器发送两个响应脉冲信号INTA#。第一个响应脉冲通知中断控制器,已经响应外部中断请求,让中断控制器提供中断类型号。第二个响应脉冲,CPU取走中断类型号。将标志寄存器中的内容压入堆栈保护,然后清IF和TF标志,以禁止INTR引脚以及陷井和单步中断。将断点地址压入堆栈(CS:IP)。断点地址:指中断时CPU待执行的下一条指令对应的逻辑地址。顺序:先压入断点地址CS,后压入偏移地址EIP(或IP)。CPU得到中断类型号码n后,通过中断类型号与中断服务程序入口地址的关系找出该类型对应的段基地址和偏移地址,从而转入中断服务程序入口地址。完成中断响应任务。,图9.5 可屏蔽中断的响应和处理过程,9.3 可编程中断控制器8259A,9.3.1 8259A的功能9.3.2 8259A的内部结构与引脚信号9.3.3 8259A的工作方式9.3.4 8259A编程方法,9.3.1 8259A的功能,具有8级优先级,并可通过级联最多扩展至64级;可通过编程屏蔽或开放接于其上的任一中断源;在中断响应周期能自动向CPU提供可编程的标识码,如8086的中断类型号;可编程选择各种不同的工作方式。,9.3.2 8259A的内部结构与引脚信号,数据总线缓冲器的主要功能有:通过数据总线缓冲器,CPU向8259A内部发送命令。CPU接收8259A状态信息。在中断响应周期,CPU从中获得中断类型号。,数据总线缓冲器,数据总线缓冲器是一个三态、双向的8位缓冲器,是8259A与CPU系统数据总线的接口。,读/写逻辑,接收CPU送来的读/写控制信号、片选信号以及地址选择信号,对内部各个寄存器进行读写操作。,级联缓冲/比较器,级联缓冲/比较器在级联方式的主从结构中(两个以上的8259A组成的系统),用来存放和比较系统中各8259A的从设备标志(ID)。,中断请求寄存器IRR,寄存器位引脚,功能:记录外部中断源的中断申请的状态。状态:1对应引脚有中断请求且还未被响应。0对应引脚无中断请求或有但已经被响应。,中断服务寄存器ISR,功能:记录外部中断源的中断申请被服务的状态。状态:1对应引脚的中断请求已被响应(服务)且服务还没有结束。0对应引脚的中断请求未被响应。,寄存器位引脚,中断屏蔽寄存器IMR,功能:设置外部中断源的中断屏蔽状态。状态:1对应引脚的中断被屏蔽。0对应引脚的中断未被屏蔽。注意:只有IMRi相应位为0且IF=1,CPU才有可能响应可屏蔽中断。,寄存器位引脚,中断优先权分辨器PR,优先权分辨器PR用来确定存放在IRR中各个中断请求信号对应中断源的优先级。并总是选出当前最高优先中断源的中断申请通知控制逻辑,以便控制逻辑发送中断请求信号INT给CPU。,控制逻辑,控制逻辑是控制8259A内部各个部件的主要逻辑电路。主要功能包括:(1)根据CPU对8259A编程设定的工作方式来产生内部控制信号。(2)如果中断请求寄存器IRR有未被屏蔽的位,则控制逻辑对应于当时最高优先的中断源,向CPU发中断请求信号INT。(3)接收CPU送来的中断响应信号,并置位中断服务寄存器ISR的相应位(ISRi)。(4)控制发出相应的中断类型号,以供CPU读取。,9.3.2 8259A的内部结构与引脚信号,D7D0:为8位双向的数据线A0:端口选择信号(两个端口地址)IRi:8个中断源中断请求端INT:中断请求输出信号INTA#:中断响应输入信号RD#和WR#:读/写控制信号CS#:片选信号SP#/EN#:级联/缓冲控制(1)级联时输入:SP#:1=主片,0=从片;(2)缓冲时输出:EN#:1CPU写,0CPU读。,8259A的工作流程,中断源产生中断请求,使8259A的IRR相应位置1;经IMR屏蔽电路处理后,送PR;PR检测出最高的中断请求位,并经过嵌套处理,决定是否发出INT信号;若可发INT信号,则控制逻辑将INT信号送CPU的INTR引脚;若CPU开中断,则在执行完当前指令后,CPU进入中断响应周期,发出两个中断响应信号;8259A在收到第一个中断响应信号INTA#后,控制逻辑使相应的ISR位置1,相应的IRR位清0;8259A在收到第二个中断响应信号INTA#后,控制逻辑将中断类型号送数据总线。若8259A工作在AEOI(自动中断结束)模式,则使相应的ISR位清0。CPU读取该中断类型号后,查中断向量表,转去执行相应的中断服务程序。CPU执行中断服务程序,在中断返回前发中断结束命令(非自动中断结束方式时),将ISR的相应位清0。注意:这里的中断结束,是指将8259A的ISR对应位复位,而不是结束用户的中断服务程序,中断服务程序要执行IRET指令后才能结束。,9.3.3 8259A的工作方式,中断优先级方式中断嵌套方式中断屏蔽方式中断结束方式中断触发方式与系统总线的连接方式级联工作方式查询方式,1.中断优先级方式,两种优先级控制方式:固定优先级和循环优先级。固定优先级方式:所有中断请求IRi的中断优先级固定不变;优先级排列顺序可编程改变;加电后8259A的默认方式,默认优先级顺序从高到低为IR0-IR7。,1、中断优先级方式,循环优先级方式:中断源轮流处于最高优先级,即自动中断优先级循环;初始优先级顺序可用编程改变;某中断请求IRi被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级。,2.中断嵌套方式,两种中断嵌套方式:普通全嵌套方式和特殊全嵌套方式。普通全嵌套方式(默认方式):一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。特殊全嵌套方式:一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。注:特殊全嵌套仅用于多个8259A级联时的主8259A,而不能用于从属8259A或单8259A系统。,一般全嵌套方式与特殊全嵌套方式的区别,3.中断屏蔽方式,两种优先级控制方式:普通屏蔽方式和特殊屏蔽方式。普通屏蔽方式:当一个优先级较高的中断请求正在被处理时,不允许优先级较低的中断进入正在处理的高级别中断。利用操作命令字OCW1,使屏蔽寄存器IMR中的一位或数位置1来屏蔽一个或数个中断源的中断请求。特殊屏蔽方式:在某些场合,执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,特殊屏蔽方式提供了允许较低优先级的中断能够得到响应的特殊手段。特殊屏蔽方式中只能用特殊EOI命令结束中断。,4.中断结束方式,当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服务结束后,则必须清零该ISRi位。使ISRi=0是通过向8259A发出中断结束命令(EOI命令)实现的。三种EOI方式:自动EOI方式 正常EOI方式 特殊EOI方式,中断自动结束方式(AUTOMATICAEOI方式)在第二个INTA#后沿,即完成把对应的ISR位复位。注意:AEOI方式是在中断响应后,而不是在中断处理程序结束后将ISR位清0。这样,在中断处理过程中,8259A中就没有“正在处理”的标识。此时,若有中断请求出现,且IF1,则无论其优先级如何(比本级高、低或相同),都将得到响应。尤其是当某一中断请求信号被CPU响应后,如不及时撤销,就会再次被响应“二次中断”。所以,AEOI方式适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。通过ICW4可以设置AEOI方式(AEOI=1)。,4.中断结束方式,一般(常规)中断结束方式 CPU发出正常EOI命令,该EOI命令使ISRi=1的位中优先级最高的那一位复位。在级联情况下的:先结束从片上中所有服务后,再结束对应的主片上的服务。特殊中断结束方式(SPECIFIC EOISEOI)由CPU发出特殊EOI命令,该EOI命令中指出了所要复位的ISR的位号,用于特殊屏蔽方式。,4.中断结束方式,5.中断触发方式,两种触发方式:边沿触发方式和电平触发方式。边沿触发:IRi出现上升沿表示有中断请求。电平触发:IRi出现高电平表示有中断请求。在第1个INTA#结束前,IRi必须保持高电平。,6.与系统总线的连接方式,两种连接方式:缓冲方式和非缓冲方式。缓冲方式:一般在多片8259A级联系统中,8259A通过总线驱动器与系统总线相连,而不是8259A直接与系统总线相连,这就是缓冲方式。非缓冲方式:当系统只有一片8259A或少量几片8259A时,一般将它直接与数据总线相连。这就是所谓的非缓冲方式。,7.级联工作方式,单片8259A可支持8个中断源;采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个中断源;级连时只能有一片8259A为主片,其余的均为从属片;涉及到的8259A引脚包括:CAS0-CAS2、SP#/EN#、IRi、INT。,级联电路连接方法,8.查询方式,CPU禁止外部的中断请求(IF位为0)。外设仍然向8259A发中断请求信号,要求CPU服务,此时,CPU需要用软件查询方法来确认中断源,从而实现对外设的服务。CPU首先向8259A发查询命令,紧接着执行一条输入指令(IN),从8259A的偶地址读出一个字节的查询字,由该指令产生的RD#信号使ISR的相应位置1。CPU读入查询字后,判断其最高位,若最高位为1,说明8259A的IR端已有中断请求输入,此时该查询字的最低三位组成的代码表示了当前中断请求的最高优先级,CPU据此转入相应的中断服务程序。,9.3.4 8259A编程方法,8259A有两种控制字:初始化命令字、操作命令字。8259A的编程:初始化编程、工作方式编程。8259A的初始化命令字有4个:ICW1ICW4 用于初始化8259A。8259A的操作命令字有3个:OCW1OCW3,用于设定8259A的工作方式及发出相应的控制命令。初始化命令字通常是计算机系统启动时由初始化程序设置的,一旦设定,在工作过程中一般不再改变。操作命令字由应用程序设定(如设备的中断服务程序),用于中断处理过程的动态控制,可多次设置。,7个CPU控制寄存器分成两组:一组用做存ICW,另一组存OCW。两组7个寄存器占用2个I/O端口地址:,9.3.4 8259A编程方法,在PC/AT机中,主8259A所占的端口地址为20H和21H,从8259A所占的端口地址为A0H和A1H。注意:当发出ICW或OCW时,CPU中断申请引脚INTR应关闭(使用CLI指令)。,ICW1、OCW2、OCW3 由A0、D4和D3三位状态寻址:,ICW2、ICW3、ICW4在ICW1后,按顺序写入。,9.3.4 8259A编程方法,对8259A的编程分为两类:初始化编程 操作过程编程 8259A的软件编程必须按照先初始化编程,然后进行操作方式编程的顺序。,9.3.4 8259A编程方法,初始化编程初始化编程的主要任务:复位芯片。设定中断请求信号有效的形式。设定是单片,还是级联。设定中断类型号。设定优先排队规则。设定中断处理结束时的结束规则。,9.3.4 8259A编程方法,ICW1 ICW1称为:芯片控制初始化命令字,用于启动8259A中的初始化编程。该字写入8位的芯片控制寄存器。写ICW1的标记为:A00,D41。,9.3.4 8259A编程方法,ICW1 ICW1可完成初始化任务的前三项:复位芯片。设定中断请求信号有效的形式。设定是单片,还是级联。注意:在写入ICW1后,除完成ICW1规定的功能外,同时复位芯片,隐含有清IMR、默认中断优先级为IR0IR1IR7等的功能。,9.3.4 8259A编程方法,举例:PC/XT机设置的ICW1=13H,端口地址为20H。MOV AL,13H OUT 20H,AL;单片,上升沿有效,写ICW4 13H=00010011,9.3.4 8259A编程方法,ICW2 ICW2:中断类型码命令字。该字写入8位的中断类型寄存器。写ICW2的标记为:A0=1。D7D3(T7T3):中断向量类型码。中断类型码的低3位由中断请求的引脚IR0IR7决定(000111)。D2D0:在8086/8088系统中不用(000)。,9.3.4 8259A编程方法,A0 D7 D6 D5 D4 D3 D2 D1 D0,IBM PC/XT机中由8259A管理的8级外部中断IR0IR7的中断类型码为08H0FH。举例:设置的ICW2=08H,端口地址为21H。MOV AL,08H OUT 21H,AL IR3对应的中断类型码为0BH。,9.3.4 8259A编程方法,ICW3 ICW3:主片/从片的初始化命令字。它只用于级联方式。该字写入8位的主/从标志寄存器。写ICW3的标记为:A01。对于主8259A(输入端SP#1)对于从8259A(输入端SP#0),9.3.4 8259A编程方法,ICW3 对于主8259A(输入端SP#1)D7D0(S7S0):当某位为1时,表示该位对应的IRi端接一从片8259A。例如:当ICW3F0H时,则表示在IR7、IR6、IR5、IR4引脚上接有8259A从片,而IR3、IR2、IR1、IR0引脚上未接从片。注意:清0的位,其对应的IRi上可直接连接外设来的中断请求信号端。,9.3.4 8259A编程方法,ICW3 对于从8259A(输入端SP#0)控制字格式如图所示,9.3.4 8259A编程方法,ICW4 ICW4:方式控制初始化命令字。该字写入8位的方式控制寄存器。写ICW4控制字标记为:A0=1。是否需要ICW4由应用决定,只有在需要特殊全嵌套方式、缓冲方式、中断自动结束方式时,才设置ICW4,否则,可不设置ICW4。同时,是否需要ICW4,应在ICW1中指出。当不设置ICW4时,缺省为:非特殊全嵌套方式、非缓冲方式、非中断自动结束方式。,9.3.4 8259A编程方法,注意 初始化从写入ICW1开始,然后顺序写入ICW2、ICW3、ICW4。虽然ICW2、ICW3、ICW4地址相同,但顺序是固定的,因而不会发生错误。ICW1、ICW2是必须写入的。是否写入ICW3、ICW4,分别由ICW1的SNGL和IC4位的状态决定。,9.3.4 8259A编程方法,操作过程编程 初始化完成后,8259A进入响应中断的工作状态,准备接收中断请求信号。在8259A工作其间,可以通过操作命令字OCW使其以不同的方式操作。操作过程编程主要完成以下任务:对中断请求的屏蔽、优先级循环控制、中断结束方式、对内部控制寄存器的查询等。8259A有三个操作命令字:OCW1、OCW2、OCW3。,9.3.4 8259A编程方法,OCW1 写OCW1的标记为:A0=1。OCW1用来写入IMR寄存器。当某一位Mi=1时,则对应于该位的中断请求就受到屏蔽;当某一位Mi=0时,则对应于该位的中断请求得到允许进入系统。例如:OCW1=15H,则IR4、IR2和IR0引脚上的中断请求被屏蔽,其他引脚上的中断请求则允许进入系统。,9.3.4 8259A编程方法,OCW2 OCW2用来设置中断优先级循环方式和中断结束方式的操作命令字。写OCW2的标记为:A0=0、D3=D4=0。OCW2具有两方面的功能:可以用来设置8259A采用优先级循环方式;它可以组成中断结束命令。,9.3.4 8259A编程方法,OCW2 R位:决定系统的中断优先级是否按自动循环方式设置。1:采用优先级自动循环方式;0:采用优先级非自动循环方式。优先级自动循环方式用于多个中断源其优先级相等的场合。SL位:决定OCW2中的L2、L1、L0是否有效,如为1则3位都有效,否则为无效。,9.3.4 8259A编程方法,OCW2 EOI位:中断结束命令。当EOI为1时,使当前ISR中的对应位ISRi复位。L2、L1、L0有两个功能:SL为1时,L2、L1、L0有效。一是当OCW2为特殊的中断结束命令时,L2、L1、L0将指出要清除当前ISR中的哪一位;二是当OCW2为特殊的优先级循环方式命令时,L2、L1、L0将指出循环开始时哪个中断的优先级最低。,OCW3 OCW3是多功能操作命令字。写OCW3的标记为:A0=0、D4=0、D3=1。OCW3命令字有3项功能:设置和撤消特殊屏蔽方式;设置中断查询方式;设置对8259A内部寄存器的读出命令。,9.3.4 8259A编程方法,OCW3 D7位:无关位,可设为任意值,一般设为0。D6位:ESMM位,即允许特殊屏蔽方式位。该位为1时SMM位才有意义。D5位:SMM即特殊屏蔽方式位。1:设置特殊屏蔽方式;0:清除特殊屏蔽方式。D4、D3位:是特征位,01B。,9.3.4 8259A编程方法,OCW3 D2位:P位。1:该OCW3用做查询命令 0:非查询方式。D1、D0位:RR位和RIS位。这两位的组合用于指定对中断请求寄存器(IRR)和中断服务寄存器(ISR)内容的读出。D1D0=10时,表明紧接着要读出IRR的值;D1D0=11时,表明紧接着要读出ISR的值。,9.3.4 8259A编程方法,特殊屏蔽方式的设置与清除 ESMM、SMM=11时:选择特殊屏蔽方式 ESMM、SMM=10时:清除特殊屏蔽方式 选择特殊屏蔽方式:OCW3为01101000B(68H)清除特殊屏蔽方式:OCW3为01001000B(48H)查询的设置与清除 P=1时:选择查询方式 P=0时:选择非查询方式 选择查询方式:OCW3为00001100B(0CH)选择非查询方式:OCW3为00001000B(08H),9.3.4 8259A编程方法,读8259A的状态(IMR、IRR、ISR)1、读IMR:IN AL,21H(A0=1的端口)2、读IRR:MOV AL,00001010B OUT 20H,AL IN AL,20H 3、读ISR:MOV AL,00001011B OUT 20H,AL IN AL,20H,9.3.4 8259A编程方法,在IBM PC/XT机中,只用1片8259A中断控制器,用来提供8级中断请求,其中IR0优先级最高,IR7优先级最低。它们分别用于日历时钟中断、键盘中断、保留、网络通信、异步通信中断、硬盘中断、软盘中断及打印机中断。8259A片选地址为20H、21H。,9.3.4 8259A编程方法,IBM PC/XT中8259A 的使用步骤:1、初始化 2、送中断向量入口地址 3、中断子程序结束 4、中断嵌套,1、初始化MOV AL,13H;写ICW1,单片,边沿触发,要ICW4OUT 20H,ALMOV AL,8;写ICW2,中断类型号从8开始 OUT 21H,ALMOV AL,0DH;写ICW4,缓冲工作方式,;8088/8086配置OUT 21H,ALMOV AL,0;写OCW1,允许IR0IR7全部8级;中断请求OUT 21H,AL,2、送中断向量入口地址 例如,异步通信中断(COM1)IR4。中断向量类型码为8+4=12(0CH)。中断入口地址的偏移量(IP值)与段基址(CS)在入口地址表中的存放地址为:124=48(30H),49(31H),50(32H),51(33H)。其中30H、31H存放指令指针IP;32H,33H存放指令段码CS。,3、中断子程序结束 由于采用一般中断结束方式,因此,在中断子程序结束前必须发EOI命令和IRET命令。MOV AL,20H;写OCW2命令,使ISR相应位;复位(即发EOI命令)OUT 20H,AL IRET;开放中断允许,并从中断返回 4、中断嵌套 为了使中断嵌套,即在中断响应过程中,允许比本中断优先级高的中断进入,只要在进入中断处理程序后,执行开中断指令STI即可达到此目的。,表 IBM PC/AT机中断源和中断类型号,7.3.5 8259A应用举例,作业,9.6 9.9,