第二节 中断及中断系统
2.1 中断的概念
1、 中断与中断系统
"中断(Interrupt)"是一种操作,它使CPU中止正在执行的程序,而转入称为"中断处理程序(Interrupt Handler)"(或称中断服务程序Interrupt Service,或称中断例程Interrupt Routine)的程序。当中断处理程序执行完后,CPU接着执行被中断的程序(相对于中断处理程序来说,被中断的程序称为主程序)。
为了实现中断功能而设置的硬件和软件系统称为中断系统。
2、 中断源
引起中断的原因或发出中断请求的来源,称为中断源,通常中断源有以下几种:
(1) 通用的I/O设备。如键盘、打印机等。
(2) 数据通道中断源。如磁盘、磁带、光盘等设备。
(3) 实时时种(RTC)。
(4) 故障源。如电源掉电、存储器出错、运算溢出等。
(5) 软件设置的中断源。如中断指令INT产生的中断。
(6) 为调试程序而设置的中断源。如断点中断、单步中断。
根据中断源的性质,可以分为硬件中断和软件中断。硬件中断源产生一个硬件请求信号,该信号连接到CPU的INTR或NMI引脚,使CPU执行中断处理。硬件中断又称为外部中断。软件中断源是CPU根据指令(如INT指令)或内部状态(如运算溢出、单步标志TF)产生的中断又称为内部中断。
3、 中断的用途
(1) 并行操作。有了中断功能后,CPU可以与多个外设并行工作。
CPU在启动某外设后,不必等待该外设,而可以继续执行主程序,这样,CPU与外设并行工作。如果CPU在主程序中启动了另一个外设,则CPU与多个外设并行工作。
当某外设准备好后,主动向CPU发出中断请求,CPU在中断处理程序中对该外设进行处理。中断处理执行完后,CPU又返回主程序执行。
(2) 实时处理。
实时处理即及时处理(在规定的时间内处理)。有了中断功能后,当外设需要CPU处理时,向CPU发出中断请求,CPU立即响应中断,使该请求被立即处理,提高了系统的实时性。
在程序查询方式下,不能保证实时性。因为,当某外设需要处理时,CPU可能正在查询其它外设。
(3) 故障处理。
系统设计人员把系统中可能出现的故障的处理程序设计为中断处理程序,当出现故障时,CPU自动转入相应的中断处理程序,对该故障进行处理,而不需要报告工作人员。
2.2 中断处理过程
二、 中断处理过程
六步:中断请求、中断响应、保护断点和现场、执行中断处理程序、恢复断点和现场、中断返回。
中断处理过程是硬件和软件相结合的过程,中断处理程序是软件,其余过程均为硬件动作。
1、 CPU响应中断的条件
(1) 请求触发器和屏蔽触发器。
中断请求信号必须一直有效,直到CPU响应中断后才能清除,对于每一个中断源,一般用一个"请求触发器"来保存外设的中断请求。
在多个中断源请求中断的情况下,为了增加控制的灵活性,在每个外设的接口电路中,设置一个"中断屏蔽触发器"。只有该触发器为1时,外设的中断请求才会被送到CPU。
具有中断请求触发器和屏蔽触发器的接口电路如图:
注意:
① 中断请求信号只能保持到CPU响应中断,CPU响应中断后必须清除请求信号。可以用CPU的响应信号 清除中断请求信号,或在中断处理程序中用软件清除中断请求信号。上图中,在中断处理程序中用指令:
IN AL,ADD_DATA
清除中断请求信号.
② 上图中,中断屏蔽触发器为1时,外设的中断请求才会被送到CPU。
在主程序中,用指令:
MOV AL,01H
OUT ADD_EN,AL
使中断屏蔽触发器为1。
在某些中断控制逻辑中(如中断控制器Intel 8259A),中断屏蔽触发器为0时,外设的中断请求才会被送到CPU。
(2) CPU允许中断
当CPU标志寄存器中"中断允许标志IF"置1时,CPU才能响应INTR信号线上的请求。否则,即使INTR上有请求,CPU也不响应。
指令STI使IF=1,允许CPU响应INTR请求,称为"开中断"。
指令CLI使IF=0,禁止CPU响应INTR请求,称为"关中断"。
注意:NMI上的中断请求不受IF标志的影响,当NMI上出现请求时,无论IF的值是什么,CPU均要响应NMI上的请求。
(3)在当前指令结束后,CPU响应中断。(执行一条指令所需要的时间,称为一个指令周期。一条指令一般包含几个基本操作,称为总线操作或总线通讯。一次总线操作所需的时间称为总线周期或机器周期。8086的基本总线周期由4个T状态组成:T1、T2、T3、T4)。即CPU在最后一个机器周期的最后一个T状态时,可以响应中断请求。
2、 CPU对中断的响应
当满足上述条件后,CPU响应中断,执行以下任务:
(1) 发出中断响应信号INTA(目的:获得中断类型码)。
(2) 把标志寄存器的值存入堆栈。
(3) 关中断(使标志寄存器中IF=0。目的:禁止CPU响应新的中断请求)。同时使TF=0,禁止单步执行中断处理程序。
(4) 保护断点。即把下一条指令的地址(等于当前CS和IP的值)存入堆栈。(目的:中断处理完后能接着该指令执行)。
(5) 根据中断类型码,从中断向量表中获得中断处理程序的入口地址。
(6) 保护现场。(用PUSH指令把中断处理程序中要改变值的寄存器的值存入堆栈)。
(7) 执行中断处理。
(8) 恢复现场。(用POP指令从堆栈中恢复中断处理程序中改变值的寄存器的值)。
(9) 开中断(用STI指令使IF=1)。
(10) 中断返回(执行IRET指令,从堆栈中取出下一条指令的地址送CS和IP,从堆栈中取出标志寄存器的值,CPU接着该指令执行)。
注意:
① 第(1)~(5)步是CPU的硬件动作。第(6)~(10)步属于中断处理程序软件。
② 中断处理程序中,开中断的时机取决于具体应用。如果该中断处理程序执行期间,不允许CPU响应其它中断,则在中断返回前开中断(如上述顺序),否则在保护现场后就开中断。
2.3 中断的优先权
三、 中断的优先权(优先级)
多个设备使用中断方式与CPU交换数据时,需解决优先级问题。CPU对中断的优先权处理的一般原则是:
(1) 不同级的中断请求同时发生时,先处理优先级高的请求。
(2) 当CPU正在处理低优先级中断的过程中,又出现优先级高的请求,则CPU暂停低优先级中断的处理, 而优先处理高优先级的中断,当高优先级中断处理完后,再接着处理低优先级中断。这种情况称为"多重中断"或"中断嵌套"。
(3) 当CPU正在处理某优先级中断的过程中,出现优先级低的请求,则CPU在处理完该中断后再响应新的请求。
(4) 中断优先级相同的请求同时发生时,按预先规定的次序逐个处理。
CPU处理中断优先级的方法:
1.软件查询方式 软件查询方式要借助简单的硬件电路。把多个设备的中断请求信号相"或"作为向CPU的请求信号, 任意外设有中断请求时,都可以向CPU发出INTR信号。
同时,设计一个状态寄存器,其中每一位标识一个设备的请求情况(如,有请求时,对应位置1)。CPU在中断处理程序中,读入状态寄存器的值,然后逐位检查它们的状态。若发现某位有中断请求,就转入相应的中断处理程序。
设中断优先级排列为:
电源故障>磁盘>磁带>CRT>纸带输入>纸带穿孔>键盘>打印机
部分软件编程为:
IN AL,INT_PORT ;中断请求状态寄存器
TEST AL, 80H ;电源故障(bit7)优先级最高,先查询
JNZ PWZ ;bit7=1,出现电源故障中断请求,
;转入相应的中断处理程序
TEST AL, 40H ;bit6=1表示磁盘中断请求
JNZ DISK ;转入磁盘中断处理程序
┆
2、 硬件优先级排队电路
(1).链式排队电路-菊花链法
在每个外设对应的接口电路上连接一个逻辑电路,这些逻辑电路构成一个链,称为菊花链。
当某个或几个外设请求中断时,优先级排队电路设置中断(F/F),并向CPU发出INTR信号(图中未画出),CPU响应中断时发出INTA信号。INTA信号只能传送到排队电路的前面,因此排队电路前面的外设获得允许信号(图中的中断输出),送出中断类型码。
排队电路后面的外设收不到INTA信号。因此,接口在菊花链中的位置,决定了其优先级,越靠近排队电路前面的外设,优先级越高。
(2)优先级编码集成芯片
在微机中,典型地使用可编程中断控制器Intel 8259管理多个外设的中断请求。在中断控制器内部,有一个优先权编码排队电路,如图所示:
8条中断输入线的任意一条请求信号,经"8到3优先权编码器"5产生三位二进制编码A2A1A0,优先权最高的请求编码为111,优先权最低的请求编码为000。若有多个请求线同时请求,编码器仅输出优先权最高的编码。
当CPU尚未处理任何中断时,"优先权失效"信号为1,此时,任意请求线有请求时,均可以经“或门7”、"与门2”、“或门3”向CPU申请中断,且该中断的编码经过CPU数据总线送至"优先权寄存器6"。 优先权寄存器中总是存放着当前正在处理的中断的编码(B2B1B0)。
当出现新的请求时,新请求的编码A2A1A0送到比较器,只有当新请求的优先级A2A1A0大于正在处理的中断的编码B2B1B0时,比较器输出1,经“与门1”、“或门3”向CPU申请中断,同时,新中断的编码经过CPU数据总线送至“优先权寄存器6”。