第七章 中断.docx
《第七章 中断.docx》由会员分享,可在线阅读,更多相关《第七章 中断.docx(23页珍藏版)》请在冰点文库上搜索。
第七章中断
第七章中断接口技术
内容提要:
1.中断的基本概念;
2.8086系统的中断源、矢量中断;
3.8259A的功能、结构特点、中断响应过程、编程;
4.8259A的应用举例;
5.8259A编程实验。
学习目标:
1.掌握8086内部中断的特点;
2.掌握中断的基本概念,掌握对外部中断响应的区别;
3.深刻理解中断类型码、中断矢量和中断向量表的概念,以及如何对中断服务程序寻址;
4.了解8259A的编程结构,理解8259A工作方式、有关命令和初始化编程及其在PC机中应用。
难点:
8259A工作方式、命令的理解。
学时:
6
7.1.概述
一.中断的基本概念
中断:
是指CPU在正常运行程序时,由于内部或外部事件引起CPU暂时中止执行现行程序,转去执行请求CPU为其服务的那个外设或事件的服务程序,待该服务程序执行完后又返回到被中止的程序这样一个过程。
中断源:
能发出中断申请的外设或引起中断的原因。
中断源种类:
I/O设备、数据通道、实时时钟、故障源、软件中断。
1.为什么要用中断?
中断技术的优点:
(1)并行操作:
指CPU和多个外设并行操作;分时操作:
指CPU可分时执行多个用户程序和多道作业;
(2)实现实时处理;
(3)故障处理。
;
(4)基本功能调用:
在PC机中,通过软件中断可实现DOS功能调用和基本BIOS调用。
2.中断类型
(1)硬中断:
也称为外部中断,它可分为两种:
①一种是由中断电路发生的中断请求信号在CPU的INTR端引起的中断,也称可屏蔽中断。
可屏蔽中断:
凡是微处理器内部能够屏蔽(IF=0)的中断。
②另一种是CPU的NMI端引起的中断,也称不可屏蔽中断。
不可屏蔽中断:
凡是微处理器内部不能够屏蔽(不受IF状态影响)的中断。
(2)软件中断:
也称内部中断,是指程序中使用INT指令引起的中断。
3.中断系统的功能
中断系统是指实现中断而设置的各种硬件与软件,包括中断控制逻辑及相应管理中断的指令。
中断系统应具有以下功能:
(1)实现中断请求的检测、中断响应、中断服务与返回;
(2)能实现中断优先级排队;
(3)能实现中断嵌套。
二.中断的处理过程
大致可分为:
中断请求、中断响应(关中断、保护断点、查找中断源等)、保护现场、开中断、返回五步。
(1)中断请求
CPU外部必须设置一个中断请求触发器锁存中断请求信号,以便CPU在现行指令周期结束时采样,还可设置中断屏蔽触发器。
见下图。
(2)中断响应
中断响应的条件:
1有中断请求;
2外设中断没有被屏蔽;
3CPU允许中断;
4当前指令执行完。
不可屏蔽中断申请:
CPU执行完当前指令后就响应;
CPU响应中断要自动完成下列几步操作:
① 发中断响应信号
,同时内部关中断(IF←0),以禁止其它可屏蔽中断请求;
② 把F以及程序断点处的CS、IP内容压栈,以便中断处理完后能正确地返回主程序;
③ 中断服务程序入口地址段地址→CS,偏移地址→IP。
(3)中断处理
程序员需在中断服务程序中,做以下事:
① 关中断;
2保护断点;
3识别中断源:
查询中断,向量中断;
4保护现场;
5执行中断服务程序;
6恢复现场;
7开中断;
8返回。
中断返回指令使得CPU自动地将堆栈中保存的F和程序断点处的CS、IP值弹到F、CS、IP中,使CPU返回主程序断点处继续执行主程序,同时中断返回指令使得IF自动恢复响应中断前的开中断状态。
三.中断优先级
当系统中有多个中断源时,需要考虑优先权问题,即确定CPU首先为哪个中断源服务,以及服务的次序。
优先权:
根据中断源要求的轻重缓急,排好中断处理的优先次序,即优先级。
当CPU正在处理中断时,也能响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,即所谓多重中断的问题。
确定中断源的优先权一般采用以下方法:
1.软件查询优先方式:
是最简单的中断优先处理方式,8个外设中断请求组合起来,作为一个端口,赋以设备号,接口电路见P265图7-4。
把各个外设的中断请求信号相“或”后,作为INT信号,这样任何一外设有中断请求都可以向CPU发出INT信号。
CPU响应中断后,把中断寄存器的状态作为一个外设信息读入CPU,逐位检测其状态,若检测出某位有中断则转入响应的中断服务程序入口。
优点:
不需要有判断优先级的硬件排队电路。
缺点:
在中断源较多的情况下,由询问跳到相应的中断服务程序的入口时间长。
2.硬件优先权排队电路:
实现硬件查询的优先级中断链电路接口电路见P266图7-5。
来自CPU的中断响应信号从A设备开始串行地往下传送:
当A设备有“中断请求”时,则“中断响应”信号在门A2处被封锁,不再下传,使后面的设备得不到CPU的“中断请求”信号。
同时A设备的“数据允许”线EN变为有效,允许A设备使用数据总线,将其中断标志放上数据总线进入CPU。
当A设备无“中断请求”时,“中断响应”信号可以通过A2门传给下一个设备B。
3.中断优先级编码电路:
用硬件编码器和比较器组成的中断优先级排队电路见教材P267图7-6所示。
四.中断的嵌套
1.中断嵌套的定义
2.中断嵌套与单级中断的区别:
(1)加如屏蔽本级和较低级别中断请求环节;
(2)在中断服务前要开放中断;
(3)中断服务结束之后,为了使恢复现场过程不受到任何中断请求的干扰,必须执行关中断指令,然后才能恢复现场;
(4)恢复现场后,应该执行开中断指令,以便允许任何其他的等待着的中断请求有可能被CPU响应。
只有在执行完开中断指令后面的一条指令后,中断才被开放。
7.2.8086/8088中断系统
一.8086系统的中断源
8086CPU总共允许有256级中断,按产生的原因,系统有如下中断源:
二.外部中断
1.不可屏蔽中断NMI
边沿触发,正跳沿有效,此类中断不受中断允许标志位的限制,也不能用软件进行屏蔽。
当NMI端有一个上升沿触发信号时,CPU就会在结束当前指令后,自动从中断向量表中找到类型2中断服务程序的入口地址,并转去执行。
NMI是一种比INTR优先级高的中断请求。
2.可屏蔽中断INTR
电平触发,高电平有效,该信号若为高电平,表示I/O设备向CPU发出中断申请,若IF=1,CPU允许中断,就会在结束当前指令后响应该外设的中断请求,进入可屏蔽中断的处理程序。
三.内部中断
内部中断是通过软件指令或软件陷阱而调用的非屏蔽中断(指不受IF状态影响),这是由程序运行的状态和指令代码执行后自动启动而不是由外界中断请求来调用的。
内部中断按其性质又可分为软件陷阱和软件中断。
软件陷阱是指:
在某些指令执行期间FR的标志位满足设定的条件或CPU的状态符合某种情况从而触发CPU内部逻辑去启动所需要的中断服务子程序,如除法出错中断和单步中断。
软件中断是指通过指令来调用中断服务子程序。
类型:
8086的内部中断有溢出中断、除法错中断、断点中断、软中断及单步中断。
1.除法溢出中断
当除数为0或除法结果商超出规定存放范围时,此时将自动产生类型号为0的内部中断。
注意点:
没有对应的中断指令。
2.溢出中断
溢出中断是通过INTO中断指令实现的。
该指令跟在有符号数的算术运算指令以后,当在程序执行过程中,遇到INTO指令,且此时溢出标志OF=1时,则产生一个中断类型为4的中断,并转入溢出中断处理。
例:
MOVBL,126
MOVAL,5
ADDAL,BL→执行到此指令后只能将OF置1
INTO→执行到此产生中断
3.软中断
是系统以软中断指令INTn方式实现的,n为中断类型号,5≤n≤255,0~4中断类型号作为专用中断的类型号,不允许用户修改;
5~3FH为系统备用中断,一般不允许用户改作其它用途,并且其中许多中断已被系统开发使用,如10H~1FH为ROMBIOS,21H为DOS功能调用,40H~FFH为用户可用的中断,用户可用INTn使用,也可作为可屏蔽中断的类型号。
4.单步中断
为了用户调试上机方便,当TF=1时,则每执行一条指令后,可以产生一个类型号为1的中断。
在中断处理程序的控制下,可以给出有关寄存器的内容或状态标志位的状态,以便了解程序的执行情况。
5.断点中断
断点中断也是提供给用户的一种程序调试手段。
在相应的程序语句后设置断点,就可以分段落调试程序,从而避免单步调试的冗长和繁琐。
设置断点,实际上就是在用户程序的指定点(即对应的某一个存储单元,该单元一定是某条指令的第一个字节存储单元)用单字节的中断指令INT3来代替程序中原有指令的第一个字节代码(操作码),同时把原有指令第一个字节操作码保存起来。
当执行到断点位置时,就会执行中断指令INT3,进入类型码为3的中断服务子程序,显示一系列寄存器值和一些重要信息,供用户判断。
断点中断返回前,中断服务程序还负责恢复设置断点时原程序中被INT3指令所替换的原来指令的第一个字节的操作码。
然后修改断点地址,返回主程序再从被恢复的那条指令继续执行。
6.内部中断的特点:
(1)中断类型码或者包含在指令中,或者是预先规定的;
(2)不执行INTA总线周期;
(3)除单步中断外,任何内部中断都无法禁止;
(4)除单步中断外,任何内部中断的优先级都比任何外部中断的优先级高。
7.中断优先级见P272表7-1所示。
四.中断矢量表
定义:
将所有的中断处理程序的入口地址都集中在一起,构成一个中断矢量表。
特点:
每个入口地址占4个字节,高地址的2个字节单元存放中断处理程序的段地址,低地址的2个字节单元存放中断处理程序的段内偏移地址。
8086/8088的中断向量表结构如教材P272的图7-10。
例:
设某中断源的类型码为13H,该中断源的中断服务程序的入口地址为FF00H:
2200H,试画出中断矢量表。
解:
n=13,则4n=13H*4=4CH
中断矢量表如下:
当中断类型码为n时,则中断向量表指针为4n,则有:
五.中断类型号的获取(两种情况)
①对于系统专用中断,系统将自动提供0~4中断类型号,(溢出中断需在算术运算指令之后执行INTO指令,断点中断需执行INT3指令)从而能自动转到中断处理程序中去;
②对于可屏蔽中断INTR,则需外接接口电路。
目前主要是利用8259A中断控制器来产生外设的中断类型号。
六.8086中断处理流程
1.CPU在获得中断类型号后,先自动将标志寄存器入栈,并自动将IF和TF清零;
2.然后自动将当前代码段寄存器CS和指令指针寄存器IP内容入栈,并根据中断类型号n从中断矢量表中取出中断处理程序的段地址送入CS;再从中断矢量表中取中断处理程序的偏移地址值送入IP,从而实现向中断处理程序的转移;
3.在中断处理程序完成后,用中断返回指令IRET恢复断点,从栈中弹回断点的偏移量和段地址值到IP和CS中,并恢复FR的内容,从而实现了向被中断程序的返回。
注意点:
在处理程序的开始用开中断指令打开中断,以便实现中断嵌套。
7.3.可编程中断控制器8259A
主要功能:
①具有8级中断优先级控制,通过级连可扩展至64级中断优先级控制;
②每一级中断都可以屏蔽或允许;
③在中断响应总线周期,8259A可提供相应的中断类型码;
④有多种中断管理方式,可通过编程选择。
一.8259A的内部结构与功能
1.8259A的内部结构
由上图可见8259A有8个基本组成部分:
(1)中断请求寄存器IRR
8位,每一位对应一个I/O设备,用来记录发生中断请求的外设。
当某一外设(I/O设备)发出中断请求信号IRQ时,对应位被置“1”。
简言之:
用来存放要请求服务的所有中断请求信号。
(2)中断服务寄存器ISR
8位,用来存放正在被服务,包括尚未服务完毕而中途被别的中断打断了的所有中断级。
(3)优先权判决电路PR
用来识别各中断请求信号的优先级别。
当多个中断请求信号同时产生时,由判优电路判定哪一个中断请求具有最高优先权,若有中断正在被服务,则还需与ISR的当前中断服务优先级相比较,以决定是否将8259A的中断申请线INT上升为高电平。
(4)中断屏蔽寄存器IMR
8位,对IRR起屏蔽作用,屏蔽位仅对对应的中断请求起作用。
(5)控制逻辑
用于向8259A内部其它部件发控制信号,外部向CPU发INT信号,接收CPU发来的
信号,控制8259A进入中断服务状态。
控制逻辑是8259A全部功能的核心,包括一组方式控制字寄存器和一组操作命令字寄存器,以及相关的控制电路。
(6)数据总线缓冲器
8位双向三态缓冲器,是8259A与CPU之间数据接口。
当CPU对8259A进行读操作时,数据总线缓冲器用来传输从8259A内部读至CPU的数据/状态信息和中断类型码,写操作时由CPU向8259A内部写入控制命令字。
(7)读/写控制逻辑
用于控制对8259A的读、写操作。
控制信号有:
、
、
、A0共同控制,完成规定的操作。
8259A芯片内可写的寄存器有:
各种命令寄存器,可读的寄存器有:
IRR、ISR、IMR等状态寄存器。
(8)级连缓冲器
多片8259A可级连使用,最多可以组成64级中断优先级控制,此时一片8259A作主片,另外1~8片作从片,主从片的CAS0~CAS2并接在一起,作为级连总线。
在中断响应过程中,主片的CAS0~CAS2为输出线,从片的CAS0~CAS2为输入线。
在第一个
负脉冲结束时,主片把被响应的中断请求的从片编码送入CAS0~CAS2级连总线。
从片接收后,将主片送来的编码与自己的编码相比较,若相同,表明从片被选中,则在第二个中断响应总线周期把中断类型码送至D7~D0,供CPU读取。
见下图。
2.8259A的中断优先级管理方式
(1)完全嵌套方式:
8259A最常用和最基本的一种工作方式,按固定优先级别来管理中断的方式。
(2)自动循环方式:
适用于系统中多个中断源的优先级相等的情况。
中断源的优先级别将随着中断响应过程的结束而改变的中断优先权管理方式。
(3)特殊循环方式:
用于中断源的优先权需要任意改变的情况。
通过在主程序或中断服务程序中发出特殊循环方式操作命令来指定某个中断源的优先级别为最低级,而其余中断源的优先级别也随着循环变化的中断优先管理方式。
(4)特殊屏蔽方式:
可使优先级低的中断也能得到响应。
(5)查询排序方法:
用软件查询的方式来响应与8259A相连接的8级中断请求,此时8259A的INT引脚可不连接到CPU的INTR引脚,或者CPU正在处于关中断,所以CPU必须不能响应从8259A来的中断请求。
CPU若要了解有无中断请求,必须先用操作命令字发查询命令到8259A,然后再用输入指令读取IRR寄存器的状态,并识别当前有无中断请求及优先级最高的中断请求。
3.8259A中断结束方式:
中断请求被CPU响应时,8259A中的中断服务寄存器ISR中的对应的位被置“1”,表示CPU正在执行ISX为1的中断服务程序,要求在中断服务程序中或末尾通过适当的手段将正在执行的ISX位清“0”。
有两种清“0”的方法:
在中断服务程序结束之前向8259A发出EOI命令;在第二个
响应信号的后沿之后由8259A自动清除。
(1)EOI命令方式
在中断服务程序末尾向8259A发出中断结束命令,清除ISR中的相关位,表示中断服务程序已经结束。
普通EOI命令:
自动清除ISR中所有已经置位的优先级最高的那一位,适用于完全嵌套方式的中断结束,因为此时正在服务的中断源必定是优先级最高的。
特殊EOI命令:
适用于不工作在完全嵌套方式的中断结束,因为此时ISR中的优先级最高的那一位不一定就是正在服务的中断级别,因而必须采用特殊EOI命令。
(2)自动EOI方式
采用此方式时,在第二个
响应信号的后沿由8259A自动执行普通EOI操作,复位ISR中已经置位的优先级最高的位。
4.8259A的芯片引脚
见下图。
(1)
:
片选信号,输入,低电平有效,当
=0时,8259A被选中。
(2)
、
:
读、写命令信号,输入。
D7~D0
010CPU写命令控制字到8259A
001CPU从8259A读状态字/数据/中断类型码
(3)D7~D0:
8位双向三态数据总线,传送命令控制字、状态字和中断类型码和数据。
(4)IR7~IR0:
8根中断请求输入线。
(5)INT:
中断请求输出线。
(6)
:
CPU发给8259A的中断响应信号,输入,低电平有效。
(7)A0:
片内地址选择输入线,8259A有两个I/O端口地址。
(8)CAS0~CAS2:
级连线,8259A单片使用时无效。
采用级连方式时,作为主片的8259A,它们是输出线;作为从片的8259A,它们是输入线。
(9)
/
:
级连/允许缓冲信号,双向,低电平有效。
在缓冲方式中,该引脚为输出线,控制数据总线缓冲器的接收或发送,作
用,级联时主从片由ICW4的M/S位确定;当8259A工作于非缓冲方式时,该引脚为输入线
,当
=1的是主片,
=0的是从片。
(10)INT:
中断请求信号,输出,高电平有效。
(11)IR0~IR7:
外设中断请求输入端,高电平有效。
从IR0~IR7上输入的中断请求信号被命名为IRQ0~IRQ7。
(12)Vcc、GND:
+5V电源和地线。
5、8259A的中断响应过程(顺序)
1.当中断请求线(IR0~IR7)上有一条或若干条变为高电平,则使IRR的相应的位置1;
2.当IRR的某一位或若干位被置1后,若IMR中相应的位为1,则屏蔽该中断请求,若IMR中相应位为0,则中断请求送PR;
3.PR把接到的中断请求的最高优先级与ISR中在服务中断级比较,若前者级别高于后者,或CPU不在服务中,则置INT为高电平,否则INT低电平;
4.CPU采样到INT为高后,响应中断进入连续的两个可屏蔽中断响应周期;
5.8259A接到第一个
负脉冲后,将对应的ISR位置位,而相应的IRR被复位;
6.8259A接到第二个
负脉冲后(第二个中断响应周期),在该脉冲期间,8259A向CPU发出中断类型码。
7.若8259A处于AEOI(自动中断结束)方式,则第二个
负脉冲结束时,相应的ISR位被复位。
否则(工作在非自动中断结束方式)要等到CPU向8259A送内含中断结束(EOI)命令的OCW2后,相应的ISR位才被复位。
至此,CPU根据中断类型码,从中断矢量表中获取对应的中断服务程序入口地址进入中断服务。
二.8259A的初始化命令字及其编程
在8259A开始正常工作之前,必须用初始化命令字建立起8259A操作的初始状态。
8259A的初始化是通过CPU对8259A送4个方式控制字ICW1、ICW2、ICW3、ICW4以及3个操作命令字OCW1、OCW2和OCW3。
由于8259A只占用两个I/O端口地址,但要写入四个方式控制字和三个操作命令字,因而其各寄存器的读写是I/O地址和特征位及顺序配合完成的:
写入方式控制字必须按照ICW1~ICW4的顺序进行。
1.初始化命令字:
有ICW1~ICW4四个。
① ICW1
写入条件:
=0、A0=0、特征位的D4=1。
各位作用:
D0:
D0=1,要写ICW4;D0=0,不需要写ICW4,对于8086CPU,要写ICW4;
D1:
D1=1,单片方式;D1=0,级连方式;
D3:
D3=1,中断请求输入线IR0~IR7为高电平有效的电平触发方式;D3=0,中断请求输入线IR0~IR7为上升沿有效的边沿触发方式;
D2、D5~D7:
8086CPU系统无意义,可全写“0”。
② ICW2
写入条件:
跟在ICW1之后,
=0、A0=1。
各位作用:
D7~D3:
规定中断类型码的高五位(T7~T3);
D2~D0:
无意义,可全写0。
注意点:
中断类型码的低3位由IR0~IR7的下标编码确定。
③ ICW3
写入条件:
跟在ICW2之后,
=0、A0=1且ICW1的D1=0,使用在级连方式。
主8259AICW3各位作用:
若某个IR上接有8259A,则对应的位写“1”,否则写“0”。
从8259AICW3各位作用:
D2D1D0:
表示接入主8259A的IR端的编码;
D7~D3:
无意义。
注意点:
主片和从片的ICW3必须不同。
④ ICW4
写入条件:
跟在ICW2之后(若无ICW3)或者跟在ICW3之后(若有ICW3),特征位D7~D5均为0,
=0、A0=1且ICW1的D0=1。
各位作用:
D4:
D4=1,特殊完全嵌套方式,一般作为级联时主片的方式,工作在该方式时与工作在一般完全嵌套方式仅一点不同:
在中断处理过程中,对优先级相等的同级中断也给予响应,能实现同级中断嵌套;
D4=0,一般完全嵌套方式,一般作为级联时从片的方式,或单片使用时的方式;
D3:
D3=1,缓冲方式,是指8259A和DB之间需加一缓冲器(提高DB带负载能力),此时
/
作为输出线
,用以锁存或开启缓冲器;
D3=0,非缓冲方式,
/
作为主从片选择
。
D2:
D2=1,在D3=1时(缓冲方式),主片;
D2=0,在D3=1时(缓冲方式),从片。
在D3=0时,D2无意义。
D1:
D1=1,自动中断结束方式(AEOI);
D1=0:
非自动中断结束方式。
D0:
D0=1,8259A用于80X86CPU系统;
D0=0,8259A用于非80X86CPU系统。
ICW1~ICW4写入8259A后,IR0~IR7优先级固定不变,优先级由高到低的顺序依次是:
IR0、IR1、IR2、…、IR7,清零ISR、IMR,处于普通屏蔽方式,对A0=0的端口地址执行读操作时,读取的是IRR的状态。
2.操作命令字
有OCW1、OCW2、OCW3三个,可随时动态写入,没有顺序,需写什么就写什么。
① OCW1(A0=1)
用于实现中断屏蔽,也称屏蔽操作字,各位分别对应于IR0~IR7。
被写入8259A中断屏蔽寄存器IMR中。
各位作用:
为1,屏蔽对应的中断请求;
为0,不屏蔽对应的中断请求。
② OCW2(A0=0)
用于控制中断结束、优先权循环等。
写入条件:
A0=0并且特征位D4D3=00。
各位作用:
D7:
D7=1,中断优先顺序是循环轮换的,工作在循环优先级;
D7=0,中断优先顺序是固定不变的,工作在固定优先级。
D6:
D6=1,D2~D0位将指明一个中断级;
D6=0,D2~D0位无意义。
D5:
D5=1,执行中断结束操作,(用于非自动中断结束方式)用作中断结束命令EOI,
8259A接到中断结束命令后,将ISR中对应的或指定的置1位清0;
D5=0,不执行中断结束操作。
D2~D0:
(D6=1才有意义)指