中断处理.docx

上传人:b****6 文档编号:8389586 上传时间:2023-01-31 格式:DOCX 页数:26 大小:170.45KB
下载 相关 举报
中断处理.docx_第1页
第1页 / 共26页
中断处理.docx_第2页
第2页 / 共26页
中断处理.docx_第3页
第3页 / 共26页
中断处理.docx_第4页
第4页 / 共26页
中断处理.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

中断处理.docx

《中断处理.docx》由会员分享,可在线阅读,更多相关《中断处理.docx(26页珍藏版)》请在冰豆网上搜索。

中断处理.docx

中断处理

第七章微型计算机中断系统

【回顾】微机系统主机与外部设备之间的数据传送控制方式,中断的概念及处理过程。

【本讲重点】8086中断系统;中断控制器Intel8259A的性能概述,内、外部结构,工作过程,工作方式等。

【讲授内容】

7.1中断的概念及处理过程

一、中断的基本概念

1、中断

从查询式的传输过程可以看出,它的优点是硬件开销小,使用起来比较简单。

但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了主机的利用率。

为了解决这个矛盾,我们提出了中断传送方式,即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU即返回继续执行原来被中断的主程序。

这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。

能够向CPU发出中断请求的设备或事件称为中断源。

微机系统引入中断机制后,使CPU与外设(甚至多个外设)处于并行工作状态,便于实现信息的实时处理和系统的故障处理。

中断方式的原理示意图如图7-1所示。

 

图7-1中断方式的原理

2、中断请求信号的产生

中断方式提高了CPU的工作效率,但是它同时也提高了系统的硬件开销。

因为系统需增加含有中断功能接口电路,用来产生中断请求信号。

以输入方式为例,接口电路如图7-2所示。

图7-2中断请求信号的产生

数据输入的过程当外设发STB→数据入锁存器,中断请求触发器置1→若没有屏蔽则产生INTR→CPU满足条件(允许中断;指令执行完)发

→(进入中断服务子程序)读数据,发

,和地址→清中断请求触发器,数据送D0~D7。

(输出过程请自己思考)

3、中断优先级

当系统中有多个设备提出中断请求时,就有一个该响应谁的问题,也就是一个优先级的问题,解决优先级的问题一般可有三种方法:

软件查询法、简单硬件方法及专用硬件方法。

下面分别介绍:

(1)软件查询法

只需有简单的硬件电路,如将A、B、C三台设备的中断请求信号“或”后作为系统INTR,这时,A、B、C三台设备中只要至少有一台设备提出中断请求,都可以向CPU发中断请求。

进入中断服务子程序后,再用软件查询的方式分别对不同的设备的服务,查询程序的设计思想同查询式,查询的前后顺序就给出了设备的优先级,框图如图所示。

(2)简单硬件方法

以链式中断优先权排队电路为例,

基本设计思想将所有的设备连成一条链,靠近CPU的设备优先级最高,越远的设备优先级别越低,则发出中断响应信号,若级别高的设备发出了中断请求,在它接到中断响应信号的同时,封锁其后的较低级设备使得它们的中断请求不能响应,只有等它的中断服务结束以后才开放,允许为低级的设备服务。

如图所示。

 

(3)专用硬件方式

采用可编程的中断控制器芯片,如Intel8259A。

图7-3中断控制器的系统连接

有了中断控制器以后,CPU的INTR和

引脚不再与接口直接相连,而是与中断控制器相连,外设的中断请求信号通过IR0~IR7进入中断控制器,经优先级管理逻辑确认为级别最高的那个请求的类型号会经过中断类型寄存器在当前中断服务寄存器的某位上置1,并向CPU发INTR请求,CPU发出

信号后,中断控制器将中断类型码送出。

在整个过程中,优先级较低的中断请求都受到阻塞,直到较高级的中断服务完毕之后,当前服务寄存器的对应位清0,较低级的中断请求才有可能被响应。

电路如图图5-11所示。

利用中断控制器可以通过编程来设置或改变其工作方式,使用起来方便灵活。

4、中断响应

中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。

然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。

注意CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。

5、中断服务子程序

CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。

中断服务子程序的一般结构如图7-4所示。

(1)保护现场(由一系列的PUSH指令完成)。

目的是为了保护那些与主程序中有冲突的寄存器,(如AX,BX,CX等),如果中断服务子程序中所使用的寄存器与主程序中所使用的寄存器等没有冲突的话,这一步骤可以省略。

(2)开中断(由STI指令实现)。

目的是为了能实现中断的嵌套。

图7-4中断服务子程序

(3)中断服务

(4)恢复现场是与保护现场对应的,但要注意数据恢复的次序,以免混乱。

(5)返回(使用中断返回指令IRET)。

不能使用一般的子程序返回指令RET,因为IRET指令除了能恢复断点地址外,还能恢复中断响应时的标志寄存器的值,而这后一个动作是RET指令不能完成的。

中断的工作过程可分为五大步骤:

即中断请求、中断判优、中断响应、中断服务和中断返回。

7.28086中断系统

一、中断分类及中断类型码

中断源引起中断的原因或发出中断请求的设备称为中断源。

1.中断的分类

共分为两类:

硬件中断和软件中断

(1)硬件中断即通过外部的硬件产生的中断,如打印机、键盘等,有时也称为外部中断。

硬件中断又可分为两类:

可屏蔽中断和不可屏蔽中断。

不可屏蔽中断:

由NMI引脚引入,它不受中断允许标志的影响,每个系统中仅允许有一个,都是用来处理紧急情况的,如掉电处理。

这种中断一旦发生,系统会立即响应;

可屏蔽中断:

由INTR引脚引入,它受中断允许标志的影响,也就是说,只有当IF=1时,可屏蔽中断才能进入,反之则不允许进入,可屏蔽中断可有多个,一般是通过优先级排队,从多个中断源中选出一个进行处理。

(2)软件中断(内部中断):

即根据某条指令或者对标志寄存器中某个标志的设置而产生,它与硬件电路无关,常见的如除数为0,或用INTn指令产生。

溢出中断由INT0指令引起

断点中断由INT3指令引起

单步由标志TF引起↘不对应指令

除0由计算结果引起↙不对应指令

2.中断类型码

8086为每个中断源分配了一个中断类型码,其取值范围为0~255,即可处理56种中断。

其中包括软件中断,系统占用的中断以及开放给用户使用的中断。

二、中断向量和中断向量表

系统处理中断的方法很多,处理中断的步骤中最主要的一步就是如何根据不同的中断源进入相应的中断服务子程序,目前用的最多的就是向量式中断。

中断向量把各个中断服务子程序的入口都称为一个中断向量;

中断向量表将这些中断向量按一定的规律排列成一个表,就是所谓的中断向量表,当中断源发出中断请求时,即可查找该表,找出其中断向量,就可转入相应的中断服务子程序。

8086中断系统中的中断向量表是位于0段的0~3FFFH的存贮区内,每个中断向量占四个单元,其中前两个单元存放中断处理子程序的入口地址的偏移量(IP),低位在前,高位在后;后两个单元存放中断处理子程序入口地址的段地址(CS),也是低位在前,高位在后,整个中断向量的排列是按中断类型号进行的。

图示给出了中断类型码与中断向量所在位置之间的对应关系。

其中00H~04H为专用中断,05H~3FH为系统保留中断,用户一般是不能对它们定义的(这里面有一些为固定的用途,如INT21H即为MS-DOS的系统调用),40~FF为用户定义的中断。

00H~04H----系统专用

10H~1FH----BIOS用

40H~FFH----用户用

08H~0FH----硬件中断

20H~3FH----DOS用

中断类型号*4即可计算某个中断类型的中断向量在整个中断向量表中的位置。

如类型号为20H,则中断向量的存放位置为20H×4=80H,(设中断服务子程序的入口地址为4030:

2010,则在0000:

0080H~0000:

0083H中就应顺序放入10H、20H、30H、40H。

当系统响应20H号中断时,会自动查找中断向量,找出对应的中断向量装入CS、IP,即转入该中断服务子程序。

三、中断响应过程与时序

8086对软件中断和硬件中断响应的过程是不同的,这是由于软件中断和硬件中断所产生的原因不同,下面主要讨论硬件中断的情况。

1.硬件中断的响应过程

硬件中断指的是由NMI引脚进入的非屏蔽中断或由INTR引脚进入的可屏蔽中断。

下面以可屏蔽中断为例。

CPU在INTR引脚上接到一个中断请求信号,如果此时IF=1,CPU就会在当前指令执行完以后开始响应外部的中断请求,这时,CPU在

引脚连续发两个负脉冲,外设在接到第二个负脉冲以后,在数据线上发送中断类型码,接到这个中断类型码后,CPU做如下动作:

(1)将中断类型码放入暂存器保存;

(2)将标志寄存器内容压入堆栈,以保护中断时的状态;

(3)将IF和TF标志清0,目的是防止在中断响应的同时又来别的中断,而将TF清0是为了防止CPU以单步方式执行中断处理子程序。

这时要特别提醒,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套时,必须在自己的中断处理子程序中用开中断指令来重新设置IF;

(4)保护断点,断点指的是在响应中断时,主程序当前指令下面的一条指令的地址。

因此保护断点的动作就是将当前的IP和CS的内容入栈,保护断点是为了以后正确地返回主程序;

(5)根据取到的中断类型码,在中断向量表中找出相应的中断向量,将其装入IP和CS,即呆自动转向中断服务子程序。

对NMI进入的中断请求,由于其类型码固定为2,因此CPU不用从外设读取类型码,也不需计算中断向量表的地址,只要将中断向量表中0000:

0008H~0000:

000BH单元内容分别装入IP和CS即可。

图7-5给出了8086中断响应过程的流程图,对这个图我们做几点说明:

(1)8086除软件中断外,内部“非屏蔽中断”、“可屏蔽中断”均设立有优先级,其中内中(除单步外)----即0、1、3、4号中断的优先级高于非屏蔽中断,非屏蔽中断高于可屏蔽中断,单步中断优先级最低;

(2)只有在可屏蔽中断的情况下才判IF=1?

,才取中断类型码,其余的没有这个动作。

(3)关于单步中断,它是每执行一条指令中断一次,显示出当时各寄存器的内容,供用户参考,当进入单步中断响应时,CPU自动清除了TF,在中断返回后,由于恢复了响应时的标志寄存器的值,因此TF=1,执行完一条指令后又进入单步中断,直到程序将TF改为0为止。

(4)关于中断的嵌套,NMI总是可以响应的,若在中断处理子程序中设立了开中断指令,INTR的请求也能响应。

(5)弹出IP、CS、标志,返回断点的动作由IRET指令完成。

(6)有些情况下,即使条件满足,CPU也不能马上响应中断,必须执行完下一条指令(而不是当前指令)才行。

✧正好执行LOCK指令;

✧执行往SS寄存器赋值的传送指令,因为一般要求连续用两条指令对SS和SP寄存器赋值,以保证堆栈指针的正确性。

(7)当遇到等待指令或串操作指令时,允许在指令执行的过程中进入中断。

这时需注意在中断处理子程序中保护现场,以保证中断返回后能继续正确地执行这些指令。

图7-5中断响应流程图

2.硬件中断的时序

7-68086中断响应总线周期

(1)要求INTR信号是一个高电平信号,并且维持2个T,因为CPU是在一条指令的最后一个T采样INTR,进入中断响应后,它在第一个总线周期的T1仍需采样INTR。

(2)当8086工作在最小模式时,从

发出中断响应信号,而在最大模式进,则是通过

的组合完成。

(3)第一个总线周期用来通知外设,CPU准备响应中断,第二个总线周期,接收外设发回的中断类型码,该类型码必须通过16位数据总线的低8位传送。

(4)在中断响应总线周期,

为低,数据/地址线浮空,

和地址/状态线均浮空,中间的三个空闲周期也可为两个。

3.软件中断

即通过中断指令来使CPU执行中断处理子程序的方法,特点如下:

(1)中断类型码由指令提供,不需执行中断响应总线周期,也不受IF标志的影响。

(2)正在执行软件中断时,若来NMI,则立即响应,若来可屏蔽中断,只要条件允许(如IF=1,当前指令执行完)也可响应。

(3)软件中断,由于其处理程序是定位装配的(中断向量表),又可方便地用INTn指令调用,因此在使用中和一般的子程序没有两样,并且原则上是0~255种类型均可使用。

【习题与思考】

1.何谓中断优先级,它对于实时控制有什么意义?

8086CPU系统中,NMI与INTR哪个优先级高?

2.试结合8086的INTR中断响应过程,说明向量中断的基本概念和处理方法。

3.在中断响应总线周期中,第一个

脉冲向外部电路说明什么?

第二个脉冲呢?

4.中断向量表的功能是什么?

已知中断类型码分别是84H和FAH,它们的中断向量应放在中断向量表的什么位置?

7.3中断控制器Intel8259A

Intel8259A是8086微机系统的中断控制器件,它具有对外设中断源进行管理,并向CPU转达中断请求的能力。

一、8259A的性能概述

1.具有8级中断优先控制,通过级连可以扩展至64级优先权控制

2.每一级中断都可以通过初始设置为允许或屏蔽状态

3.8259A的工作方式,可以通过编程进行设置,因此,使用非常灵活

4.8259A采用NMOS制造工艺,只需要单一的+5V电源

二、8259A的内部结构和工作原理

下面,我们来讨论8259A的内部结构,并进而分析它的工作原理,8259A的内部结构如图7-7所示,它主要由下列主要部分组成:

图7-78259A的内部结构

1.数据总线缓冲器它是8259A与系统数据总线的接口,是8位双向三态缓冲器。

CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过该缓冲器传送的。

2.读/写控制逻辑CPU通过它实现对8259A的读/写操作。

3.级连缓冲器用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。

4.控制逻辑电路对整个芯片内部各部件的工作进行协调和控制。

5.中断请求寄存器IRR8位,用以分别保存8个中断请求信号,当相应的中断请求输入引脚有中断请求时,该寄存器的相应位置1。

6.中断屏蔽寄存器IMR8位,相应位用以对8个中断源的中断请求信号进行屏蔽控制。

当其中某位置”0”时,则相应的中断请求可以向CPU提出;否则,相应的中断请求被屏蔽,即不允许向CPU提出中断请求。

该寄存器的内容为8259A的操作命令字OCW1,可以由程序设置或改变。

7.中断服务寄存器ISR8位,当CPU正在处理某个中断源的中断请求时,ISR寄存器中的相应位置1。

8.优先级比较器用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。

三、8259A的外部引脚

8259A是具有28个引脚的集成电路芯片,这28个引脚分别是:

1.D7-D0双向数据输入/输出引脚,用以与CPU进行信息交换。

2.IR7-IR08级中断请求信号输入引脚,规定的优先级为IR0>IR1>…>IR7,当有多片8259A形成级连时,从片的INT与主片的IRi相连。

3.INT中断请求信号输出引脚,高电平有效,用以向CPU发中断请求,应接在CPU的INTR输入端。

4.

中断响应应答信号输入引脚,低电平有效,在CPU发出第二个

时,8259A将其中最高级别的中断请求的中断类型码送出;应接在CPU的

中断应答信号输出端。

5.

读控制信号输入引脚,低电平有效,实现对8259A内部有关寄存器内容的读操作。

6.

写控制信号输入引脚,低电平有效,实现对8259A内部有关寄存器的写操作。

7.

片选信号输入引脚,低电平有效,一般由系统地址总线的高位,经译码后形成,决定了8259A的端口地址范围。

8.A08259A两组内部寄存器的选择信号输入引脚,决定8259A的端口地址。

A0=0ICW1、OCW2、OCW3;

A0=1ICW2~ICW4、OCW1

9.CAS2-CAS0级连信号引脚,当8259A为主片时,为输出;否则为输入,与

信号配合,实现芯片的级连,这三个引脚信号的不同组合000~111,刚好对应于8个从片。

10.

为级连管理信号输入引脚,在非缓冲方式下,若8259A在系统中作从片使用,则

;否则

;在缓冲方式下,

用作8259A外部数据总线缓冲器的启动信号。

11.+5V、GND电源和接地引脚

四、8259A的工作过程

1.当有一条或若干条中断请求输入(IR7-IR0)有效时,则使中断请求寄存器的IRR的相应位置位。

2.若CPU处于开中断状态,则在当前指令执行完之后,响应中断,并且从

发应答信号(两个连续的

负脉冲)。

3.第一个

负脉冲到达时,IRR的锁存功能失效,对于IR7-IR0上发来的中断请求信号不予理睬。

4.使正服务寄存器ISR的相应位置1,以便为中断优先级比较器的工作做好准备。

5.使寄存器的相应位复位,即清除中断请求。

6.第二个

负脉冲到达时,将中断类型寄存器中的内容ICW2,送到数据总线的D7-D0上,CPU以此作为相应中断的类型码。

7.若ICW4中的中断结束位为1,那么,第二个

负脉冲结束时,8259A将ISR寄存器的相应位清零。

否则,直至中断服务程序执行完毕,才能通过输出操作命令字EOI,使该位复位。

五、8259A的工作方式

8259A有多种工作方式,这些工作方式,可以通过编程设置或改变。

下面,我们进行分类介绍。

1.优先权的管理方式

(1).全嵌套方式

这是8259A默认的优先权设置方式,在全嵌套方式下,8259A所管理的8级中断优先权是固定不变的,其中IR0的中断优先级最高,IR7的中断优先级最低。

CPU响应中断后,请求中断的中断源中,优先级最高的中断源,在中断服务寄存器ISR中的相应位置位,而且把它的中断矢量送至系统数据总线,在此中断源的中断服务完成之前,与它同级或优先级低的中断源的中断请求被屏蔽,只有优先级比它高的中断源的中断请求才是运算的,从而出现中断嵌套。

(2).特殊全嵌套方式

特殊全嵌套方式与全嵌套方式基本相同,所不同的是,当CPU处理某一级中断时,如果有同级中断请求,那么CPU也会作出响应,从而形成了对同一级中断的特殊嵌套。

特殊全嵌套方式通常应用在有8259A级连的系统中,在这种情况下,对主8259A编程时,通常使它工作在特殊全嵌套方式下。

这样,一方面,CPU对于优先级别较高的主片的中断输入是允许的,另一方面,CPU对于来自同一从片的优先级别较高(但对于主片来讲,优先级别是相同的)的中断也是允许、能够响应的。

(3).优先级自动循环方式

在实际应用中,中断源优先级的情况是比较复杂的,要求8级中断的优先级在系统工作过程中,可以动态改变。

即一个中断源的中断请求被响应之后,其优先级自动降为最低。

系统启动时,8级中断优先级默认为IR0—IR7,这时,刚好IR4发出了中断请求,CPU响应之后,若8259A工作在优先级自动循环方式下,则中断优先级自动变为IR5、IR6、IR7、IR0、IR1、IR2、IR3、IR4。

(4).优先级特殊循环方式

优先级特殊循环方式与自动循环方式相比,只有一点不同,即初始化的优先级是由程序控制的,而不是默认的IR0—IR7。

2.中断源的屏蔽方式

CPU对于8259A提出的中断请求,都可以加以屏蔽控制,屏蔽控制有下列几种方式:

(1).普通屏蔽方式

8259A的每个中断请求输入,都要受到屏蔽寄存器中相应位的控制。

若相应位为“1”,则中断请求不能送CPU。

屏蔽是通过对屏蔽寄存器IMR的编程(操作命令字OCW1),来加以设置和改变的。

(2).特殊屏蔽方式

有些场合下,希望一个中断服务程序的运行过程中,能动态地改变系统中的中断优先级结构,即在中断处理的一部分,禁止低级中断,而在中断处理的另一部分,又能够允许低级中断,于是引入了对中断的特殊屏蔽方式。

设置了特殊屏蔽方式后,用OCW1对屏蔽寄存器中的某一位复位时,同时也会是中断服务寄存器ISR中的相应位复位,这样就不只屏蔽了正在处理的等级中断,而且真正开放了其它优先级别叫低的中断请求。

特殊屏蔽是在中断处理程序中使用的,用了这种方式之后,尽管系统正在处理高级中断,但对外界来讲,只有同级中断被屏蔽,而允许其它任何级别的中断请求。

3.结束中断处理的方式

按照对中断结束(复位中断响应寄存器ISR中相应位)的不同处理,8259A有两种工作方式,即自动结束方式(AEI)和非自动结束方式。

而非自动结束方式又可进一步分为一般的中断结束方式和特殊的中断结束方式。

(1).中断自动结束方式

这种方式仅适用于只有单片8259A的场合,在这种方式下,系统一旦响应中断,那么CPU在发第二个INTA脉冲时,就会使中断响应寄存器ISR中相应位复位,这样一来,虽然系统在进行中断处理,但对于8259A来讲,ISR没有相应的指示,就象中断处理结束,返回主程序之后一样。

CPU可以再次响应任何级别的中断请求。

(2).一般的中断结束方式

一般的中断结束方式适用用在全嵌套的情况下,当CPU用输出指令向8259A发一般中断中断结束命令OCW2时,8259A才会使中断响应寄存器ISR中优先级别最高的位复位。

(3).特殊的中断结束方式

在特殊全嵌套模式下,系统无法确定哪一级中断为最后相应和处理的中断,也就是说,CPU无法确定当前所处理的是哪级中断,这时就要采用特殊的中断结束方式。

特殊的中断结束方式是指在CPU结束中断处理之后,向8259A发送一个特殊的EOI中断结束命令,这个特殊的中断结束EOI命令,明确指出了中断响应寄存器ISR中需要复位的位。

这里,我们还要指出一点,在级联方式下,一般不用自动中断结束方式,而需要用非自动结束中断方式,一个中断处理程序结束时,都必须发两个中断结束EOI命令,一个发往主片,一个发往从片。

4.系统总线的连接方式

按照8259A与系统总线的连接方式来分,有下列两种方式:

(1).缓冲方式

在多片8259A级连的大系统中,8259A通过外部总线驱动器和数据总线相连,这就是缓冲方式。

在缓冲方式下,8259的

输出信号作为缓冲器的启动信号,用来启动总线驱动器,在8259A与CPU之间进行信息交换。

(2).非缓冲方式

当系统中只有一片或几片8259A芯片时,可以将数据总线直接与系统数据总线相连,这时8259A处于非缓冲方式下。

在这种方式下,8259A的

作为输入端设置,主片应接高电平,从片应接低电平。

5.引入中断请求的方式

按照引入中断请求的方式,8259A有下列几种工作方式:

(1).边沿触发方式

8259A将中断请求输入端出现的上升沿,作为中断请求信号,上升沿后相应引脚,可以一直保持高电平。

(2).电平触发方式

8259A将中断请求输入端出现的高电平作为中断请求信号,在这种方式下,必须注意:

中断响应之后,高电平必须及时撤除,否则,在CPU响应中断,开中断之后,会引起第二次不应该有的中断。

(3).中断查询方式

当系统中的中断源很多,超过64个时,则可以使8259A工作在查询方式下,中断查询方式的特点是:

a.中断源仍往8259A发中断请求,但8259A却不使用INT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1