本章主要教学内容
中断的概念及中断处理过程
8086的中断结构和中断类型
8086的中断矢量、中断优先权及中断管理
可编程中断控制器 8259A的结构、工作方式及编程应用第 7章 中断控制技术
7.1 中断技术概述
7.1.1 中断的概念当计算机的 CPU正在执行程序时,由于内、外部事件或程序的预先安排引起 CPU暂时终止执行现行程序,转去执行该事件的特定程序(也称为中断处理程序或中断服务程序),待中断服务程序执行完毕,能够自动返回到被中断的程序继续执行原来的程序,这个过程称为中断。在各种微型计算机系统中,
常利用中断机构来处理 CPU与外部设备之间的数据传送,以最少的响应时间和内部操作来实现外设的服务请求。此外,中断也是处理来自内部异常故障的重要手段。
1,中断技术的特点现代微型计算机采用中断技术后具备以下的主要特点:
( 1) 可实现同步操作
( 2) 可进行实时处理行处理
( 3) 能及时处理各种故障
2,中断源的种类能引起中断的外部设备或内部原因称为中断源 。
对于不同的计算机系统中断源的设置有所不同,通常按照 CPU与中断源的位置关系可分为内部中断和外部中断 。
内部中断是 CPU在处理某些特殊事件时所引起或通过内部逻辑电路自己去调用的中断 。 外部中断是由于外部设备要求数据输入 /输出操作时请求 CPU
为之服务的一种中断 。
通常,中断源可以有以下几种:
( 1) 外部设备请求中断
( 2) 故障强迫中断
( 3) 实时时钟请求中断
( 4) 数据通道中断
( 5) 软件中断
3,中断系统的功能为实现中断而设置的各种中断控制逻辑以及管理相应中断的指令有机组合后称为中断系统 。 中断系统为了实现规定的中断控制,一般应具有以下功能:
( 1) 中断处理功能
( 2) 中断优先权排队功能
( 3) 中断嵌套功能图 7-2所示为 3层中断嵌套结构,该系统中 3个中断源的优先权安排为:中断 3为最高,其次为中断 2,中断
1为最低 。
中断 1 请求
n
中断 1
服务程序
m
中断 2
服务程序
W
中断 3
服务程序
IRET
W + 1
IRET
中断 3 请求
m + 1
IRET
n + 1
断点 1
中断 2 请求主程序断点 2
断点 3
图 7-2 中断嵌套示意图
7.1.2 微机系统中的中断处理过程微机系统的中断处理从开始到结束包括以下几个主要步骤:
( 1) 识别中断源
( 2) 保护现场
( 3) 开中断
( 4) 中断服务
( 5) 中断返回
7.1.3 中断优先级的排队及判别系统中多个中断源的中断请求信号都是送到 CPU同一引脚上申请中断服务,这就要求 CPU能识别出是哪些中断源在申请中断,同时比较它们的优先权,从而决定先响应哪一个中断源的中断请求 。 另外,CPU正在处理中断时,也可能要响应更高级的中断请求,并屏蔽同级或较低级的中断请求,这些都需要分清各中断源的优先权 。
中断源的优先级判别一般可采用软件优先级排队和硬件优先级排队两种方法 。
1,软件优先级排队软件优先级排队是指各个中断源的优先权由软件安排。
图 7-4 所示电路是一种配合软件优先级排队使用的电路,
图中各中断源的优先权不是由硬件电路安排,而是由软件安排。
图中若干个外设的中断请求信号相,或,后,送至
CPU的中断接收引脚(如 INTR)。这样,只要任一外设有中断请求,CPU便可响应中断。在中断服务子程序前可安排一段优先级的查询程序,即 CPU读取外设中断请求状态端口,然后根据预先确定的优先级级别逐位检测各外设的状态,若有中断请求就转到相应的处理程序入口。
三态缓冲器
D
0
D
7
INTR
+ 5 V
R
0 # 外设
7 # 外设
端口地址图 7-4 软件优先级排队电路
2,硬件优先级排队硬件优先级排队是指利用专门的硬件电路或中断控制器对系统中各中断源的优先权进行安排 。
链式优先权排队电路是一种简单的中断优先权硬件排队电路,又称为菊花环式优先权排队电路,它是利用外设连接在排队电路的物理位置来决定其中断优先权的,
排在最前面的优先权最高,排在最后面的优先权最低,
电路如图 7-6所示。
三态缓冲器
&EN
三态缓冲器
&
EN
三态缓冲器
&EN
三态缓冲器
&EN
数据总线
1
INTA ( 来自 CPU )
& A 2
& B 2
& C 2
&
A 1
B 1
C 1
Q 中断触发器
Q 中断触发器
Q 中断触发器
Q 中断触发器
1 ≤INTR
设备 1
设备 2
设备 3
设备 n
图 7-6 链式优先权排队电路
3,中断优先权的判别在多个中断源同时请求中断时,CPU必须首先确定为哪一个中断源服务 。 采用软件查询中断方式时,中断优先权由查询顺序决定,最先查询的中断源具有最高的优先权 。 该方法的优点是电路比较简单,缺点是当中断源个数较多时,由逐位检测查询到转入相应的中断服务程序所耗费的时间较长,中断响应速度较慢,服务效率低 。
7.2 8086的中断系统
Intel 8086微型计算机的中断系统简单而且灵活,
最多可处理 256种不同的中断类型,每个中断源都有相应的中断类型码 ( 0~255) 供 CPU识别 。 中断可以由外部设备启动,也可以由软件中断指令启动,在某些情况下还可由 CPU自身启动 。 8086采用了矢量型的中断结构,这种中断结构响应速度快 。
7.2.1 中断的类型一般情况下,中断源可以来自 CPU外部,也可以来自
CPU内部,按 引起中断事件所处的地点 可分为外部中断和内部中断两种,如图 7-7所示 。
I N Tn 指令 ( 软件中断 )
中断逻辑
INT 3
指令
INTO
指令单步中断除数为 0
中断非屏蔽中断请求中断控制系统
( 8259 A )
硬件中断可屏蔽中断请求
NMI
INTR
图 7-7 8086系统中断的分类
1,硬件中断硬件中断由外部硬件产生,8086CPU有两条外部中断请求信号线,NMI和 INTR,分别接收非屏蔽中断和可屏蔽中断请求信号 。
2,软件中断软件中断是 CPU根据某条指令或者对标志寄存器的某个标志位的设置而产生的,由于它与外部电路无关,故也称为内部中断 。
在 8086系统中,内部中断主要有以下几种:
( 1) 除法出错中断
( 2) INTO溢出中断
( 3) INT n指令
( 4) 断点中断
( 5) 单步中断概括来讲,软件中断具有以下几方面的特点:
中断由 CPU内部引起,中断类型码的获得与外部无关,CPU
不需要执行中断响应周期去获得中断类型码,中断矢量号由
CPU自动提供 。
除单步中断外,内部中断无法用软件禁止,不受中断允许标志位的影响,即都不能通过执行 CLI指令使 IF位清零来禁止对它们的响应 。
除单步中断外,任何内部中断的优先权都比外部中断高 。
8086CPU的中断优先权顺序为:内部中断 ( 除法出错中断,
INT n指令中断,INTO溢出中断,断点中断 ),NMI中断,
INTR中断和单步中断 。
内部中断没有随机性,这一点与调用子程序非常相似。
7.2.2 中断的响应过程
1,软件中断响应过程对于专用中断,中断类型码是自动形成的,而对于 INT n指令,
其类型码即为指令中给定的 n。 在取得了类型码后的处理过程如下:
( 1) 把类型码乘 4,作为中断向量表的指针;
( 2) 把 CPU的标志寄存器入栈,保护各个标志位;
( 3) 清除 IF和 TF标志,屏蔽新的 INTR中断和单步中断;
( 4) 保存断点,即把断点处的 IP和 CS值压入堆栈,先压入 CS
值,再压入 IP值;
( 5) 从中断向量表中取出中断服务程序的入口地址,分别送至 CS和 IP中;
( 6) 按新的地址指针执行中断服务程序 。
2,硬件中断响应过程
( 1) 非屏蔽中断响应:当 CPU采样到非屏蔽中断请求时,自动提供中断类型码 2,然后根据中断类型码查到中断向量表指针,其后的中断处理过程与内部中断一样 。
( 2) 可屏蔽中断响应:当 INTR信号有效时,
如果中断允许标志 IF=“1”,则 CPU就会在当前指令执行完毕后响应外部的中断请求,转入中断响应周期 。
7.2.3 中断向量表所谓中断向量,实际上就是中断服务程序的入口地址 。 通常在内存的最低 1 KB区域 ( 00000H~003FFH) 建立一个中断向量表,分成 256个组,存放着 256个中断服务程序入口地址
( 即中断向量 ),每个中断向量为 4个字节,分别存放中断服务程序的段地址和段内偏移量 。 两个高字节用于存放中断服务程序的段地址,两个低字节用于存放中断服务程序的偏移量 。
在执行 INT指令时,CPU对断点,状态进行保护之后,将中断指令中的中断类型号乘上 4,便为中断向量表的入口地址 。 取出相继的 4个字节单元的内容,即为中断服务程序入口地址,
并送入 IP 和 CS,以完成中断调用 。
中断向量表如图 7-9所示 。




除法中断入口单步中断入口
NM I 中断入口断点中断入口溢出中断入口类型 5 中断入口
IP
CS
0000H
0004H
0008H
0 0 0 CH
0010H
0014H
类型 31H 中断入口类型 32H 中断入口
0 0 C4 H
0 0 C8 H
类型 0 F F H 中断入口
0 3 F CH
图 7 - 9 8 0 8 6 中断向量表专用中断备用中断用户中断
7.2.4 中断管理
8086CPU可管理 256种中断 。 在 8086中断系统中,无论是外部中断还是内部中断,系统都分配给每一个中断源一个确定的中断类型码,其长度为一个字节,故系统中最多允许有
256个中断源 。 每一种中断类型码都可以与一个中断服务程序相对应 。 中断服务程序存放在存储区域内,而中断服务程序的入口地址存放在内存储器的中断向量表内 。 当 CPU处理中断时,就需要指向中断服务程序的入口地址 。 8086以中断向量为索引号,从中断向量表中取得中断服务程序的入口地址 。
1,中断服务入口地址的确定按照中断类型码的序号,对应的中断向量在中断向量表中按规则顺序排列,中断类型码与中断向量在向量表中的位置之间的对应关系为:中断向量地址指针 =4× 中断类型码当发生中断向量号为 n的中断请求时,CPU首先把向量号乘以 4,得到中断向量表的地址,然后把中断向量表
4n地址开始的两个低字节单元内容装入 IP寄存器,再把两个高字节单元内容装入 CS寄存器,这样就把控制引导到类型 n的中断服务程序的起始地址,开始类型 n的中断处理过程。
2,中断和异常
80X86及 Pentium等高档微处理器不仅具有前面讲到的所有中断类型,而且大大丰富了内部中断的功能,把许多执行指令过程中产生的错误情况也纳入了中断处理的范围,这类中断称为异常中断,简称异常 ( Exception) 。 有时也将软中断指令 INT n
纳入异常中断的范围 。
异常分为三类:失效 ( Faults),陷阱 ( Traps)
和中止 ( Abort) 。 三类异常的差别表现在两个方面:
一是发生异常的报告方式,二是异常中断服务程序的返回方式 。
3,中断描述符表为了管理各种中断,80X86和 Pentium等高档微处理器都设立了一个中断描述符表 IDT( Interrupt Descriptor Table) 。 表中最多可包含 256个描述符项,对应 256个中断或异常 。 描述符中包含了各个中断服务程序入口地址的信息 。
当高档微处理器工作于实地址方式时,系统的 IDT变为
80X86系统中的中断向量表,置于系统物理存储器的最低地址区中,共 1 KB。 每个中断向量占 4 个字节,即 2个字节的 CS值和 2个字节的 IP值 。 当高档微处理器工作于保护方式时,系统的 IDT可以置于内存的任意区域,其起始地址存放在 CPU内部的 IDT基址寄存器中 。
7.3 8259A中断控制器及其应用专门管理中断源的控制电路就是中断控制器 。 可编程中断控制器 8259A就是常用的中断优先级管理电路,它具有如下功能:
( 1) 它可以接收多个外部中断源的中断请求,并进行优先级别判断,选中当前优先级别最高的中断请求,再将此请求送到微处理器的中断输入端 。
( 2) 具有提供中断向量,屏蔽中断输入等功能 。 可用于管理
8级优先权中断,也可将多片 8259A通过级连方式构成最多可达 64级优先权中断管理系统 。 8259A管理的 8级中断对应的服务程序入口地址构成的中断向量表存放在内存固定区域 。
( 3) 8259A使用单 +5V电源供电,有多种中断管理方式,自动提供中断服务程序的入口地址,使用灵活方便 。 可通过编程来进行选择,能适应各种系统的要求 。
7.3.1 8259A的内部结构及引脚
1,内部结构
8259A的内部结构示意框图如图 7-10所示 。 8259A由中断服务寄存器,优先权电路,中断屏蔽寄存器,中断请求寄存器,
中断控制逻辑,数据总线缓冲器,级连缓冲器 /比较器和读 /写控制逻辑等 8个部分构成 。
数据总线缓冲器读/ 写逻辑级连缓冲/ 比较器中断服务寄存器
(I S R )
中断请求寄存器
(IRR)
优先权电路
IR 7
IR 0
IR 1
IR 2
IR 3
IR 4
IR 5
IR 6
中断屏蔽寄存器(I M R )
D 7 -D 0
控 制 逻 辑
CAS 0
CAS 1
CAS 2
SP/EN
RD
WR
CS
A 0
内部总线
INTA
INT
图 7-10 8259A的内部结构示意框图
8259A引脚如图 7-12所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
GND
24
23
22
21
20
19
18
17
16
15
28
27
26
25
V CC
A 0
D 7
D 6
D 5
D 4
D 3
D 1
D 0
D 2
CS
WR
RD
CAS 0
CAS 1
INTA
IR 7
IR 0
IR 1
IR 2
IR 3
IR 4
IR 5
IR 6
INT
SP / EN
CAS 2
图 7 - 12 8259 A 引脚图
7.3.2 8259A的中断管理中断优先级的管理是中断管理的核心问题,而 8259A具有非常灵活的中断管理方式,能够满足用户的各种不同要求 。 8259A
对中断的管理主要有对优先权的管理和对中断结束的管理 。
1,中断优先权的管理
8259A对中断优先权的管理可分为以下 4种情况:
( 1) 完全嵌套方式
( 2) 自动循环方式
( 3) 中断屏蔽方式
( 4) 特殊完全嵌套方式
2,中断结束 ( EOI) 的管理当 8259A响应某一级中断而为其服务时,中断服务寄存器 ISR
的相应位置,1”,当有更高级的中断请求进入时,ISR的相应位又要置,1”。因此,中断服务寄存器 ISR中可有多位同时置,1”。
在中断服务结束时,ISR的相应位应清零,以便再次接收同级别的中断。中断结束的管理就是用不同的方式使 ISR的相应位清零,
并确定随后的优先权排队顺序。 8259A中断结束的管理有以下 3
种方式:
( 1)自动中断结束方式
( 2)普通中断结束方式
( 3)特殊中断结束方式
7.3.3 8259A的编程及应用
8259A是可编程的中断控制器,它的操作是用软件通过命令字进行控制的 。 8259A的编程包括两类:一类是初始化编程,称为初始化命令字 ( ICW),8259A在进入操作前必须由初始化命令字 ICW1~ICW4使它处于初始状态 。 对
8259A的初始化编程是微机上电初始化时由 BIOS完成的,
用户一般不应改变;另一类是操作方式编程,称为操作控制字 ( OCW),在对 8259A进行初始化之后,用这些控制字来控制 8259A执行不同的操作方式 。 操作控制字可在初始化后的任何时刻写入 8259A。
1,初始化编程在 8259A进入正常工作之前,必须将系统中的每片 8259A进行初始化 。 初始化命令字用来设定 8259A的初始状态 。 8259A有 4个初始化命令字 ICW1~ ICW4,它们必须按照一定的顺序输入,如图 7-13所示 。
ICWl和 ICW2是必须输入的,ICW3,ICW4是否要输入则由 ICW1
的相应位来决定 。 当 SNGL=,0”时,需要 ICW3分别对主片和从片编程,其格式是不同的 。 当 ICWl的 IC4=,1”时,需要输入
ICW4。
对于 8086/8088系统,ICW4总是需要的。 CPU向 8259A写入命令时,A0=0和 D4=1标志着写入 ICW1,初始化过程开始。随后写入的初始化命令字由 A0=1作为标志。初始化过程结束后,才能写入操作控制字。
Y
N
Y
ICW
1
( A
0
=0,D
4
=1 )
ICW
2
( A
0
=1 )
ICW
3
( A
0
=1 )
需要 ICW
4
吗?
是单片 8259A?
ICW
4
( A
0
=1 )
N
图 7 - 1 3 8 2 5 9 A 初始化流程图对于初始化命令字来讲,需要完成以下几项任务:
设定中断请求信号的有效方式,是高电平有效还是上升沿有效;
确定 8259A工作于单片方式还是工作于级联方式;
若为级联工作方式,规定主片 8259A中每个 IR端是否带从片 8259A,从片 8259A则要规定由主片 8259A的哪个 IR端引入;
设置中断类型码;
设定中断管理方式 。
一旦初始化完成以后,若要改变某一个初始化命令字,
则必须重新再进行初始化编程,不能只写入单独的一个初始化命令字 。
2,操作控制字的编程在对 8259A用初始化命令字进行初始化后,就进入工作状态,准备好接收 IR输入的中断请求信号 。 在 8259A工作期间,可通过操作控制字 OCW来使它按不同的方式操作 。
操作控制字共有 3个,即 OCW1~OCW3,它们可以独立使用 。
在 8259A工作期间,可通过操作控制字来使它按不同的方式进行操作 。
3,中断程序设计应用分析在进行中断服务程序设计时,需要首先设置中断向量表,把需要执行的中断服务程序的入口地址事先放入中断向量表的相应存储单元,然后才能允许中断 。 几种中断服务程序的编程原则大致相同 。 但是,由于可屏蔽中断要涉及到中断控制器的操作,所以其编程较内部中断和非屏蔽中断复杂一些 。
下面以可屏蔽中断为例,介绍中断程序设计的一般过程 。
( 1) 设置中断向量表在设置中断向量表时,可以利用数据传送指令直接访问中断向量表的相应存储单元写入中断向量,也可以利用 DOS系统功能调用 INT 21H的 25H和 35H号功能调用修改中断向量 。
( 2) 设置中断控制器通过 8259A控制的硬件中断,必须使中断屏蔽寄存器 IMR的相应位置 0才能允许中断请求 。 为了在应用程序返回 DOS后恢复原状态,应在修改 IMR之前保存原内容,并于程序退出前予以恢复 。
在程序中还可以通过控制屏蔽位,随时允许或禁止有关中断的产生 。
( 3) 设置 CPU的中断允许标志 IF
硬件中断来自计算机的外部设备,它随时都可能提出申请,
除利用 IMR控制某一个或几个中断响应外,还可以通过关中断指令 CLI和开中断指令 STI来控制所有可屏蔽中断的产生 。 当不需要中断或不能中断时,就必须关中断,防止不可预测的后果 。
而在其它时间则要开中断,以便及时响应中断,为外设提供服务 。
( 4)
中断服务程序中通常须完成以下任务:保护现场,中断服务,
恢复现场,向 8259A发送中断结束命令,中断返回等 。
中断服务子程序设计如下:
INTPROC PROC ;
PUSH AX ;
PUSH BX
……
STI ;
…… ;
CLI ;
……
POP BX ;
POP AX
MOV AL,20H ; 向 8259A发送 EOI
OUT 20H,AL
IRET ;
INTPROC ENDP
4,8259A应用举例
【 例 7.1】 8259A在 PC/XT微机中的应用 。
在 IBM PC/XT微机只使用了一片 8259A实现中断管理,将其设计为主片结构,可处理 8个外部中断,如图 7-14所示。
IR
0
IR
1
IR
2
IR
3
IR
4
IR
5
IR
6
IR
7
I R Q
0
I R Q
1
I R Q
2
I R Q
3
I R Q
4
I R Q
5
I R Q
6
I R Q
7
8259 A
中断控制器
INT日时钟键盘保留串行口 2
串行口 1
并行口 2
软盘并行口 1
A
0
地址 A
0
INTACS
( 片选 )
CS
WR
RD
8 位数据线
INTR
CPU
总线控制器
IOR
IOW
INTAINTA
S
2
S
1
S
0
SP / EN
C AS
2
C AS
1
C AS
0
+ 5 V
NC
S
0
S
1
S
2
其中,IRQ0接至系统板上定时器 /计数器 Intel 8253通道 0的输出信号 OUT0,用作微机系统的日时钟中断请求; IRQ1是键盘输入接口电路送来的中断请求信号,用来请求 CPU读取键盘扫描码;
IRQ2是系统保留的;另外 5个请求信号接至 I/O通道,由 I/O通道扩展板电路产生 。 在 I/O通道上,通常 IRQ3用于第 2个串行异步通信接口,IRQ4用于第一个串行异步通信接口,IRQ5用于硬盘适配器,IRQ6用于软盘适配器,IRQ7用于并行打印机 。 在 I/O地址空间中,分配给 8259A的 I/O端口地址为 20H和 21H。
对 8259A的初始化规定:边沿触发方式,缓冲器方式,中断结束为 EOI命令方式,中断优先权管理采用全嵌套方式 。
( 1) 8259A初始化编程根据系统要求,8259A初始化编程如下:
MOV AL,13H ;设置 ICW1为边沿触发,单片 8259A需要 ICW4
OUT 20H,AL
MOV AL,08H ;设置 ICW2中断类型号,起始中断号为 08H
( 2) 8259A操作方式编程在用户程序中,允许用 OCW1来设置中断屏蔽寄存器 IMR,以控制各个外设申请中断允许或屏蔽 。 但注意不要破坏原设定工作方式 。
如允许日时钟中断 IRQ0和键盘中断 IRQ1,其它状态不变,则可送入以下指令:
IN AL,21H ; 读出 IMR
AND AL,0FCH ; 只允许 IRQ0和 IRQ1,其它不变
OUT 21H,AL ; 写入 OCW1,即 IMR
由于中断采用的是非自动结束方式 因此若中断服务程序结束,
则在返回断点前,必须对 OCW2写入 00100000B,即 20H,发出中断结束命令:
MOV AL,20H ; 设置 OCW2的值为 20H
OUT 20H,AL ; 写入 OCW2的端口地址 20H
IRET ;
在程序中,通过设置 OCW3,亦可读出 IRR,ISR的状态以及查询当前的中断源 。 如要读出 IRR内容以查看申请中断的信号线,这时可先写入 OCW3,再读出 IRR:
MOV AL,20H ; 写入 OCW3,读 IRR
OUT 21H,AL
NOP ; 延时,等待 8259A
IN AL,20H ; 读出 IRR
当 A0=1时,IMR的内容可以随时方便地读出,如在 BIOS中,
中断屏蔽寄存器 IMR的检查程序如下:
MOV AL,0 ;设置 OCW1为 0,送 OCW1口地址,表示 IMR为全 0
OUT 21H,AL
IN AL,21H ; 读 IMR
OR AL,AL ; 若不为 0,则转出错程序 ERR
JNZ ERR
MOV AL,OFFH ;设置 OCW2为 FFH,送 OCW1口地址表示 IMR为全 1
OUT 21H,AL
IN AL,21H ; 读 IMR
ADD AL,1 ; IMR=0FFH?
JNZ ERR ; 若不是 0FFH,则转出错程序 ERR
……
ERR
【 例 7.2】 8259A在 IBM PC/AT微机中的应用 。
在 PC/AT机中,由主,从两片 8259A构成硬件的中断管理,共
15级向量中断 。 主片 8259A的端口地址为 20H和 21H,中断类型码为 08H~0FH;从片 8259A端口地址为 0A0H和 0A1H,中断类型码为
70H~77H。 主片和从片的中断请求信号均采用边沿触发,完全嵌套方式 。 对主片 8259A和从片 8259A进行初始化设计 。
按照要求,我们将 2片 8259A构成的硬件中断控制电路设计为图 7-15所示,图中的中断优先权排列顺序为 IRQ0,IRQ1、
IRQ8~IRQ15,IRQ3~IRQ7。 从片 8259A的中断请求信号输出端 INT与主片 8259A的中断请求输入端 IR2相连,其中 IRQ0~IRQ7对应的中断类型号为 08H~0FH,IRQ8~IRQ15对应的中断类型号为 70H~77H。
主片的 8级中断已被系统用尽,从片尚保留 4级未用 。 其中 IRQ0
仍用于日时钟中断,IRQ1仍用于键盘中断 。 扩展的 IRQ8用于实时时钟中断,除上述中断请求信号外,所有的其它中断请求信号都来自 I/O通道的扩展板 。
从8 2 5 9 A
IR 0
IR 1
IR 2
IR 3
IR 4
IR 5
IR 6
IR 7
SP/EN
CAS 2-0
INT
INTA
A 0
CS
RD
WR
D 7-0
IRQ 8
IRQ 9
IRQ 10
IRQ 11
IRQ 12
IRQ 13
IRQ 14
IRQ 15
实时钟
INT0AH
保留保留处理器保留硬盘保留主8 2 5 9 A
IR 0
IR 1
IR 2
IR 3
IR 4
IR 5
IR 6
IR 7
SP/EN
CAS 2-0
INT
INTA
A 0
CS
RD
WR
D 7- D 0
IRQ 0
IRQ 1
IRQ 2
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
日时钟键盘串行口2
串行口1
并行口2
软盘并行口1
CPU
S2
S1
S0
INTR
8288
S2
S1
S0
INTA
IOR
IOW
+5V
总线控制器图 7-15 PC/AT机中两片 8259A硬件连接示意图
( 1) 8259A的初始化编程对主片 8259A的初始化编程如下:
MOV AL,11H
OUT 20H,AL
JMP INTR1
INTR1,MOV AL,08H
OUT 21H,AL
JMP INTR2
INTR2,MOV AL,04H
INTR3,MOV AL,11H
OUT 21H,AL
对从片 8259A
MOV AL,11H
OUT 0A0H,AL
JMP INTR5
INTR5,MOV AL,70H
OUT 0A1H,AL
JMP INTR6
INTR6,MOV AL,02H
OUT 0A1H,AL
JMP INTR7
INTR7,MOV AL,01H
OUT 0A1H,AL
( 2) 级联工作编程当来自某个从片 8259A的中断请求进入服务时,主片 8259A
的优先权控制逻辑不封锁这个从片,从而使来自从片的更高优先级的中断请求能被主片所识别,并向 CPU发出中断请求信号 。
因此,当中断服务程序结束时必须用软件来检查被服务的中断是否是该从片中唯一的中断请求 。 先向从片发出一个 EOI命令,
清除已完成服务的 ISR位,然后再读出 ISR的内容检查它是否为 0。
如果 ISR的内容为 0,则向主片发一个 EOI命令,清除与从片相对应的 ISR位;否则,就不向主片发 EOI命令,继续执行从片的中断处理,直到 ISR的内容为 0,再向主片发出 EOI命令 。
读 ISR
MOV AL,0BH
OUT 0A0H,AL
NOP
IN AL,0A0H
从片发 EOI
MOV AL,20H
OUT 0A0H,AL
主片发 EOI命令的程序如下:
MOV AL,20H
OUT 20H,AL
【 例 7.3】 对操作控制字 OCW的编程 。 对 OCW的编程是由用户程序实现的,分别讨论如下:
( 1) 对 OCW1的编程这是一个中断屏蔽寄存器操作控制字,直接写入中断屏蔽寄存器 IMR。 由于地址用 A0=1寻址,故在 IBM PC/XT机中,该控制字的写入是由端口 21H写操作完成的 。 在 IBM PC/AT中,主片 8259A用端口 21H写入,从片 8259A用端口 0A1H写入,在中断服务程序内部和其它子程序中,均可使用该命令 。 例如对主片屏蔽 IR4~IR7,
对从片屏蔽 IR15 和 IR8,则 应 该 向 主 片 21H 端 口 写 入
11110000B=0F0H,向从片 0A1H端口写入 10000001B=81H,程序设计如下:
MOV AL,0F0H
OUT 21H,AL
MOV AL,81H
OUT 0A1H,AL
( 2) 对 OCW2的编程在 IBM PC计算机中,OCW2主要用来结束中断 。 ISR中保存着当前正在服务的中断请求,如果该位不能复位为 0,则后续的同级和较低优先级的中断请求将不会被响应 。 在 PC/XT机中,ICW4设置的中断结束方式是非自动中断结束,它必须在中断服务程序结束前,由 OCW2命令字来清除 ISR中的最高优先权位 。 在 OCW2中,
一般的 EOI命令代码是 00100000B=20H。 又因为 OCW2在写入时要求地址线 A0=0,因此是通过端口 20H写入的,所以中断结束命令由下列指令完成:
MOV AL,20H
OUT 20H,AL
对于 PC/AT机,要先通过端口 0A0H向从片写结束命令,再通过端口 20H向主片写结束命令,指令段为:
MOV AL,20H
OUT 20H,AL
OUT 0A0H,AL
( 3) 对 OCW3的编程
OCW3也是通过端口 20H和 0A0H写入的,不同之处在于 OCW2中
D4D3=00,而在 OCW3中 D4D3=01。 8259A通过 D4D3判断是 OCW2还是
OCW3,然后写入各自的寄存器 。 OCW3的编程指令段此处略 。
本章小结中断技术是微机系统进行信息交换的一种重要技术,中断控制就是指当遇到突发事件时,计算机能够自动执行一段程序来处理所发生的事件,并在处理之后返回原程序,继续执行被中断了的程序 。
计算机自动执行的处理程序称为中断服务程序 。 对中断的理解,需要从软件和硬件两个方面去进行,
要清楚软件完成哪些工作,硬件完成哪些工作 。 能引起中断的内,外部原因称为中断源 。 内部中断是
CPU在处理某些特殊事件引起或通过内部逻辑电路去调用的中断;外部中断是由于外部设备要求数据输入 /输出操作时请求 CPU为之服务的一种中断 。
一个微机系统通常接有多个外设,当外设与 CPU
以中断方式进行信息交换时,CPU必须要从这多个外设中判别出正在申请中断的设备,找到相应的中断服务程序的入口地址,才能转去为其服务 。 通常采用软件查询和可编程中断控制器两种方法来解决实际系统中有多个中断源时的中断优先权判别问题 。
可编程中断控制器 8259A能够直接管理 8级中断,
具有多种工作方式,可以通过编程对其进行初始化设置,在实际系统中得到了广泛的应用 。
第 7章内容到此结束谢谢各位 !