中断什么是中断当CPU正常运行程序时,由于随机的事件(包括内部事件和外部请求),引起CPU暂时中止正在运行的程序,转去执行请求中断的外设(或内部事件)的中断服务程序,中断服务结束后再返回被中止的程序,这一过程成为中断。中断技术对实时微机控制系统来说特别有效,也广泛用来应急事件的处理,如电源掉电,硬件故障,传输错,存贮错,运算错及操作面板等均需采用中断技术.微处理器3种中断技术示意图如下所示+1#2#3#外设中断请求外设中断请求1#2#3#外设中断请求外设提供设备标志码INTR1INTR2INTR3CPUCPUINTRDOD7INTRCPUD1(a)单线中断(b)多级中断(c)矢量中断中断的过程中断请求原程序中断处理程序CPU执行流程中断服务程序1中断服务程序2非预料事件1非预料事件2主程序子程序调用返回一、中断请求和中断源引起中断的因素很多,将发出中断申请的外设或内部原因,称为中断源。外设:例如输出设备请求输出、输入设备通知CPU已收到一个字符、外设故障、传输错误、定时器时间到等;内部:系统掉电、硬件故障、软件错误、断点或单步等。共同点:需要CPU进行相应的处理边沿请求和电平请求二、中断优先权和中断判优给每个中断源指定一个优先权,称为中断优先权当多个中断源同时发出中断请求时,CPU按照中断优先权的高低顺序,依次响应。软件判优:P289图7.11硬件判优并行判优:P290图7.12串行判优:P290图7.138软件查询判优CPU响应中断后,转入执行一特定地址的中断服务程序,该中断服务程序查询状态口,确定发出中断请求的外设,然后进行相应的处理。IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7D0D1D2D3D4D5D6D7INTR(到CPU)IORY中断请求F/F图7.11软件判优电路9硬件判优(向量中断法)并行判优网络(向量中断实例)IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7中断屏蔽寄存器IMR中断在服务寄存器ISR优先级判别器中断请求寄存器中断控制逻辑中断矢量寄存器由中断请求决定INTAINTR图7.12矢量优先级控制器原理图10硬件判优(链式判优法)链式判优电路与并行判优不同,链式判优是根据中断源在中断判优链上的物理位置来决定其优先级别的,越靠近CPU的中断源的级别越高。其判优方法如下图所示。+5VINT到CPUINT0INT1INT2EIEOEIEOEIEO中断源中断源中断源0#1#2#图7.13链式判优电路三、中断响应中断响应CPU中断现在正在进行的处理任务,转向中断请求相对应的处理程序的过程。中断响应解决的问题保护断点保护现场CPU关中断转到中断处理程序:控制转移断点和中断现场断点:是指CPU执行的现行程序被中断时的下一条指令的地址,又称断点地址。中断现场:是指CPU转去执行中断服务程序前的运行状态,包括CPU内部各寄存器等。1000:150H、、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、、PUSHAX、、、、IRETCPU在执行此指令时,某中断源发申请中断;CPU在执行完该指令后,转去执行中断子程断点断点概念:中断响应在指令的边界处进行四、中断处理和中断服务程序处理中断源,完成其所要求功能的程序,称中断服务程序(中断例行程序、中断子程)。CPU执行流程中断服务程序1中断服务程序2非预料事件2非预料事件1非预料事件是指事件发生的时间无法预知,即中断源何时产生中断不确定,是随机的。但事件的性质及处理方法则是已知的,确定的,即中断服务程序是事先编写好的,只是何时执行未知。中断源产生中断的随机性,使中断服务程序的执行也具有随机性,即何时执行中断服务程序不是在程序中安排好的。中断处理程序PUSHAXPUSHBX、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、、POPBXPOPAXIRET保护寄存器恢复寄存器处理程序主体中断返回CPU控制权从中断服务程序转移到被中断程序的过程返回断点清除“在服务”触发器恢复现场各种通用寄存器FR8088CPU的按中断源的不同,中断分为内中断和外中断。1、内中断(软中断)指CPU执行某些特殊操作或由INT指令引起的中断①被零除操作或OF=1时执行INTO指令引起②使用DEBUG中的单步或断点设置操作引起③执行INTn指令引起中断分类2、外中断(硬中断)8088GNDA14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCCA15A16/S3A17/S4A18/S5A19/S6(HIGH)(SSO)MN/MXRDRQ/GT0(HOLD)RQ/GT1(HLDA)LOCK(WR)S2(IO/M)S1(DT/R)S0(DEN)QS0(ALE)QS1(INTA)TESTREADYRESET指外部芯片通过CPU的INTR引脚或NMI引脚发出中断申请引起的中断。当INTR上有高电平信号当NMI上有上升沿信号可屏蔽中断由INTR引脚引起的中断,称可屏蔽中断。CPU是否响应INTR引脚上的中断请求取决于IF标志:IF=1,CPU响应INTR引脚上的中断请求IF=0,CPU不响应INTR引脚上的中断请求即当IF=0时,将INTR引脚上的中断申请屏蔽。非屏蔽中断由NMI引脚引起的中断,称非屏蔽中断。当NMI引脚上产生上升沿信号,CPU必响应此中断请求,即NMI引脚上的中断请求不受IF标志的控制,IF不能屏蔽NMI引脚上的中断请求。硬件中断和软件中断早期中断概念的引入,是为解决CPU与外设间的速度匹配问题,提高CPU的工作效率。中断源主要是由外部硬件产生。当今的中断技术,不再限于外部硬件产生中断(称硬件中断或外中断),还可由CPU内部产生(如被零除操作),或者由程序预先安排,即由指令调用中断服务程序。(称软件中断或内中断)保留(ALT打印机)中断逻辑INTn指令INTO指令除法错误单步TF=1不可屏蔽中断请求IR0IR6IR5IR4IR3IR2IR1IR7可编程中断控制器(PIC)8259AINTn4012CPUINTRNMI08090A0B0C0D0E0F系统定时器键盘保留(打印机)软盘串行通信接口保留(通信)彩色/图形接口8086/8088的中断源当有多个中断源同时产生中断申请时,CPU先响应优先权最高的中断源,再响应优先级较低的中断源。中断优先权优先级高低内中断(除零,INT指令,INTO指令)非屏蔽中断可屏蔽中断内中断(单步)低24外部中断响应与处理过程(续)现行指令结束内部中断?NMI?INTR?TF=1?执行下条指令类信号n类型号2IF=1?类型号1中断响应,得到类型号保护FRTEMPTFIF=0,TF=0保护CS,IP进行中断处理NMI?TEMP=1?执行中断处理恢复IP,CS恢复FRIRET恢复被中断程序的执行YYYYNNNNNNYYYN①取中断类型号N②当前PSW的内容入栈③清IF、TF标志为0④断点的CS入栈⑤断点的IP的入栈⑥取内存单元(0:N×4)字内容送IP取中断子程⑦取内存单元(0:N×4+2)字内容送CS入口地址此时CS:IP指向中断程序的入口,开始执行中断程序。保存现场8086/8088响应中断的过程当中断源产生中断申请后,不论是内中断、非屏蔽中断,还是可屏蔽中断,只要满足响应条件,在执行完当前指令后,CPU内部硬件会自动完成下列响应中断的过程:26中断向量表中断向量表及向量号分配由若干中断服务程序入口地址组成的表例:X86的中断向量分配表如下图教材后面的附录D给出了中断向量号的分配IPCSIPCSIPCSIPCS27中断向量表(续)内中断外中断软中断中断向量地址中断号0--07H对应的服务程序中断号08H--0FH对应的服务程序(8259A的8级中断)中断号10H--1FH对应的服务程序(ROM-BIOS中断调用)中断号20H--2FH对应的服务程序(DOS中断调用)中断号40H--FFH对应的服务程序(系统保留)0000:00Hx40000:08Hx40000:10Hx40000:20Hx40000:40Hx4IPCSIPCS00000H00004H中断向量号0中断向量号1中断向量号255003FCH003FFHIPCSMEMORYMEMORY中断向量表中断向量号分配表1000:150H、、、、、、MOVAH,01INT21HCMPAL,0Dh、、、、、、、、、、PUSHAX、、、、IRET用指令调用中断程序软件中断:用指令调用中断程序响应中断的过程:软中断29软中断分类在PC系列机中,INTn分为两类:ROM-BIOS中断I/O设备控制程序BIOS实用服务程序BIOS特殊中断BIOS专用参数中断DOS中断公开的DOS专用中断(供内核代码专用)未公开的DOS专用中断(供内核代码专用)DOS可调用中断系统功能调用中断DOS保留响应中断的过程:NMI不用判断IF不用得出中断矢量直接进入2号中断处理程序没有中断响应周期早期的包括3个非屏蔽中断源协处理器出错系统RAM奇偶校验错I/O通道校验错8086/8088响应中断的过程是否随机发生是否判断IF转入类型号INTn否否nNMI是否2INTR是是从数据总线获得在每个指令周期的最后一个T状态进行采样,如果为高电平,并且IF标志=1,将进入中断响应状态CPU发出2个中断响应周期INTA,在第二个中断响应周期INTA获得中断矢量号T1T2T3T4第一个总线周期TwTwTITIT1T2T3T4Tw第n个总线周期指令周期(机器周期)INTR…进入中断响应周期响应中断的过程:INTRCPU对INTR的响应时序需要两个连续的中断响应INTA周期,每个占用4个时钟周期第一个INTA周期发出INTA信号,通知外设准备响应中断第二个INTA周期发出INTA信号,接收外设发出的中断向量号P297图7.1734中断响应周期(对INTR)第一个中断响应周期第二个中断响应周期T1T2T3T4T1T2T3T4CLKALELOCKINTAD7~-D0向量号nINTR的一般处理流程、、、、、、、、MOVAL,BLCMPAL,0Dh、、、、、、、、、、、、、、INTR中断请求中断子程序断点几种特殊情况STI对CS和SS进行MOV或POP操作Repeat和lock等前缀指令几种特殊情况、、、、、、STIMOVAL,BLCMPAL,0Dh、、、、、、、、、、、、、、INTR中断请求中断子程序断点内存中断向量表0:0~3FFH1000:150h3000:200h0:N×40:N×4+20:0000、、、、、、0200h3000h、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、、、、MOVBX,CX、、、、、、IRET、、、类型N中断子程某中断源发申请中断,申请执行类型号为N的中断子程响应中断前SS:SP响应中断后SS:SP堆栈01501000(PSW)SS:SP(IP)=0200h(CS)=3000h0:3FFH0:0从中断子程返回断点处,靠的是执行中断子程最后的指令IRET,从堆栈中取出断点地址给CS:IP,继续执行被中断的程序。故中断子程最后应安排IRET指令。1000:150h3000:200h0:N×40:N×4+20:0000、、、、、、0200h3000h、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、MOVBX,CX、、、IRET、、、响应中断前SS:SP响应中断后SS:SP堆栈执行IRET后(IP)(CS)(PSW)01501000(PSW)SS:SP(IP)=0200h(CS)=3000hSTIIPCSPSWCPU和总线控制逻辑(1)条件IF=1NMI=0HOLD=0无内部中断INTRINTAD0~D78259AINTINTAD0~D7