第 7章 中断及中断控制器
掌握有关中断和中断源,中断处理过程,中断优先级和中断嵌套等基本知识
掌握可编程中断控制器 82C59A外部特性及其与 CPU的连接方式
掌握 82C59A的初始化编程
掌握 8086/8088可屏蔽中断的全过程
了解 82C59A的结构及级联方式的运用等教学目的和要求中断及中断控制器重点
中断及中断处理过程
82C59A的初始化编程
8086/8088可屏蔽中断的全过程难点
8086/8088的中断系统
中断优先权的控制机理
7.1.1 中断、中断源及中断系统一,中断,中断源
所谓,中断,是指在 CPU正常运行程序时,
由于内,外部事件引起 CPU暂时中止正在运行的程序,转而去执行请求 CPU暂时中止的内,外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序
能够向 CPU发出中断请求的中断来源称为
,中断源,
常见的中断源
一 般 的 输 入 / 输 出 设 备,如 打 印 机,
RS232C串行通信设备等
数据通道,如磁带,磁盘等
实时时钟,如定时器芯片 82C54等的定时输出作为定时中断请求信号
故障信号,如电源掉电等
软件中断,如为调试程序而设置的单步中断广义中断在 80286以后的处理器中均将广义中断分为中断和异常两大类:由外部事件引起的中断称为 外部中断,由内部事件引起的中断称为 内部异常二、中断系统的功能为满足中断要求,中断系统应具有的功能可归结为中断处理和中断控制
中断处理包括发现中断请求,响应中断请求,中断处理与中断返回
中断控制主要是实现中断优先级的排队和中断嵌套三、中断的主要用途在微机系统中,中断的主要用途是
实现输入/输出操作
电源掉电或其他情况的报警
控制台或人工干预
多处理机系统中各处理机之间的协调
控制操作系统四、可屏蔽中断与不可屏蔽中断根据微处理器内部受理中断请求的情况,中断可分为可屏蔽中断与不可屏蔽中断两种
凡是微处理器内部能够,屏蔽,的中断,称为可屏蔽中断
凡是微处理器内部不能,屏蔽,的中断,称为不可屏蔽中断
所谓,屏蔽,是指微处理器拒绝响应中断请求信号,
不允许中断微处理器所执行的主程序 。 这通常是由内部的中断触发器 (或中断允许触发器 )来控制的
7.1.2中断处理过程微机系统中断处理过程的流程图如图 7-1所示一,CPU响应中断的条件
1.设置中断请求触发器每个中断源向 CPU发出中断请求信号是随机的,而大多数 CPU都是在现行周期结束时,
才检测有无中断请求发出,故在现行指令执行期间,必须把随机输入的中断请求信号锁存起来,并保持到 CPU响应这个中断请求后才可以清除中断请求 。 因此,要求每一个中断源有一个中断请求触发器,如图 7-2中所示
2.设置中断屏蔽触发器在存在多个中断源的情况下,为增加控制的灵活性,常要求在每一个外设的接口电路中,设置一个中断屏蔽触发器,只有当此触发器为,1”时,外设的中断请求才能被送到
CPU,如图 7-2中所示,可把 8个外设的中断屏蔽触发器组成一个中断屏蔽寄存器端口,
用输出指令来控制它们的状态
3.CPU内部设置中断允许触发器的状态
在 CPU内部有一个中断允许触发器,只有当其为,l”
时,CPU才能响应中断;若其为,0”时,即使中断请求线上有中断请求,CPU也不响应
可用允许中断和禁止中断指令来设置中断允许触发器的状态
当 CPU复位时,中断允许触发器也复位为,0”,即关中断 。 当中断响应后,CPU就自动关闭中断,以禁止接受另一个新的中断,因而通常在中断服务程序结束之前,必须要执行两条指令,即允许中断指令和中断返回指令
4.CPU在现行指令结束后响应中断
在满足上面三个条件的情况下,CPU在执行现行指令的最后一个机器周期 (总线周期 )的最后一个时钟周期 (T状态 )时,才测试中断输入线 INTR(或 NMI),若发现中断请求有效,
则把内部的中断锁存器置,1”,下一总线周期进入中断响应周期二,CPU对中断的响应过程进入中断周期后,中断响应的过程如下
⒈ 关中断
CPU在响应中断后,发出中断响应信号,同时内部自动地关中断,以禁止接受其他的中断请求 。
⒉ 保护断点把断点处的标志寄存器 F的内容,段寄存器 CS值和指令指针 IP值依次压入堆栈保存,以便中断处理完后能正确地返回到主程序的断点地址,接着执行被中断的程序
INTA
CPU对中断的响应过程
⒊ 识别中断源
CPU要对中断请求进行处理,必须要找到相应中断服务程序 (处理中断的程序 )的入口地址,这就是中断源的识别识别中断源有两种方法 -1
查询中断当外设没有提出中断请求时,CPU照常执行主程序,只有在接收到外设的中断请求后 CPU才去查询,
以识别提出中断请求的设备,主要采用软件查询 。
软件查询是用程序查询的方法,查询中断请求寄存器的当前值,查询程序依次查询每一个外设的中断状态位,通过测试该状态位来判断对应的外设是否发出过中断请求,如果有,则转到相应的中断服务程序识别中断源有两种方法 -2
向量中断 (Vectored Interrupt)
又称矢量中断,在具有向量中断的微机系统中,
每个外设都预先指定一个中断向量,当 CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断向量送入 CPU,以自动地提供相应的中断服务程序的入口地址,转入中断服务 。 用向量中断来确定中断源主要是用硬件来实现的,通常在微机系统中采用可编程中断控制器来提供中断向量
CPU对中断的响应过程
⒋ 保护现场为了不使中断服务程序的运行影响主程序的状态,
必须把断点处有关寄存器 (指在中断服务程序中要使用的寄存器 )内容压入堆栈保护
⒌ 执行中断服务程序
⒍ 恢复现场即把中断服务程序压入堆栈的现场信息从堆栈中弹出来,并存入到原寄存器中,这是在中断服务程序中用 POP指令来实现的
CPU对中断的响应过程
⒎ 开中断与返回开放中断在返回之前,目的是返回主程序后能继续响应新的中断请求 。 从中断返回到断点处,有一条专门的中断返回指令,该指令的隐操作是将堆栈栈顶处连续的三个字依次弹出给指令指针 IP,段寄存器 CS以及标志寄存器 F
7.1.3 8086/8088的中断系统
8086/ 8088有一个简单而灵活的中断系统,每个中断都有一个中断类型码 (Type
Code),以供 CPU进行识别,8086/ 8088
最多能处理 256种不同的中断类型 。 中断可以由 CPU以外的硬件设备驱动,也可由软件中断指令启动 。 在某些情况下,也可由 CPU
自身启动,8086/ 8088的中断源如图 7-3
所示 。 从图可见 8086/ 8088的中断源可分为两类,即外部中断和内部中断
8086/8088的中断系统一、外部中断
8086/ 8088有两条中断信号线 —INTR和 NMI,
可供外设向 CPU发中断请求信号
可屏蔽中断 INTR
可屏蔽 中断请求 线 INTR 通常由中 断控制 器
82C59A驱动,该控制器又同需要中断服务的外部设备相连 。 CPU通过向 82C59A写命令字来控制
82C59A的工作,82C59A 负责管理多个外设以中断方式与 CPU交换数据,例如,82C59A接收与其相连接的外部设备送来的中断请求,并判断提出中断请求的哪一个外部设备的优先级最高,如果被选中设备的优先级比现行正接受服务的设备 (如果有的话 )的优先级高,就启动 8086/ 8088的 INTR线可屏蔽中断 INTR
当 INTR信号有效 (为,1”)时,CPU将根据中断允许 标 志 IF 的 状 态 而 采 取 不 同 的 措 施 。 如果
IF=“L”( 置 0),表示 INTR 线上的中断屏蔽
(Masked)或禁止 (disabled),CPU将不理会该中断请求而处理下一条指令,由于 CPU并不锁存
INTR信号,因此 INTR信号必需保持有效状态,直到 接 收 到 响 应 信 号 或 撤 消 请 求 为 止 。 如果
IF=“H”(置 1)表示 INTR线上的中断开放,CPU在完成现在正在执行的指令后,识别该中断请求,并进行中断处理 。 中断允许标志 IF可以用 STI(中断允许位置位 )指令或 CLI(中断允许位清零 )指令来设定 。
也可以将命令写入 82C59A,从而有选择地屏蔽
82C59A所控制的中断申请输入设备可屏蔽中断 INTR
CPU对 INTR中断请求的响应过程是执行两个
(中断响应 )总线周期,如图 7-4所示 。 如果在中断响应周期内出现一个总线保持请求
(HOLD—最小方式,或 RQ/GT—最大方式 ),那么在两个中断响应周期结束以前不会接受这个请求 。
在 8086/ 8088的最大方式下,在这两个中断响应周期内输出 信号,以通知其他处理器不能再试图控制总线
INTA
LOC K
可屏蔽中断 INTR
在第一个中断响应周期内 信号通知
82C59A,中断请求已被接受;在第二个中断响应周期内 信号有效时,82C59A必须把请求服务的那个设备的中断类型码 (0~
255) 送 到 数 据 总 线,该 中 断 类 型 码 是
82C59A的初始化过程中由 8086/ 8088写入的 。 CPU读入该中断类型码后,由此调用相应的中断服务程序 。
INTA
INTA
可屏蔽中断 INTR
不可屏蔽中断 NMI
⒉ 不可屏蔽中断 NMI
不可屏蔽中断请求信号 NMI用来通知 CPU发生了
,灾难性,的事件,如电源掉电,存储器读写出错,
总线奇偶位出错等 。 NMI线上中断请求是不可屏蔽的 (即无法禁止的 ),而且立即被 CPU锁存,因此
NMI是边沿触发的,不需要电平触发 。 NMI的优先级比 INTR高 。 由于不可屏蔽中断的类型号预定为 2,
在 CPU响应 NMI时,不必由中断源提供中断类型码,
因此,NMI响应也不需要执行中断响应总线周期不可屏蔽中断 NMI
CPU识别一个外部中断请求所需的时间称为,中断等待时间,,这取决于执行完现行指令还需要多少个时钟周期 。 一般而言,在执行乘法,除法,移位或循环指令时,如果接到外部中断请求,其等待时间最长二、内部中断内部中断是通过软件调用的不可屏蔽中断,
包括溢出中断,除法出错中断,单步中断,
INT n指令中断以及单字节 INT 3指令中断
⒈ 溢出中断如果上一条指令使溢出标志 OF置,1”,那么在执行溢出中断指令 (INTO)时,立即产生一个 4型中断 (中断类型码为 4)
内部中断
⒉ 除法出错中断在执行除法指令 DIV或 IDIV后,如果商大于规定的目标操作数 (即目标寄存器所能表达的范围 ),则
CPU立即产生一个 0型中断
⒊ INT n 指令中断
8086/ 8088的指令系统中有一条 INT指令,当执行完这条指令就立即产生中断 。 CPU根据该指令中的中断类型码 n,确定调用哪个服务程序来处理这个中断内部中断
⒋ 断点中断 (Breakpoint Interrupt)
断点中断即单字节 INT 3指令中断,中断类型码为 3,该中断是专供调试程序设置断点所使用的,
断点一般可以处于程序中任何位置 。 在断点处,停止当前程序的执行,CPU按中断类型码为 3来响应中断 。 通常,在调试时把断点插入程序中的关键之处,以便检查并显示当前寄存器以及存储单元的内容,便于调试程序内部中断
⒌ 单步 (陷阱 )中断当陷阱标志 TF置,1”时,8086/ 8088处于单步工作方式 。 在单步工作时,每执行完一条指令,
CPU就自动产生一个类型号为 1的中断,作为中断处理过程的一部分,CPU将自动地把标志寄存器和断点值 ( CS,IP) 压入堆栈,然后清除 TF和 IF,
CPU进入单步中断处理过程,它就不会以单步工作方式来执行程序,而以正常的方式执行单步处理的中断服务程序 。 当单步中断过程结束时,从堆栈中弹出原来的断点值 ( CS,IP) 及标志寄存器 F的内容,使 CPU返回单步方式内部中断单步方式是一种有用的调试工具,它使单步过程成为能逐条指令地观察系统操作的一个,窗口,。 例如,单步中断过程可以在每执行一条指令后打印或显示寄存器内容,指令指针的值,以及关键的存储器变量等 。 这样就能详细地跟踪一个程序的具体执行过程,
确定问题的所在内部中断上述所有内部中断的 特点 是?
中断类型码或者包含在指令中,或者是预先规定的?
不执行响应外部中断的中断响应周期?
除单步中断外,任何内部中断都无法禁止?
除单步中断外,任何内部中断的优先级都比任何外部中断的优先级高中断优先级
8086/ 8088的中断优先级见表 7-1
表 7-1 中断优先级中断 优先级除法出错,INT n,INTO 最高
NMI …
INTR …
单步 最低三、中断向量表中断向量表又称中断指针表,是存放中断服务程序入口地址 (即,中断向量,)的表格 。 它存放在存储 器 的 最 低 端 ( 0000H,0000H ~ 0000H,
03FFH),共 1024个字节,每 4个字节存放一个中断服务程序的入口地址,一共可以存放 256个中断服务程序的入口地址 。 较高地址的两个字节存放中断服务程序入口的段基值;较低地址的两个字节存放入口地址的段内偏移量 。 这 4个单元的最低地址称为向量地址,其值为对应的中断类型码乘以 4。
8086/ 8088中断向量表的结构如图 7-5所示中断向量表由图可见,8086/ 8088的中断向量表由三部分组成:
专用的有 5个 (0#~ 4#),
保留的有 27个 (5#~ 31#),
可供用户定义的有 224个
(32#~ 255#)。,专用的,
是指 8086/ 8088系统中统一规定并使用的中断类型 。
,保留的,是指为系统开发所保留的中断类型中断向量表
8086/8088在响应中断以后,先将标志寄存器压入堆栈,然后将执行一个与段间间接调用 (CALL)指令相当的过程来启动一个中断过程,该过程中,CPU将 CS和 IP压入堆栈,
以保存断点的地址,然后将中断向量表中相应的 4个字节内容弹出并赋给 IP和 CS,于是
CPU开始执行中断服务程序如果 n个中断请求同时到达,则 CPU将按优先级顺序来调用中断过程四、中断过程
8086/ 8088对一个中断过程的基本响应过程见图 7-6。 当进入中断过程时,CPU把标志寄存器,
CS和 IP压入堆栈,并清除 TF和 IF。 在中断过程中,
可以用 STI指令重新开放外部中断,使 INTR线上的中断请求能中断这个中断过程 。 注意,在 STI之后的那条指令执行完以后才会真正开放中断 。 NMI线上的中断请求则始终能够中断该过程 。 必须注意的是,一个中断处理过程中不能再发生需要该过程正为之服务的中断中断过程所有的中断过程都应该以 IRET指令结尾,IRET指令总是认为堆栈仍处于进入该过程时的状态 。
该指令将栈顶的三个字分别弹出到 IP、
CS和标志寄存器中,
这样就回到了中断过程开始前将要执行的那条指令上去
7.2 可编程中断控制器 82C59A
Inter 82C59A是一种可编程中断控制器,
一个 82C59A可以管理 8级中断,每一级中断都可以屏蔽或允许 。 82C59A在中断响应周期可提供相应的中断类型号,从而迅速转至中断服务程序 。 82C59A设计有多种工作方式,可以通过编程来选择,以适应不同的应用场合可编程中断控制器 82C59A
可编程中断控制器 82C59A具有以下 特点?
与所有 Intel系列微处理机兼容?
在 12.5MHz 80C286 和 8MHz 80C86/88
下,无等待状态,高速工作?
管脚与 NMOS82C59A兼容?
8级中断,通过级连可扩展至 64级?
可编程中断模式?
单 5V供电电压可编程中断控制器 82C59A
低功耗的 CHMOS?
工作温度范围:
C82C59A 0?C to +70?C
I82C59A -40?C to +85?C
M82C59A -55?C to +125?C
7.2.1 82C59A内部结构
82C59A的内部结构如图 7-7所示,主要有
8个基本组成部分一,数据总线缓冲器
8位的双向三态缓冲器,一般与 CPU数据总线 D7~ D0直接连接,完成命令,状态信息的传送,中断类型号也是由数据缓冲器送到 CPU
7.2.1 82C59A内部结构二,读写控制逻辑该部件接收来自 CPU的读写命令,完成规定的操作 。 操作过程由,Ao、,等输入信号共同控制 。 在 CPU写 82C59A时,把写入数据送至相应的命令寄存器中 (包括初始化命令字和操作命令字 )。 在 CPU读 82C59A
时,控制相应寄存器的内容输出到数据总线上
CS WR RD
7.2.1 82C59A内部结构三,中断请求寄存器 IRR
IRR(Interrupt Request Register)是与外部接口的中断请求线相连的寄存器,请求中断处理的外设通过 IR0~ IR7向 82C59A请求中断服务,并把中断请求信号锁存在中断请求寄存器中
7.2.1 82C59A内部结构四,中断屏蔽寄存器 IMR
IMR(Interrupt Mask Register)是 —个
8位寄存器,用来设置中断请求的屏蔽信息 。
当 IMR中第 i位被屏蔽时 (即 IMRi= 1),禁止
IRi引脚发出的中断请求信号,使之不可能通过 82C59A向 CPU申请中断
7.2.1 82C59A内部结构五,中断服务寄存器 ISR
ISR(Interrupt Service Register)用于存放当前正在进行处理的中断源 。 ISR的置位是在第一个 脉冲期间,由优先权电路
(PR)根据 IRR中各申请中断位的优先级别和
IMR中屏蔽字的状态,选取允许中断的最高优先级请求位,选通到 ISR中 。 当中断处理完毕,ISR的复位由中断结束方式决定
INTA
7.2.1 82C59A内部结构六,优先权电路优先权电路 (Priority PR)负责检查中断源的中断请求的优先级,并与,正在服务中的中断,进行比较,确定是否将这个中断请求送给处理器 。 假定中断源的中断比正在服务中的中断具有更高的优先权,
则 PR就使 INT线变为高电平,送给 CPU,为它提出申请,并在中断响应时将它记入 ISR的对应位中 。
如果中断源的中断优先级等于或低于正在服务中的中断优先级,则 PR不为其提出申请
PR相当于一个优先级编码器和一个比较器电路,
可实现中断判断,如图 7-8所示
7.2.1 82C59A内部结构
7.2.1 82C59A内部结构七,控制逻辑控制逻辑按初始化设置的工作方式控制
82C59A的全部工作 。 该电路可根据 IRR的内容和 PR判断结果向 CPU发中断请求信号 INT,
并接受 CPU发回的中断响应信号,使
82C59A进入中断服务状态八,级联缓冲比较器级联缓冲比较器用于实现多个 82C59A之间的级联,使得中断源由 8个扩展至 64个
INTA
7.2.2 中断处理过程下面以 82C59A单片使用为例,说明可屏蔽中断处理的过程
当一条或多条中断请求线 IR0~ IR7变高时,
设置相应的 IRR位
PR对中断优先权和中断屏蔽寄存器的状态进行判断之后,如果某中断优先权最高且为允许中断状态,就向 CPU发高电平中断申请信号 INT,请求中断服务
CPU响应中断时,送出中断响应信号 INTA
中断处理过程
82C59A接到来自 CPU的第一个 信号时,当前中断服务寄存器 (ISR)中相应位置位,并把 IRR中相应位复位 。 同时,82C59A准备向数据总线发送中断类型码
在 82C59A发送中断类型码的最后 —个 负脉冲期间,如果是在 AEOI(自动结束中断 )方式下,在这个 负脉冲结束时复位 ISR的相应位 。 在非自动中断结束方式下,ISR相应位要由中断服务程序结束时发出的 EOI命令来复位
INTA
INTA
INTA
7.2.3 82C59A引脚信号
82C59A是一个 28
引脚的双列直插芯片,
其引脚如图 7-9所示
7.2.3 82C59A引脚信号一,与 CPU的接口信号主要包括
D0~ D7,三态,8位双向数据线,CPU与
82C59A之间利用这个数据总线传送数据及命令
,写控制输入信号
,读控制输入信号
A0,地址选择信号,用来对 82C59A内部的 2
个可编程寄存器进行选择
WR
RD
7.2.3 82C59A引脚信号
,片选输入信号,低电平有效
INT,由 82C59A向 CPU输出的中断请求信号
,输入信号,接收 CPU送来的中断响应信号二,与外部设备的接口信号
IR0~ IR7共有 8个中断请求输入信号,高电平或上升沿有效 (由编程规定 ),用于接收外设接口的中断请求
CS
INTA
7.2.3 82C59A引脚信号三,级联时的接口信号级联时的接口信号包括 CAS0~ CAS2,
82C59A级联时使用,用来构成 82C59A的主从式级联控制结构,见图 7-10
7.2.3 82C59A引脚信号
7.2.3 82C59A引脚信号主从结构中,主从片 82C59A的 CAS0~ CAS2全部对应相连 。 当 82C59A作为主片时,CAS0~ CAS2
为输出信号,用 于 发送 从 片 的 标 识代 码 ; 当
82C59A作为从片时,CAS0~ CAS2为输入信号,
用于接收本从片的标识代码 。 编程时设定的从片标识代码保存在级联缓冲器内 。 在中断响应时,主
82C59A把当前申请中断 ( IRi) 的编码从 CAS0~
CAS2上输出出去,从 82C59A把这个标识代码与自己级联缓冲器内的标识码做比较 。 当 信号到达时,
只有当被选中的从片才把中断类型码送至数据总线 。
当 82C59A单片使用时,不使用这些引脚
7.2.3 82C59A引脚信号
/,从片编程缓冲器使能信号 。 该信号有两种功能:当工作在缓冲方式时,它是输出信号,用作数据总线缓冲器的使能信号
(EN),即用它来控制数据收发器的工作;当
82C59A工作在非缓冲方式时,它是输入信号,用来指明该 82C59A是主片 ( / = 1
时 )还是从片 ( / = 0时 )
SP EN
SP
SP
EN
EN
7.2.4 工作方式
82C59A有多种工作方式,这些工作方式可以通过初始化命令字 ( ICW1~ ICW4) 和操作命令字 (OCW0~ OCW4)来设置一,引入中断请求的方式
边沿触发方式以上升沿向 82C59A请求中断,上升沿后可一直维持高电平,不会再产生中断
7.2.4工作方式
电平触发方式以高电平申请中断,但在响应中断后必须及时清除高电平,以免引起第 2次误中断
中断查询方式外 部 设 备 通 过 82C59A 申请中断,但
82C59A却不使用 INT信号向 CPU申请中断,
CPU用软件查询确定中断源,并为其服务
7.2.4工作方式二,连接系统总线的方式在大系统中,要求数据总线有总线缓冲器 。
82C59A与这种带总线缓冲器的系统总线连接的方式称为缓冲器方式 。 此时的 / 用于启动缓冲器工作,
不能用作表示主/从关系,故需要在 ICW4中设置
M/ 位来表示级联中 82C59A芯片的主 /从关系 。 若在小系统中,82C59A则不需要总线缓冲器,而是将其直接连接到数据总线 。 82C59A与这种不需要总线缓冲器而直接连到系统总线的方式称为非缓冲器方式 。
此时,/ 用于表示主/从芯片
SP
SP EN
EN
S
7.2.4工作方式三,屏蔽中断源的方式
普通屏蔽方式利用操作命令字 OCWl,使屏蔽寄存器 IMR中的一位或数位置 1来屏蔽一个或数个中断源的中断请求 。
若要开放某一个中断源的中断请求,则将 IMR中相应的位清 0
特殊屏蔽方式在某些场合,执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式 。 它可通过 OCW3的 D6D5= 11来设定
7.2.4工作方式四,优先级排队的方式
全嵌套方式
特殊全嵌套方式
优先级自动循环方式
优先级特殊循环方式
7.2.4工作方式五,结束中断的处理方式
自动中断结束方式在中断服务程序中,中断返回之前,不需要发出中断结束命令就会自动清除该中断源所对应的 ISR位,实际上,在 CPU发出第 2个信号时,82C59A即自动清除 ISR中的对应位 。 该方式用于多个中断源不会产生嵌套的系统中
INTA
7.2.4工作方式
非自动中断结束方式在中断服务程序返回之前,必须发出中断结束命令才能使 ISR中的当前服务位清除 。 此时的中断源结束命令有两种形式:?
不指定中断源结束命令,即设置操作命令字
OCW2= 00100000B?
指定中断结束命令,即设置 OCW2= 00100L2L1
L0,其中的最低 3位 L2 L1 L0的编码,表示被指定要结束的中断
7.2.5 命令字和初始化编程
82C59A是根据收到 CPU的命令字进行工作的 。
CPU的命令字分两类:一类是初始化命令,称为 初始 化 命 令 字 (Initialization Command Word,
ICW),初始化命令字往往是在系统启动时,由初始化程序设置的 。 初始化命令字一旦设定,一般在系统工作过程中就不再改变 。 另一类是操作命令,称为 操作命令字 (Operation Command Word,
OCW)。 在初始化后,CPU用这些控制字来控制
82C59A执行不同的操作,如中断屏蔽,中断结束,
优先权循环和中断状态的读出和查询等
7.2.5命令字和初始化编程
OCW可在初始化之后的任何时刻写入
82C59A,并可多次设置 CPU对 82C59A写入 命 令 设 置 其 工 作 状 态,或由 CPU 对
82C59A的状态寄存器进行读出,与一般的
I/O设备一样,都是由,A0、,等信号 的 组 合 来 控 制 的,这 实 际 上 形 成 了
82C59A的输入输出端口地址,见表 7-2
CS RD WR
7.2.5命令字和初始化编程表 7-2 82C59A的输入输出端口地址由表可见,CPU用 A0寻址 82C59A的端口共有 2个,1个为偶地址,1个为奇地址
7.2.5命令字和初始化编程一,初始化命令字
82C59A有 4个初始化命令字 ICW1~ ICW4,
用于对 82C59A的初始状态进行设置 。
⒈ 中断请求触发方式的设置及 芯片数量选择的命令字 ( ICW1) ICW1应写入偶地址端口,
即 A0= 1,格式如图 7-11所示
D7,D6和 D5在 8086/ 8088系统中无意义,
可设为 0
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D4= 1,ICW1的标志位
D3 (LTIM),设定中断请求信号的触发方式
D3= 1为电平触发,D3= 0为边沿触发
D2,在 8086/8088系统中无意义,总是为 0
D1,单片使用或级联使用
D1= 1表示单片 82C59A,D1= 0表示多片级联
D0,指出初始化程序中是否需要 ICW4
D0= 1表示需要 ICW4
7.2.5命令字和初始化编程例 【 7-1】 某 8086微机系统中,使用单片
82C59A,中断请求信号为上升沿触发,需要设置 ICW4,端口地址为 20H和 21H,则其初始化命令字 ICW1应为,00010011= 13H,
设置 ICW1的指令为:
MOV AL,13H
OUT 20H,AL
7.2.5命令字和初始化编程
⒉ 设置中断类型码高 5位的初始化命令字 ( ICW2)
82C59A在第 2个中断响应总线周期向 CPU
提供的 8位中断类型码,实际上是由两部分构成,其中,高 5位 T7~ T3是由用户通过编程确定的,这就是初始化命令字 ICW2,类型码的低 3位,由 82C59A内部电路自动产生,分别对应于 8个中断源的中断请求信号 IR0~
IR7 的编号,即 IR0 为 000,IR1 为
001,……,IR7为 111
7.2.5命令字和初始化编程
ICW2应写入奇地址端口,即 Al= 1,格式如图 7-12所示
7.2.5命令字和初始化编程
⒊ 标识主片/从片初始化命令字 ( ICW3)
只有当系统中有多片 82C59A级联时才需要设置 ICW3,单片 82C59A时不用设置
ICW3。 当多片 82C59A级联时,ICW3用来指出主片上连接从片以及从片连接到主片的情况,所以,ICW3有两种格式,如图 7-13
和 7-14所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒋ 方式控制初始化命令字 ( ICW4)
当 ICW1中的 D0= 1时,初始化 82C59A时需要写入 ICW4。 ICW4写入奇地址端口,其格式如图 7-15所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D7~ D5,ICW4的标志位,这 3位为 0
D4 (SFNM),SFNM= 1,表示当前 82C59A工作于特殊全嵌套方式; SFNM=0,表示当前 82C59A
工作于普通全嵌套方式
D3 (BUF),设置 82C59A与系统的连接方式 。 D3
=1,表示采用缓冲方式,82C59A通过总线驱动器与数据总线相连,/ 为输出,意识为,作为数据总线驱动器的工作使能信号 。 D3= 0,表示
82C59A工作在非缓冲方式,即数据总线不带缓冲器,此时 / 为输入,意识为,= 0,该片为从片,= 1,该片为主片,此时 M/ 位不起作用
SP EN
S
EN
SP EN SP SP
SP
7.2.5命令字和初始化编程
D2 (M/ ),级联方式设置 。 在缓冲方式 (BUF= 1)
下,用来表示本片是主片还是从片 。 当 M/ =1时,
表示该片为主片; M/ = 0时,表示该片为从片 。
当 BUF= 0时,M/ 位不起作用,可为 0或 1。 显然,
BUF和 M/ 位要配合使用
D1 (AEOI),中断结束方式设置位 。 当 AEOI= l,
82C59A设置为中断自动结束方式 。 在自动结束方式下,当第 2个中断响应负脉冲 结束时,将中断服务寄存器的相应位清零
D0(?PM),(?PM= 1,表示当前 82C59A用于 8位机以上的系统; (?PM= 0,表示当前所在系统为 8
位机系统
S
S
S
S
S
INTA
7.2.5命令字和初始化编程二,82C59A初始化编程逻辑
82C59A进入正常工作之前,系统必须对每个 82C59A进行初始化设置
初始化是通过编程将初始化命令字按顺序写入 82C59A的端口实现的,82C59A的初始化流程如图 7-16所示
7.2.5命令字和初始化编程例 【 7-2】 某 8086 微机系统中有一片
82C59A,中断请求信号为电平触发,中断类型码为 40H~ 47H,中断优先级管理采用普通全嵌套方式,中断结束方式采用自动结束方式,系统中未使用数据缓冲器,系统分配给 82C59A的端口地址为 20H和 21H,试对该 82C59A进行初始化编程
7.2.5命令字和初始化编程分析,由于系统中使用单片 82C59A,所以初始化时不需要 ICW3,本例中 82C59A要求工作在非缓冲方式,故在硬件上将 SP*/EN*接 +5V,ICW4中的 M/ S*位无意义,可设置为 0
对 82C59A的初始化程序如下:
MOV AL,00011011B ;设置 ICW1初始化命令字
OUT 20H,AL ;将 ICW1输出到偶地址端口
MOV AL,01000000B ; ICW2中断类型号基值
OUT 21H,AL ;将 ICW2送入奇地址端口
MOV AL,00000011B ; ICW4
OUT 21H,AL ;将 ICW4送入奇地址瑞口
7.2.5命令字和初始化编程三,操作命令字 OCW
⒈ 中断屏蔽操作命令字 OCWl
OCWl用来实现对中断源的屏蔽功能,
OCWl的内容被直接置入 IMR屏蔽寄存器,
其格式如图 7-17所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒉ 优先级循环方式和中断结束方式操作命令字 OCW2
OCW2有两个功能:设置中断结束方式和优先级循环方式,要求写入偶地址端口,其格式如图 7-18所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D7,用于规定中断优先级是否设置为循环方式
D7= 1,为优先权循环方式; D7= 0,为非循环方式
D6:用于规定 OCW2中的 L2 L1 L0是否有效
D6= l,表示 D2~ D0有效; D6= 0,表示无效
D5 (EOI),中断结束命令位 。 D5= 1,使中断服务寄存器中的对应位复位 。 如前所述,如果 ICW4
中 D1(AEOI)位为 l,表示中断采用自动结束方式 。
在中断自动结束方式下,当 CPU第 2个负脉冲结束时,中断服务寄存器 ISR中相应位会自动清除
7.2.5命令字和初始化编程但如果 AEOI为 0,则 ISRi位就要用 EOI命令来消除 。 EOI命令是通过 OCW2中的 D5位设置的
D4,D3,D4 D3= 00,OCW2的标志位
D2~ D0( L2 L1 L0),有两个用途:当
OCW2给出特殊的中断结束命令时 (即 EOI=1,
SL=1,R=0),L2,L1和 L0指出具体应清除中断服务寄存器中的哪一位
7.2.5命令字和初始化编程当 OCW2给出特殊的优先级循环方式命令时 (即 EOI= 0,SL= 1,R= 1),L2,L1和 L0
指出循环开始时哪个中断的优先级最低表 7-3 归纳了对 D7 ~ D5 位在各种编码下
OCW1完成的功能
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒊ 特殊屏蔽方式和中断查询方式操作命令
OCW3
有 3个功能:
设置和撤消特殊屏蔽方式
设置中断查询方式
设置读出 ISR或 IRR寄存器的内容格式如图 7-19所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
用 OCW3设置和撤消特殊屏蔽方式特殊屏蔽方式是 82C59A为了响应低级中断而提供的一种功能 。 为了中断当前的中断服务程序转去响应低级中断,CPU要先向 82C59A发出一个特殊屏蔽字,使 82C59A进入特殊屏蔽状态;当低级中断处理完毕返回被中断的高级中断服务程序的断点时,要发出撤消特殊屏蔽字,以恢复原来的嵌套顺序 。 设置和撤消特殊屏蔽字由 OCW3中的 D6,D5
位来实现
7.2.5命令字和初始化编程
ESMM称为特殊屏蔽允许位,SMM称为特殊屏蔽方式位,这两位的组合决定是设置特殊屏蔽还是撤销屏蔽?
当 ESMM,SMM= 11时,将 82C59A设置为特殊屏蔽方式,即只屏蔽本级中断请求,允许高级的或低级的中断申请进入?
当 ESMM,SMM= 10时,撤消特殊屏蔽方式,恢复原来的优先级控制?
当 ESMM= 0时,不能建立特殊屏蔽方式,SMM位也不起作用设 D2,D1,D0这 3位均为 0,则设置的特殊屏蔽方式字
OCW3=68H,撤消特殊屏蔽方式字 OCW3= 48H
7.2.5命令字和初始化编程
OCW3的中断查询功能
OCW3的 D3位即 P位为中断查询方式位 。
当 P=1时,使 82C59A处于中断查询方式,
即 CPU向 82C59A偶地址端口写入一个查询命令 OCW3= 0CH后,再执行输入指令 (IN),
CPU便可读入 82C59A提供的查询字 。 查询字反映了当前有无中断请求,以及中断请求中优先级最高的是哪一个 。 82C59A的查询字格式如图 7-20
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
OCW3的读操作功能
82C59A内部有 3个寄存器 (IRR,IMR、
ISR)可供 CPU读出其当前的状态,CPU在发读命令之前,须先指定读取哪个寄存器,然后再发 IN指令,才能读取 IRR和 ISR中的内容 。 当所读的寄存器不变,就不必每次都指定所要读取的寄存器 。 在 82C59A初始化后,
自动指向读 IRR
7.2.5命令字和初始化编程
OCW3中的 D1,Do两位用来指定具体读
ISR和 IRR中的哪一个寄存器?
当 RR,RIS= 11时,表示 CPU的下一条
IN指令要读取 ISR寄存器的内容?
当 RR,RIS=10时,表示 CPU的下一条 IN
指令要读 IRR寄存器的内容对 IMR寄存器的读出,不需要事先发出指定命令,直接通过读奇地址端口就可以读到
IMR寄存器的内容
掌握有关中断和中断源,中断处理过程,中断优先级和中断嵌套等基本知识
掌握可编程中断控制器 82C59A外部特性及其与 CPU的连接方式
掌握 82C59A的初始化编程
掌握 8086/8088可屏蔽中断的全过程
了解 82C59A的结构及级联方式的运用等教学目的和要求中断及中断控制器重点
中断及中断处理过程
82C59A的初始化编程
8086/8088可屏蔽中断的全过程难点
8086/8088的中断系统
中断优先权的控制机理
7.1.1 中断、中断源及中断系统一,中断,中断源
所谓,中断,是指在 CPU正常运行程序时,
由于内,外部事件引起 CPU暂时中止正在运行的程序,转而去执行请求 CPU暂时中止的内,外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序
能够向 CPU发出中断请求的中断来源称为
,中断源,
常见的中断源
一 般 的 输 入 / 输 出 设 备,如 打 印 机,
RS232C串行通信设备等
数据通道,如磁带,磁盘等
实时时钟,如定时器芯片 82C54等的定时输出作为定时中断请求信号
故障信号,如电源掉电等
软件中断,如为调试程序而设置的单步中断广义中断在 80286以后的处理器中均将广义中断分为中断和异常两大类:由外部事件引起的中断称为 外部中断,由内部事件引起的中断称为 内部异常二、中断系统的功能为满足中断要求,中断系统应具有的功能可归结为中断处理和中断控制
中断处理包括发现中断请求,响应中断请求,中断处理与中断返回
中断控制主要是实现中断优先级的排队和中断嵌套三、中断的主要用途在微机系统中,中断的主要用途是
实现输入/输出操作
电源掉电或其他情况的报警
控制台或人工干预
多处理机系统中各处理机之间的协调
控制操作系统四、可屏蔽中断与不可屏蔽中断根据微处理器内部受理中断请求的情况,中断可分为可屏蔽中断与不可屏蔽中断两种
凡是微处理器内部能够,屏蔽,的中断,称为可屏蔽中断
凡是微处理器内部不能,屏蔽,的中断,称为不可屏蔽中断
所谓,屏蔽,是指微处理器拒绝响应中断请求信号,
不允许中断微处理器所执行的主程序 。 这通常是由内部的中断触发器 (或中断允许触发器 )来控制的
7.1.2中断处理过程微机系统中断处理过程的流程图如图 7-1所示一,CPU响应中断的条件
1.设置中断请求触发器每个中断源向 CPU发出中断请求信号是随机的,而大多数 CPU都是在现行周期结束时,
才检测有无中断请求发出,故在现行指令执行期间,必须把随机输入的中断请求信号锁存起来,并保持到 CPU响应这个中断请求后才可以清除中断请求 。 因此,要求每一个中断源有一个中断请求触发器,如图 7-2中所示
2.设置中断屏蔽触发器在存在多个中断源的情况下,为增加控制的灵活性,常要求在每一个外设的接口电路中,设置一个中断屏蔽触发器,只有当此触发器为,1”时,外设的中断请求才能被送到
CPU,如图 7-2中所示,可把 8个外设的中断屏蔽触发器组成一个中断屏蔽寄存器端口,
用输出指令来控制它们的状态
3.CPU内部设置中断允许触发器的状态
在 CPU内部有一个中断允许触发器,只有当其为,l”
时,CPU才能响应中断;若其为,0”时,即使中断请求线上有中断请求,CPU也不响应
可用允许中断和禁止中断指令来设置中断允许触发器的状态
当 CPU复位时,中断允许触发器也复位为,0”,即关中断 。 当中断响应后,CPU就自动关闭中断,以禁止接受另一个新的中断,因而通常在中断服务程序结束之前,必须要执行两条指令,即允许中断指令和中断返回指令
4.CPU在现行指令结束后响应中断
在满足上面三个条件的情况下,CPU在执行现行指令的最后一个机器周期 (总线周期 )的最后一个时钟周期 (T状态 )时,才测试中断输入线 INTR(或 NMI),若发现中断请求有效,
则把内部的中断锁存器置,1”,下一总线周期进入中断响应周期二,CPU对中断的响应过程进入中断周期后,中断响应的过程如下
⒈ 关中断
CPU在响应中断后,发出中断响应信号,同时内部自动地关中断,以禁止接受其他的中断请求 。
⒉ 保护断点把断点处的标志寄存器 F的内容,段寄存器 CS值和指令指针 IP值依次压入堆栈保存,以便中断处理完后能正确地返回到主程序的断点地址,接着执行被中断的程序
INTA
CPU对中断的响应过程
⒊ 识别中断源
CPU要对中断请求进行处理,必须要找到相应中断服务程序 (处理中断的程序 )的入口地址,这就是中断源的识别识别中断源有两种方法 -1
查询中断当外设没有提出中断请求时,CPU照常执行主程序,只有在接收到外设的中断请求后 CPU才去查询,
以识别提出中断请求的设备,主要采用软件查询 。
软件查询是用程序查询的方法,查询中断请求寄存器的当前值,查询程序依次查询每一个外设的中断状态位,通过测试该状态位来判断对应的外设是否发出过中断请求,如果有,则转到相应的中断服务程序识别中断源有两种方法 -2
向量中断 (Vectored Interrupt)
又称矢量中断,在具有向量中断的微机系统中,
每个外设都预先指定一个中断向量,当 CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断向量送入 CPU,以自动地提供相应的中断服务程序的入口地址,转入中断服务 。 用向量中断来确定中断源主要是用硬件来实现的,通常在微机系统中采用可编程中断控制器来提供中断向量
CPU对中断的响应过程
⒋ 保护现场为了不使中断服务程序的运行影响主程序的状态,
必须把断点处有关寄存器 (指在中断服务程序中要使用的寄存器 )内容压入堆栈保护
⒌ 执行中断服务程序
⒍ 恢复现场即把中断服务程序压入堆栈的现场信息从堆栈中弹出来,并存入到原寄存器中,这是在中断服务程序中用 POP指令来实现的
CPU对中断的响应过程
⒎ 开中断与返回开放中断在返回之前,目的是返回主程序后能继续响应新的中断请求 。 从中断返回到断点处,有一条专门的中断返回指令,该指令的隐操作是将堆栈栈顶处连续的三个字依次弹出给指令指针 IP,段寄存器 CS以及标志寄存器 F
7.1.3 8086/8088的中断系统
8086/ 8088有一个简单而灵活的中断系统,每个中断都有一个中断类型码 (Type
Code),以供 CPU进行识别,8086/ 8088
最多能处理 256种不同的中断类型 。 中断可以由 CPU以外的硬件设备驱动,也可由软件中断指令启动 。 在某些情况下,也可由 CPU
自身启动,8086/ 8088的中断源如图 7-3
所示 。 从图可见 8086/ 8088的中断源可分为两类,即外部中断和内部中断
8086/8088的中断系统一、外部中断
8086/ 8088有两条中断信号线 —INTR和 NMI,
可供外设向 CPU发中断请求信号
可屏蔽中断 INTR
可屏蔽 中断请求 线 INTR 通常由中 断控制 器
82C59A驱动,该控制器又同需要中断服务的外部设备相连 。 CPU通过向 82C59A写命令字来控制
82C59A的工作,82C59A 负责管理多个外设以中断方式与 CPU交换数据,例如,82C59A接收与其相连接的外部设备送来的中断请求,并判断提出中断请求的哪一个外部设备的优先级最高,如果被选中设备的优先级比现行正接受服务的设备 (如果有的话 )的优先级高,就启动 8086/ 8088的 INTR线可屏蔽中断 INTR
当 INTR信号有效 (为,1”)时,CPU将根据中断允许 标 志 IF 的 状 态 而 采 取 不 同 的 措 施 。 如果
IF=“L”( 置 0),表示 INTR 线上的中断屏蔽
(Masked)或禁止 (disabled),CPU将不理会该中断请求而处理下一条指令,由于 CPU并不锁存
INTR信号,因此 INTR信号必需保持有效状态,直到 接 收 到 响 应 信 号 或 撤 消 请 求 为 止 。 如果
IF=“H”(置 1)表示 INTR线上的中断开放,CPU在完成现在正在执行的指令后,识别该中断请求,并进行中断处理 。 中断允许标志 IF可以用 STI(中断允许位置位 )指令或 CLI(中断允许位清零 )指令来设定 。
也可以将命令写入 82C59A,从而有选择地屏蔽
82C59A所控制的中断申请输入设备可屏蔽中断 INTR
CPU对 INTR中断请求的响应过程是执行两个
(中断响应 )总线周期,如图 7-4所示 。 如果在中断响应周期内出现一个总线保持请求
(HOLD—最小方式,或 RQ/GT—最大方式 ),那么在两个中断响应周期结束以前不会接受这个请求 。
在 8086/ 8088的最大方式下,在这两个中断响应周期内输出 信号,以通知其他处理器不能再试图控制总线
INTA
LOC K
可屏蔽中断 INTR
在第一个中断响应周期内 信号通知
82C59A,中断请求已被接受;在第二个中断响应周期内 信号有效时,82C59A必须把请求服务的那个设备的中断类型码 (0~
255) 送 到 数 据 总 线,该 中 断 类 型 码 是
82C59A的初始化过程中由 8086/ 8088写入的 。 CPU读入该中断类型码后,由此调用相应的中断服务程序 。
INTA
INTA
可屏蔽中断 INTR
不可屏蔽中断 NMI
⒉ 不可屏蔽中断 NMI
不可屏蔽中断请求信号 NMI用来通知 CPU发生了
,灾难性,的事件,如电源掉电,存储器读写出错,
总线奇偶位出错等 。 NMI线上中断请求是不可屏蔽的 (即无法禁止的 ),而且立即被 CPU锁存,因此
NMI是边沿触发的,不需要电平触发 。 NMI的优先级比 INTR高 。 由于不可屏蔽中断的类型号预定为 2,
在 CPU响应 NMI时,不必由中断源提供中断类型码,
因此,NMI响应也不需要执行中断响应总线周期不可屏蔽中断 NMI
CPU识别一个外部中断请求所需的时间称为,中断等待时间,,这取决于执行完现行指令还需要多少个时钟周期 。 一般而言,在执行乘法,除法,移位或循环指令时,如果接到外部中断请求,其等待时间最长二、内部中断内部中断是通过软件调用的不可屏蔽中断,
包括溢出中断,除法出错中断,单步中断,
INT n指令中断以及单字节 INT 3指令中断
⒈ 溢出中断如果上一条指令使溢出标志 OF置,1”,那么在执行溢出中断指令 (INTO)时,立即产生一个 4型中断 (中断类型码为 4)
内部中断
⒉ 除法出错中断在执行除法指令 DIV或 IDIV后,如果商大于规定的目标操作数 (即目标寄存器所能表达的范围 ),则
CPU立即产生一个 0型中断
⒊ INT n 指令中断
8086/ 8088的指令系统中有一条 INT指令,当执行完这条指令就立即产生中断 。 CPU根据该指令中的中断类型码 n,确定调用哪个服务程序来处理这个中断内部中断
⒋ 断点中断 (Breakpoint Interrupt)
断点中断即单字节 INT 3指令中断,中断类型码为 3,该中断是专供调试程序设置断点所使用的,
断点一般可以处于程序中任何位置 。 在断点处,停止当前程序的执行,CPU按中断类型码为 3来响应中断 。 通常,在调试时把断点插入程序中的关键之处,以便检查并显示当前寄存器以及存储单元的内容,便于调试程序内部中断
⒌ 单步 (陷阱 )中断当陷阱标志 TF置,1”时,8086/ 8088处于单步工作方式 。 在单步工作时,每执行完一条指令,
CPU就自动产生一个类型号为 1的中断,作为中断处理过程的一部分,CPU将自动地把标志寄存器和断点值 ( CS,IP) 压入堆栈,然后清除 TF和 IF,
CPU进入单步中断处理过程,它就不会以单步工作方式来执行程序,而以正常的方式执行单步处理的中断服务程序 。 当单步中断过程结束时,从堆栈中弹出原来的断点值 ( CS,IP) 及标志寄存器 F的内容,使 CPU返回单步方式内部中断单步方式是一种有用的调试工具,它使单步过程成为能逐条指令地观察系统操作的一个,窗口,。 例如,单步中断过程可以在每执行一条指令后打印或显示寄存器内容,指令指针的值,以及关键的存储器变量等 。 这样就能详细地跟踪一个程序的具体执行过程,
确定问题的所在内部中断上述所有内部中断的 特点 是?
中断类型码或者包含在指令中,或者是预先规定的?
不执行响应外部中断的中断响应周期?
除单步中断外,任何内部中断都无法禁止?
除单步中断外,任何内部中断的优先级都比任何外部中断的优先级高中断优先级
8086/ 8088的中断优先级见表 7-1
表 7-1 中断优先级中断 优先级除法出错,INT n,INTO 最高
NMI …
INTR …
单步 最低三、中断向量表中断向量表又称中断指针表,是存放中断服务程序入口地址 (即,中断向量,)的表格 。 它存放在存储 器 的 最 低 端 ( 0000H,0000H ~ 0000H,
03FFH),共 1024个字节,每 4个字节存放一个中断服务程序的入口地址,一共可以存放 256个中断服务程序的入口地址 。 较高地址的两个字节存放中断服务程序入口的段基值;较低地址的两个字节存放入口地址的段内偏移量 。 这 4个单元的最低地址称为向量地址,其值为对应的中断类型码乘以 4。
8086/ 8088中断向量表的结构如图 7-5所示中断向量表由图可见,8086/ 8088的中断向量表由三部分组成:
专用的有 5个 (0#~ 4#),
保留的有 27个 (5#~ 31#),
可供用户定义的有 224个
(32#~ 255#)。,专用的,
是指 8086/ 8088系统中统一规定并使用的中断类型 。
,保留的,是指为系统开发所保留的中断类型中断向量表
8086/8088在响应中断以后,先将标志寄存器压入堆栈,然后将执行一个与段间间接调用 (CALL)指令相当的过程来启动一个中断过程,该过程中,CPU将 CS和 IP压入堆栈,
以保存断点的地址,然后将中断向量表中相应的 4个字节内容弹出并赋给 IP和 CS,于是
CPU开始执行中断服务程序如果 n个中断请求同时到达,则 CPU将按优先级顺序来调用中断过程四、中断过程
8086/ 8088对一个中断过程的基本响应过程见图 7-6。 当进入中断过程时,CPU把标志寄存器,
CS和 IP压入堆栈,并清除 TF和 IF。 在中断过程中,
可以用 STI指令重新开放外部中断,使 INTR线上的中断请求能中断这个中断过程 。 注意,在 STI之后的那条指令执行完以后才会真正开放中断 。 NMI线上的中断请求则始终能够中断该过程 。 必须注意的是,一个中断处理过程中不能再发生需要该过程正为之服务的中断中断过程所有的中断过程都应该以 IRET指令结尾,IRET指令总是认为堆栈仍处于进入该过程时的状态 。
该指令将栈顶的三个字分别弹出到 IP、
CS和标志寄存器中,
这样就回到了中断过程开始前将要执行的那条指令上去
7.2 可编程中断控制器 82C59A
Inter 82C59A是一种可编程中断控制器,
一个 82C59A可以管理 8级中断,每一级中断都可以屏蔽或允许 。 82C59A在中断响应周期可提供相应的中断类型号,从而迅速转至中断服务程序 。 82C59A设计有多种工作方式,可以通过编程来选择,以适应不同的应用场合可编程中断控制器 82C59A
可编程中断控制器 82C59A具有以下 特点?
与所有 Intel系列微处理机兼容?
在 12.5MHz 80C286 和 8MHz 80C86/88
下,无等待状态,高速工作?
管脚与 NMOS82C59A兼容?
8级中断,通过级连可扩展至 64级?
可编程中断模式?
单 5V供电电压可编程中断控制器 82C59A
低功耗的 CHMOS?
工作温度范围:
C82C59A 0?C to +70?C
I82C59A -40?C to +85?C
M82C59A -55?C to +125?C
7.2.1 82C59A内部结构
82C59A的内部结构如图 7-7所示,主要有
8个基本组成部分一,数据总线缓冲器
8位的双向三态缓冲器,一般与 CPU数据总线 D7~ D0直接连接,完成命令,状态信息的传送,中断类型号也是由数据缓冲器送到 CPU
7.2.1 82C59A内部结构二,读写控制逻辑该部件接收来自 CPU的读写命令,完成规定的操作 。 操作过程由,Ao、,等输入信号共同控制 。 在 CPU写 82C59A时,把写入数据送至相应的命令寄存器中 (包括初始化命令字和操作命令字 )。 在 CPU读 82C59A
时,控制相应寄存器的内容输出到数据总线上
CS WR RD
7.2.1 82C59A内部结构三,中断请求寄存器 IRR
IRR(Interrupt Request Register)是与外部接口的中断请求线相连的寄存器,请求中断处理的外设通过 IR0~ IR7向 82C59A请求中断服务,并把中断请求信号锁存在中断请求寄存器中
7.2.1 82C59A内部结构四,中断屏蔽寄存器 IMR
IMR(Interrupt Mask Register)是 —个
8位寄存器,用来设置中断请求的屏蔽信息 。
当 IMR中第 i位被屏蔽时 (即 IMRi= 1),禁止
IRi引脚发出的中断请求信号,使之不可能通过 82C59A向 CPU申请中断
7.2.1 82C59A内部结构五,中断服务寄存器 ISR
ISR(Interrupt Service Register)用于存放当前正在进行处理的中断源 。 ISR的置位是在第一个 脉冲期间,由优先权电路
(PR)根据 IRR中各申请中断位的优先级别和
IMR中屏蔽字的状态,选取允许中断的最高优先级请求位,选通到 ISR中 。 当中断处理完毕,ISR的复位由中断结束方式决定
INTA
7.2.1 82C59A内部结构六,优先权电路优先权电路 (Priority PR)负责检查中断源的中断请求的优先级,并与,正在服务中的中断,进行比较,确定是否将这个中断请求送给处理器 。 假定中断源的中断比正在服务中的中断具有更高的优先权,
则 PR就使 INT线变为高电平,送给 CPU,为它提出申请,并在中断响应时将它记入 ISR的对应位中 。
如果中断源的中断优先级等于或低于正在服务中的中断优先级,则 PR不为其提出申请
PR相当于一个优先级编码器和一个比较器电路,
可实现中断判断,如图 7-8所示
7.2.1 82C59A内部结构
7.2.1 82C59A内部结构七,控制逻辑控制逻辑按初始化设置的工作方式控制
82C59A的全部工作 。 该电路可根据 IRR的内容和 PR判断结果向 CPU发中断请求信号 INT,
并接受 CPU发回的中断响应信号,使
82C59A进入中断服务状态八,级联缓冲比较器级联缓冲比较器用于实现多个 82C59A之间的级联,使得中断源由 8个扩展至 64个
INTA
7.2.2 中断处理过程下面以 82C59A单片使用为例,说明可屏蔽中断处理的过程
当一条或多条中断请求线 IR0~ IR7变高时,
设置相应的 IRR位
PR对中断优先权和中断屏蔽寄存器的状态进行判断之后,如果某中断优先权最高且为允许中断状态,就向 CPU发高电平中断申请信号 INT,请求中断服务
CPU响应中断时,送出中断响应信号 INTA
中断处理过程
82C59A接到来自 CPU的第一个 信号时,当前中断服务寄存器 (ISR)中相应位置位,并把 IRR中相应位复位 。 同时,82C59A准备向数据总线发送中断类型码
在 82C59A发送中断类型码的最后 —个 负脉冲期间,如果是在 AEOI(自动结束中断 )方式下,在这个 负脉冲结束时复位 ISR的相应位 。 在非自动中断结束方式下,ISR相应位要由中断服务程序结束时发出的 EOI命令来复位
INTA
INTA
INTA
7.2.3 82C59A引脚信号
82C59A是一个 28
引脚的双列直插芯片,
其引脚如图 7-9所示
7.2.3 82C59A引脚信号一,与 CPU的接口信号主要包括
D0~ D7,三态,8位双向数据线,CPU与
82C59A之间利用这个数据总线传送数据及命令
,写控制输入信号
,读控制输入信号
A0,地址选择信号,用来对 82C59A内部的 2
个可编程寄存器进行选择
WR
RD
7.2.3 82C59A引脚信号
,片选输入信号,低电平有效
INT,由 82C59A向 CPU输出的中断请求信号
,输入信号,接收 CPU送来的中断响应信号二,与外部设备的接口信号
IR0~ IR7共有 8个中断请求输入信号,高电平或上升沿有效 (由编程规定 ),用于接收外设接口的中断请求
CS
INTA
7.2.3 82C59A引脚信号三,级联时的接口信号级联时的接口信号包括 CAS0~ CAS2,
82C59A级联时使用,用来构成 82C59A的主从式级联控制结构,见图 7-10
7.2.3 82C59A引脚信号
7.2.3 82C59A引脚信号主从结构中,主从片 82C59A的 CAS0~ CAS2全部对应相连 。 当 82C59A作为主片时,CAS0~ CAS2
为输出信号,用 于 发送 从 片 的 标 识代 码 ; 当
82C59A作为从片时,CAS0~ CAS2为输入信号,
用于接收本从片的标识代码 。 编程时设定的从片标识代码保存在级联缓冲器内 。 在中断响应时,主
82C59A把当前申请中断 ( IRi) 的编码从 CAS0~
CAS2上输出出去,从 82C59A把这个标识代码与自己级联缓冲器内的标识码做比较 。 当 信号到达时,
只有当被选中的从片才把中断类型码送至数据总线 。
当 82C59A单片使用时,不使用这些引脚
7.2.3 82C59A引脚信号
/,从片编程缓冲器使能信号 。 该信号有两种功能:当工作在缓冲方式时,它是输出信号,用作数据总线缓冲器的使能信号
(EN),即用它来控制数据收发器的工作;当
82C59A工作在非缓冲方式时,它是输入信号,用来指明该 82C59A是主片 ( / = 1
时 )还是从片 ( / = 0时 )
SP EN
SP
SP
EN
EN
7.2.4 工作方式
82C59A有多种工作方式,这些工作方式可以通过初始化命令字 ( ICW1~ ICW4) 和操作命令字 (OCW0~ OCW4)来设置一,引入中断请求的方式
边沿触发方式以上升沿向 82C59A请求中断,上升沿后可一直维持高电平,不会再产生中断
7.2.4工作方式
电平触发方式以高电平申请中断,但在响应中断后必须及时清除高电平,以免引起第 2次误中断
中断查询方式外 部 设 备 通 过 82C59A 申请中断,但
82C59A却不使用 INT信号向 CPU申请中断,
CPU用软件查询确定中断源,并为其服务
7.2.4工作方式二,连接系统总线的方式在大系统中,要求数据总线有总线缓冲器 。
82C59A与这种带总线缓冲器的系统总线连接的方式称为缓冲器方式 。 此时的 / 用于启动缓冲器工作,
不能用作表示主/从关系,故需要在 ICW4中设置
M/ 位来表示级联中 82C59A芯片的主 /从关系 。 若在小系统中,82C59A则不需要总线缓冲器,而是将其直接连接到数据总线 。 82C59A与这种不需要总线缓冲器而直接连到系统总线的方式称为非缓冲器方式 。
此时,/ 用于表示主/从芯片
SP
SP EN
EN
S
7.2.4工作方式三,屏蔽中断源的方式
普通屏蔽方式利用操作命令字 OCWl,使屏蔽寄存器 IMR中的一位或数位置 1来屏蔽一个或数个中断源的中断请求 。
若要开放某一个中断源的中断请求,则将 IMR中相应的位清 0
特殊屏蔽方式在某些场合,执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式 。 它可通过 OCW3的 D6D5= 11来设定
7.2.4工作方式四,优先级排队的方式
全嵌套方式
特殊全嵌套方式
优先级自动循环方式
优先级特殊循环方式
7.2.4工作方式五,结束中断的处理方式
自动中断结束方式在中断服务程序中,中断返回之前,不需要发出中断结束命令就会自动清除该中断源所对应的 ISR位,实际上,在 CPU发出第 2个信号时,82C59A即自动清除 ISR中的对应位 。 该方式用于多个中断源不会产生嵌套的系统中
INTA
7.2.4工作方式
非自动中断结束方式在中断服务程序返回之前,必须发出中断结束命令才能使 ISR中的当前服务位清除 。 此时的中断源结束命令有两种形式:?
不指定中断源结束命令,即设置操作命令字
OCW2= 00100000B?
指定中断结束命令,即设置 OCW2= 00100L2L1
L0,其中的最低 3位 L2 L1 L0的编码,表示被指定要结束的中断
7.2.5 命令字和初始化编程
82C59A是根据收到 CPU的命令字进行工作的 。
CPU的命令字分两类:一类是初始化命令,称为 初始 化 命 令 字 (Initialization Command Word,
ICW),初始化命令字往往是在系统启动时,由初始化程序设置的 。 初始化命令字一旦设定,一般在系统工作过程中就不再改变 。 另一类是操作命令,称为 操作命令字 (Operation Command Word,
OCW)。 在初始化后,CPU用这些控制字来控制
82C59A执行不同的操作,如中断屏蔽,中断结束,
优先权循环和中断状态的读出和查询等
7.2.5命令字和初始化编程
OCW可在初始化之后的任何时刻写入
82C59A,并可多次设置 CPU对 82C59A写入 命 令 设 置 其 工 作 状 态,或由 CPU 对
82C59A的状态寄存器进行读出,与一般的
I/O设备一样,都是由,A0、,等信号 的 组 合 来 控 制 的,这 实 际 上 形 成 了
82C59A的输入输出端口地址,见表 7-2
CS RD WR
7.2.5命令字和初始化编程表 7-2 82C59A的输入输出端口地址由表可见,CPU用 A0寻址 82C59A的端口共有 2个,1个为偶地址,1个为奇地址
7.2.5命令字和初始化编程一,初始化命令字
82C59A有 4个初始化命令字 ICW1~ ICW4,
用于对 82C59A的初始状态进行设置 。
⒈ 中断请求触发方式的设置及 芯片数量选择的命令字 ( ICW1) ICW1应写入偶地址端口,
即 A0= 1,格式如图 7-11所示
D7,D6和 D5在 8086/ 8088系统中无意义,
可设为 0
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D4= 1,ICW1的标志位
D3 (LTIM),设定中断请求信号的触发方式
D3= 1为电平触发,D3= 0为边沿触发
D2,在 8086/8088系统中无意义,总是为 0
D1,单片使用或级联使用
D1= 1表示单片 82C59A,D1= 0表示多片级联
D0,指出初始化程序中是否需要 ICW4
D0= 1表示需要 ICW4
7.2.5命令字和初始化编程例 【 7-1】 某 8086微机系统中,使用单片
82C59A,中断请求信号为上升沿触发,需要设置 ICW4,端口地址为 20H和 21H,则其初始化命令字 ICW1应为,00010011= 13H,
设置 ICW1的指令为:
MOV AL,13H
OUT 20H,AL
7.2.5命令字和初始化编程
⒉ 设置中断类型码高 5位的初始化命令字 ( ICW2)
82C59A在第 2个中断响应总线周期向 CPU
提供的 8位中断类型码,实际上是由两部分构成,其中,高 5位 T7~ T3是由用户通过编程确定的,这就是初始化命令字 ICW2,类型码的低 3位,由 82C59A内部电路自动产生,分别对应于 8个中断源的中断请求信号 IR0~
IR7 的编号,即 IR0 为 000,IR1 为
001,……,IR7为 111
7.2.5命令字和初始化编程
ICW2应写入奇地址端口,即 Al= 1,格式如图 7-12所示
7.2.5命令字和初始化编程
⒊ 标识主片/从片初始化命令字 ( ICW3)
只有当系统中有多片 82C59A级联时才需要设置 ICW3,单片 82C59A时不用设置
ICW3。 当多片 82C59A级联时,ICW3用来指出主片上连接从片以及从片连接到主片的情况,所以,ICW3有两种格式,如图 7-13
和 7-14所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒋ 方式控制初始化命令字 ( ICW4)
当 ICW1中的 D0= 1时,初始化 82C59A时需要写入 ICW4。 ICW4写入奇地址端口,其格式如图 7-15所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D7~ D5,ICW4的标志位,这 3位为 0
D4 (SFNM),SFNM= 1,表示当前 82C59A工作于特殊全嵌套方式; SFNM=0,表示当前 82C59A
工作于普通全嵌套方式
D3 (BUF),设置 82C59A与系统的连接方式 。 D3
=1,表示采用缓冲方式,82C59A通过总线驱动器与数据总线相连,/ 为输出,意识为,作为数据总线驱动器的工作使能信号 。 D3= 0,表示
82C59A工作在非缓冲方式,即数据总线不带缓冲器,此时 / 为输入,意识为,= 0,该片为从片,= 1,该片为主片,此时 M/ 位不起作用
SP EN
S
EN
SP EN SP SP
SP
7.2.5命令字和初始化编程
D2 (M/ ),级联方式设置 。 在缓冲方式 (BUF= 1)
下,用来表示本片是主片还是从片 。 当 M/ =1时,
表示该片为主片; M/ = 0时,表示该片为从片 。
当 BUF= 0时,M/ 位不起作用,可为 0或 1。 显然,
BUF和 M/ 位要配合使用
D1 (AEOI),中断结束方式设置位 。 当 AEOI= l,
82C59A设置为中断自动结束方式 。 在自动结束方式下,当第 2个中断响应负脉冲 结束时,将中断服务寄存器的相应位清零
D0(?PM),(?PM= 1,表示当前 82C59A用于 8位机以上的系统; (?PM= 0,表示当前所在系统为 8
位机系统
S
S
S
S
S
INTA
7.2.5命令字和初始化编程二,82C59A初始化编程逻辑
82C59A进入正常工作之前,系统必须对每个 82C59A进行初始化设置
初始化是通过编程将初始化命令字按顺序写入 82C59A的端口实现的,82C59A的初始化流程如图 7-16所示
7.2.5命令字和初始化编程例 【 7-2】 某 8086 微机系统中有一片
82C59A,中断请求信号为电平触发,中断类型码为 40H~ 47H,中断优先级管理采用普通全嵌套方式,中断结束方式采用自动结束方式,系统中未使用数据缓冲器,系统分配给 82C59A的端口地址为 20H和 21H,试对该 82C59A进行初始化编程
7.2.5命令字和初始化编程分析,由于系统中使用单片 82C59A,所以初始化时不需要 ICW3,本例中 82C59A要求工作在非缓冲方式,故在硬件上将 SP*/EN*接 +5V,ICW4中的 M/ S*位无意义,可设置为 0
对 82C59A的初始化程序如下:
MOV AL,00011011B ;设置 ICW1初始化命令字
OUT 20H,AL ;将 ICW1输出到偶地址端口
MOV AL,01000000B ; ICW2中断类型号基值
OUT 21H,AL ;将 ICW2送入奇地址端口
MOV AL,00000011B ; ICW4
OUT 21H,AL ;将 ICW4送入奇地址瑞口
7.2.5命令字和初始化编程三,操作命令字 OCW
⒈ 中断屏蔽操作命令字 OCWl
OCWl用来实现对中断源的屏蔽功能,
OCWl的内容被直接置入 IMR屏蔽寄存器,
其格式如图 7-17所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒉ 优先级循环方式和中断结束方式操作命令字 OCW2
OCW2有两个功能:设置中断结束方式和优先级循环方式,要求写入偶地址端口,其格式如图 7-18所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
D7,用于规定中断优先级是否设置为循环方式
D7= 1,为优先权循环方式; D7= 0,为非循环方式
D6:用于规定 OCW2中的 L2 L1 L0是否有效
D6= l,表示 D2~ D0有效; D6= 0,表示无效
D5 (EOI),中断结束命令位 。 D5= 1,使中断服务寄存器中的对应位复位 。 如前所述,如果 ICW4
中 D1(AEOI)位为 l,表示中断采用自动结束方式 。
在中断自动结束方式下,当 CPU第 2个负脉冲结束时,中断服务寄存器 ISR中相应位会自动清除
7.2.5命令字和初始化编程但如果 AEOI为 0,则 ISRi位就要用 EOI命令来消除 。 EOI命令是通过 OCW2中的 D5位设置的
D4,D3,D4 D3= 00,OCW2的标志位
D2~ D0( L2 L1 L0),有两个用途:当
OCW2给出特殊的中断结束命令时 (即 EOI=1,
SL=1,R=0),L2,L1和 L0指出具体应清除中断服务寄存器中的哪一位
7.2.5命令字和初始化编程当 OCW2给出特殊的优先级循环方式命令时 (即 EOI= 0,SL= 1,R= 1),L2,L1和 L0
指出循环开始时哪个中断的优先级最低表 7-3 归纳了对 D7 ~ D5 位在各种编码下
OCW1完成的功能
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
⒊ 特殊屏蔽方式和中断查询方式操作命令
OCW3
有 3个功能:
设置和撤消特殊屏蔽方式
设置中断查询方式
设置读出 ISR或 IRR寄存器的内容格式如图 7-19所示
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
用 OCW3设置和撤消特殊屏蔽方式特殊屏蔽方式是 82C59A为了响应低级中断而提供的一种功能 。 为了中断当前的中断服务程序转去响应低级中断,CPU要先向 82C59A发出一个特殊屏蔽字,使 82C59A进入特殊屏蔽状态;当低级中断处理完毕返回被中断的高级中断服务程序的断点时,要发出撤消特殊屏蔽字,以恢复原来的嵌套顺序 。 设置和撤消特殊屏蔽字由 OCW3中的 D6,D5
位来实现
7.2.5命令字和初始化编程
ESMM称为特殊屏蔽允许位,SMM称为特殊屏蔽方式位,这两位的组合决定是设置特殊屏蔽还是撤销屏蔽?
当 ESMM,SMM= 11时,将 82C59A设置为特殊屏蔽方式,即只屏蔽本级中断请求,允许高级的或低级的中断申请进入?
当 ESMM,SMM= 10时,撤消特殊屏蔽方式,恢复原来的优先级控制?
当 ESMM= 0时,不能建立特殊屏蔽方式,SMM位也不起作用设 D2,D1,D0这 3位均为 0,则设置的特殊屏蔽方式字
OCW3=68H,撤消特殊屏蔽方式字 OCW3= 48H
7.2.5命令字和初始化编程
OCW3的中断查询功能
OCW3的 D3位即 P位为中断查询方式位 。
当 P=1时,使 82C59A处于中断查询方式,
即 CPU向 82C59A偶地址端口写入一个查询命令 OCW3= 0CH后,再执行输入指令 (IN),
CPU便可读入 82C59A提供的查询字 。 查询字反映了当前有无中断请求,以及中断请求中优先级最高的是哪一个 。 82C59A的查询字格式如图 7-20
7.2.5命令字和初始化编程
7.2.5命令字和初始化编程
OCW3的读操作功能
82C59A内部有 3个寄存器 (IRR,IMR、
ISR)可供 CPU读出其当前的状态,CPU在发读命令之前,须先指定读取哪个寄存器,然后再发 IN指令,才能读取 IRR和 ISR中的内容 。 当所读的寄存器不变,就不必每次都指定所要读取的寄存器 。 在 82C59A初始化后,
自动指向读 IRR
7.2.5命令字和初始化编程
OCW3中的 D1,Do两位用来指定具体读
ISR和 IRR中的哪一个寄存器?
当 RR,RIS= 11时,表示 CPU的下一条
IN指令要读取 ISR寄存器的内容?
当 RR,RIS=10时,表示 CPU的下一条 IN
指令要读 IRR寄存器的内容对 IMR寄存器的读出,不需要事先发出指定命令,直接通过读奇地址端口就可以读到
IMR寄存器的内容