第 7 章 中断及中断控制器

108
第 7 第 第第第第第第第第 7.1 第第 7.2 第第第第 第第第第 82C5 9A

description

第 7 章 中断及中断控制器. 7.1 概述 7.2 可编程中断控制器 82C59A. 教学目的和要求. 掌握有关中断和中断源、中断处理过程、中断优先级和中断嵌套等基本知识 掌握可编程中断控制器 82C59A 外部特性及其与 CPU 的连接方式 掌握 82C59A 的初始化编程 掌握 8086/8088 可屏蔽中断的全过程 了解 82C59A 的结构及级联方式的运用等. 中断及中断控制器. 重点 中断及中断处理过程 82C59A 的初始化编程 8086/8088 可屏蔽中断的全过程 难点 8086/8088 的中断系统 中断优先权的控制机理. - PowerPoint PPT Presentation

Transcript of 第 7 章 中断及中断控制器

Page 1: 第 7 章 中断及中断控制器

第 7 章 中断及中断控制器

7.1 概述 7.2 可编程中断控制器82C59A

Page 2: 第 7 章 中断及中断控制器

掌握有关中断和中断源、中断处理过程、中断优先级和中断嵌套等基本知识

掌握可编程中断控制器 82C59A 外部特性及其与 CPU 的连接方式

掌握 82C59A 的初始化编程 掌握 8086/8088 可屏蔽中断的全过程 了解 82C59A 的结构及级联方式的运用等

教学目的和要求

Page 3: 第 7 章 中断及中断控制器

中断及中断控制器

重点 中断及中断处理过程 82C59A 的初始化编程 8086/8088 可屏蔽中断的全过程难点 8086/8088 的中断系统 中断优先权的控制机理

Page 4: 第 7 章 中断及中断控制器

7.1 概述

7.1.1 中断、中断源及中断系统一、中断、中断源 所谓“中断”是指在 CPU 正常运行程序时,由于内、外部事件引起 CPU 暂时中止正在运行的程序,转而去执行请求 CPU 暂时中止的内、外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序。

能够向 CPU 发出中断请求的中断来源称为“中断源”。

Page 5: 第 7 章 中断及中断控制器

常见的中断源

一般的输入/输出设备,如打印机、 RS232C串行通信设备等

数据通道,如磁带、磁盘等 实时时钟,如定时器芯片 82C54 等的定时输出作为定时中断请求信号

故障信号,如电源掉电等 软件中断,如为调试程序而设置的单步中断

Page 6: 第 7 章 中断及中断控制器

广义中断

在 80286 以后的处理器中均将广义中断分为中断和异常两大类:由外部事件引起的中断称为外部中断,由内部事件引起的中断称为内部异常。

Page 7: 第 7 章 中断及中断控制器

二、中断系统的功能

为满足中断要求,中断系统应具有的功能可归结为中断处理和中断控制:

中断处理 包括发现中断请求、响应中断请求、中断处理与中断返回。

中断控制 主要是实现中断优先级的排队和中断嵌套。

Page 8: 第 7 章 中断及中断控制器

三、中断的主要用途

在微机系统中,中断的主要用途是: 实现输入/输出操作 电源掉电或其他情况的报警 控制台或人工干预 多处理机系统中各处理机之间的协调 控制操作系统

Page 9: 第 7 章 中断及中断控制器

四、可屏蔽中断与不可屏蔽中断

根据微处理器内部受理中断请求的情况,中断可分为可屏蔽中断与不可屏蔽中断两种:

凡是微处理器内部能够“屏蔽”的中断,称为可屏蔽中断。

凡是微处理器内部不能“屏蔽”的中断,称为不可屏蔽中断。

所谓“屏蔽”是指微处理器拒绝响应中断请求信号,不允许中断微处理器所执行的主程序。这通常是由内部的中断触发器 (或中断允许触发器 )来控制的。

Page 10: 第 7 章 中断及中断控制器

7.1.2 中断处理过程

微机系统中断处理过程的流程图如图 7-1 所示:

Page 11: 第 7 章 中断及中断控制器

一、 CPU 响应中断的条件

1. 设置中断请求触发器 每个中断源向 CPU 发出中断请求信号是随机的,而大多数 CPU 都是在现行周期结束时,才检测有无中断请求发出,故在现行指令执行期间,必须把随机输入的中断请求信号锁存起来,并保持到 CPU 响应这个中断请求后才可以清除中断请求。因此,要求每一个中断源有一个中断请求触发器,如图 7-2 中所示:

Page 12: 第 7 章 中断及中断控制器
Page 13: 第 7 章 中断及中断控制器

2. 设置中断屏蔽触发器

在存在多个中断源的情况下,为增加控制的灵活性,常要求在每一个外设的接口电路中,设置一个中断屏蔽触发器,只有当此触发器为“ 1”时,外设的中断请求才能被送到 CPU ,如图 7-2 中所示 , 可把 8 个外设的中断屏蔽触发器组成一个中断屏蔽寄存器端口,用输出指令来控制它们的状态。

Page 14: 第 7 章 中断及中断控制器

3.CPU 内部设置中断允许触发器的状态

在CPU内部有一个中断允许触发器,只有当其为“l”时,CPU才能响应中断;若其为“ 0”时,即使中断请求线上有中断请求,CPU也不响应。

可用允许中断和禁止中断指令来设置中断允许触发器的状态。

当CPU复位时,中断允许触发器也复位为“0”,即关中断。当中断响应后, CPU就自动关闭中断,以禁止接受另一个新的中断,因而通常在中断服务程序结束之前,必须要执行两条指令,即允许中断指令和中断返回指令。

Page 15: 第 7 章 中断及中断控制器

4.CPU 在现行指令结束后响应中断

在满足上面三个条件的情况下, CPU 在执行现行指令的最后一个机器周期 (总线周期 )的最后一个时钟周期 (T状态 ) 时,才测试中断输入线 INTR( 或 NMI) ,若发现中断请求有效,则把内部的中断锁存器置“ 1” ,下一总线周期进入中断响应周期。

Page 16: 第 7 章 中断及中断控制器

二、 CPU 对中断的响应过程

进入中断周期后,中断响应的过程如下:⒈ 关中断 CPU 在响应中断后,发出中断响应信号 ,同时内部自动地关中断,以禁止接受其他的中断请求。 ⒉ 保护断点 把断点处的标志寄存器 F的内容、段寄存器 CS值和指令指针 IP值依次压入堆栈保存 ,以便中断处理完后能正确地返回到主程序的断点地址,接着执行被中断的程序。

INTA

Page 17: 第 7 章 中断及中断控制器

CPU 对中断的响应过程

⒊ 识别中断源

CPU 要对中断请求进行处理,必须要找到相应中断服务程序 ( 处理中断的程序 ) 的入口地址,这就是中断源的识别 。

Page 18: 第 7 章 中断及中断控制器

识别中断源有两种方法 -1

查询中断 当外设没有提出中断请求时, CPU照常执行主程序,只有在接收到外设的中断请求后 CPU 才去查询,以识别提出中断请求的设备,主要采用软件查询。软件查询是用程序查询的方法,查询中断请求寄存器的当前值,查询程序依次查询每一个外设的中断状态位,通过测试该状态位来判断对应的外设是否发出过中断请求,如果有,则转到相应的中断服务程序。

Page 19: 第 7 章 中断及中断控制器

识别中断源有两种方法 -2

向量中断 (Vectored Interrupt) 又称矢量中断,在具有向量中断的微机系统中,每个外设都预先指定一个中断向量,当 CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断向量送入 CPU ,以自动地提供相应的中断服务程序的入口地址,转入中断服务。用向量中断来确定中断源主要是用硬件来实现的,通常在微机系统中采用可编程中断控制器来提供中断向量。

Page 20: 第 7 章 中断及中断控制器

CPU 对中断的响应过程

⒋ 保护现场 为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器 (指在中断服务程序中要使用的寄存器)内容压入堆栈保护。 ⒌ 执行中断服务程序 ⒍ 恢复现场 即把中断服务程序压入堆栈的现场信息从堆栈中弹出来,并存入到原寄存器中,这是在中断服务程序中用 POP 指令来实现的。

Page 21: 第 7 章 中断及中断控制器

CPU 对中断的响应过程

⒎ 开中断与返回 开放中断在返回之前,目的是返回主程序后能继续响应新的中断请求。从中断返回到断点处,有一条专门的中断返回指令,该指令的隐操作是将堆栈栈顶处连续的三个字依次弹出给指令指针 IP 、 段寄存器 CS 以及标志寄存器 F。

Page 22: 第 7 章 中断及中断控制器

7.1.3 8086/8088 的中断系统

8086 / 8088 有一个简单而灵活的中断系统,每个中断都有一个中断类型码 (Type Code) ,以供 CPU进行识别, 8086 / 8088最多能处理 256种不同的中断类型。中断可以由 CPU 以外的硬件设备驱动,也可由软件中断指令启动。在某些情况下,也可由 CPU自身启动, 8086 / 8088 的中断源如图 7-3 所示。从图可见 8086 / 8088 的中断源可分为两类,即外部中断和内部中断。

Page 23: 第 7 章 中断及中断控制器

8086/8088 的中断系统

Page 24: 第 7 章 中断及中断控制器

一、外部中断

8086/ 8088有两条中断信号线—INTR和 NMI,可供外设向CPU发中断请求信号。

可屏蔽中断 INTR 可屏蔽中断请求线 INTR 通常由中断控制器 82C59A驱动,该控制器又同需要中断服务的外部设备相连。 CPU通过向 82C59A写命令字来控制 82C59A 的工作, 82C59A 负责管理多个外设以中断方式与CPU交换数据,例如,82C59A接收与其相连接的外部设备送来的中断请求,并判断提出中断请求的哪一个外部设备的优先级最高,如果被选中设备的优先级比现行正接受服务的设备 ( 如果有的话 )的优先级高,就启动 8086/ 8088的 INTR线

Page 25: 第 7 章 中断及中断控制器

可屏蔽中断 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所控制的中断申请输入设备

Page 26: 第 7 章 中断及中断控制器

可屏蔽中断 INTR

CPU对 INTR 中断请求的响应过程是执行两个 ( 中断响应 )总线周期,如图7-4 所示。如果在中断响应周期内出现一个总线保持请求 (HOLD—最小方式,或 RQ/GT—最大方式 ) ,那么在两个中断响应周期结束以前不会接受这个请求。在 8086 / 8088 的最大方式下,在这两个中断响应周期内输出 信号,以通知其他处理器不能再试图控制总线

INTA

LOCK

Page 27: 第 7 章 中断及中断控制器

可屏蔽中断 INTR

在第一个中断响应周期内 信号通知 82C59A ,中断请求已被接受;在第二个中断响应周期内 信号有效时, 82C59A 必须把请求服务的那个设备的中断类型码 (0~ 255) 送到数据总线,该中断类型码是 82C59A 的初始化过程中由 8086 / 8088 写入的。 CPU 读入该中断类型码后,由此调用相应的中断服务程序 。

INTA

INTA

Page 28: 第 7 章 中断及中断控制器

可屏蔽中断 INTR

Page 29: 第 7 章 中断及中断控制器

不可屏蔽中断 NMI

⒉ 不可屏蔽中断 NMI 不可屏蔽中断请求信号 NMI用来通知 CPU 发生了“灾难性”的事件,如电源掉电、存储器读写出错、总线奇偶位出错等。 NMI线上中断请求是不可屏蔽的( 即无法禁止的 ) ,而且立即被 CPU 锁存,因此 NMI是边沿触发的,不需要电平触发。 NMI的优先级比 INTR高。由于不可屏蔽中断的类型号预定为 2,在 CPU 响应 NMI时,不必由中断源提供中断类型码,因此,NMI响应也不需要执行中断响应总线周期。

Page 30: 第 7 章 中断及中断控制器

不可屏蔽中断 NMI

CPU识别一个外部中断请求所需的时间称为“中断等待时间”,这取决于执行完现行指令还需要多少个时钟周期。一般而言,在执行乘法、除法、移位或循环指令时,如果接到外部中断请求,其等待时间最长。

Page 31: 第 7 章 中断及中断控制器

二、内部中断

内部中断是通过软件调用的不可屏蔽中断,包括溢出中断、除法出错中断、单步中断、 INT n指令中断以及单字节 INT 3 指令中断。⒈ 溢出中断 如果上一条指令使溢出标志 OF置“ 1” ,那么在执行溢出中断指令 (INTO) 时,立即产生一个 4型中断 (中断类型码为 4) 。

Page 32: 第 7 章 中断及中断控制器

内部中断

⒉ 除法出错中断 在执行除法指令 DIV或 IDIV后,如果商大于规定的目标操作数 ( 即目标寄存器所能表达的范围 ) ,则 CPU立即产生一个 0型中断。 ⒊ INT n 指令中断 8086 / 8088 的指令系统中有一条 INT指令,当执行完这条指令就立即产生中断。 CPU 根据该指令中的中断类型码 n,确定调用哪个服务程序来处理这个中断。

Page 33: 第 7 章 中断及中断控制器

内部中断

⒋ 断点中断 (Breakpoint Interrupt) 断点中断即单字节 INT 3 指令中断,中断类型码为 3 ,该中断是专供调试程序设置断点所使用的,断点一般可以处于程序中任何位置。在断点处,停止当前程序的执行, CPU按中断类型码为 3 来响应中断。通常,在调试时把断点插入程序中的关键之处,以便检查并显示当前寄存器以及存储单元的内容,便于调试程序。

Page 34: 第 7 章 中断及中断控制器

内部中断

⒌ 单步 (陷阱 )中断 当陷阱标志 TF置“ 1”时, 8086 / 8088 处于单步工作方式。在单步工作时,每执行完一条指令, CPU就自动产生一个类型号为 1 的中断,作为中断处理过程的一部分, CPU 将自动地把标志寄存器和断点值( CS : IP)压入堆栈,然后清除 TF和 IF, CPU进入单步中断处理过程,它就不会以单步工作方式来执行程序,而以正常的方式执行单步处理的中断服务程序。当单步中断过程结束时,从堆栈中弹出原来的断点值( CS: IP)及标志寄存器 F的内容,使CPU返回单步方式 。

Page 35: 第 7 章 中断及中断控制器

内部中断

单步方式是一种有用的调试工具,它使单步过程成为能逐条指令地观察系统操作的一个“窗口”。例如,单步中断过程可以在每执行一条指令后打印或显示寄存器内容、指令指针的值,以及关键的存储器变量等。这样就能详细地跟踪一个程序的具体执行过程,确定问题的所在。

Page 36: 第 7 章 中断及中断控制器

内部中断

上述所有内部中断的特点: • 中断类型码或者包含在指令中,或者是预先规定的。

• 不执行响应外部中断的中断响应周期。 • 除单步中断外,任何内部中断都无法禁止。 • 除单步中断外,任何内部中断的优先级都比任何外部中断的优先级高。

Page 37: 第 7 章 中断及中断控制器

中断优先级

8086 / 8088 的中断优先级见下表

中断 优先级 除法出错, INT n, INTO 最高

NMI …

INTR …

单步 最低

Page 38: 第 7 章 中断及中断控制器

三、中断向量表

中断向量表又称中断指针表,是存放中断服务程序入口地址 ( 即“中断向量” )的表格。它存放在存储器的最低端( 0000H: 0000H ~ 0000H: 03FFH ),共 1024个字节,每 4个字节存放一个中断服务程序的入口地址,一共可以存放 256 个中断服务程序的入口地址。较高地址的两个字节存放中断服务程序入口的段基值;较低地址的两个字节存放入口地址的段内偏移量。这 4个单元的最低地址称为向量地址,其值为对应的中断类型码乘以4。 8086/ 8088中断向量表的结构如图7-5所示 。

Page 39: 第 7 章 中断及中断控制器

中断向量表

由图可见, 8086 / 8088 的中断向量表由三部分组成:专用的有 5个 (0# ~ 4#) ,保留的有 27个 (5# ~ 31#) ,可供用户定义的有 224个(32# ~ 255#) 。“专用的”是指 8086 / 8088 系统中统一规定并使用的中断类型。

“ 保留的”是指为系统开发所

保留的中断类型。

Page 40: 第 7 章 中断及中断控制器

中断向量表

8086/8088 在响应中断以后,先将标志寄存器压入堆栈,然后将执行一个与段间间接调用 (CALL) 指令相当的过程来启动一个中断过程,该过程中, CPU将 CS和 IP压入堆栈,以保存断点的地址,然后将中断向量表中相应的4个字节内容弹出并赋给IP和 CS,于是CPU开始执行中断服务程序。

如果 n个中断请求同时到达,则 CPU 将按优先级顺序来调用中断过程。

Page 41: 第 7 章 中断及中断控制器

四、中断过程

8086 / 8088对一个中断过程的基本响应过程见图7-6 。当进入中断过程时, CPU 把标志寄存器、 CS和IP压入堆栈,并清除 TF和 IF。在中断过程中,可以用 STI指令重新开放外部中断,使 INTR 线上的中断请求能中断这个中断过程。注意,在 STI之后的那条指令执行完以后才会真正开放中断。 NMI线上的中断请求则始终能够中断该过程。必须注意的是,一个中断处理过程中不能再发生需要该过程正为之服务的中断。

Page 42: 第 7 章 中断及中断控制器

中断过程

所有的中断过程都应该以 IRET指令结尾, IRET指令总是认为堆栈仍处于进入该过程时的状态。该指令将栈顶的三个字分别弹出到 IP 、CS 和标志寄存器中,这样就回到了中断过程开始前将要执行的那条指令上去

Page 43: 第 7 章 中断及中断控制器

7.2 可编程中断控制器 82C59A

Inter 82C59A 是一种可编程中断控制器,一个 82C59A 可以管理 8 级中断,每一级中断都可以屏蔽或允许。 82C59A 在中断响应周期可提供相应的中断类型号,从而迅速转至中断服务程序。 82C59A 设计有多种工作方式,可以通过编程来选择,以适应不同的应用场合。

Page 44: 第 7 章 中断及中断控制器

可编程中断控制器 82C59A

可编程中断控制器82C59A具有以下特点:• 与所有 Intel系列微处理机兼容 • 在 12.5MHz 80C286 和 8MHz 80C86/88 下“无等待状态”高速工作

• 管脚与 NMOS82C59A兼容 • 8级中断,通过级连可扩展至 64级 • 可编程中断模式 • 单5V供电电压

Page 45: 第 7 章 中断及中断控制器

可编程中断控制器 82C59A

• 低功耗的 CHMOS • 工作温度范围: C82C59A 0C to +70C I82C59A -40C to +85C M82C59A -55C to +125C

Page 46: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

82C59A 的内部结构如图 7-7 所示,主要有 8个基本组成部分:

一、数据总线缓冲器 8位的双向三态缓冲器,一般与 CPU 数据总线 D7~ D0直接连接,完成命令、状态信息的传送,中断类型号也是由数据缓冲器送到 CPU 。

Page 47: 第 7 章 中断及中断控制器
Page 48: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

二、读写控制逻辑

该部件接收来自 CPU 的读写命令,完成规定的操作。操作过程由 、 Ao、 、 等输入信号共同控制。在 CPU写 82C59A 时,把写入数据送至相应的命令寄存器中 ( 包括初始化命令字和操作命令字 ) 。在 CPU读 82C59A 时,控制相应寄存器的内容输出到数据总线上。

CS WR RD

Page 49: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

三、中断请求寄存器 IRR IRR(Interrupt Request Register) 是与外部接口的中断请求线相连的寄存器,请求中断处理的外设通过 IR0~ IR7 向 82C59A请求中断服务,并把中断请求信号锁存在中断请求寄存器中。

Page 50: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

四、中断屏蔽寄存器 IMR IMR(Interrupt Mask Register) 是—个8位寄存器,用来设置中断请求的屏蔽信息。当 IMR 中第 i位被屏蔽时 ( 即 IMRi= 1) ,禁止 IRi引脚发出的中断请求信号,使之不可能通过 82C59A 向 CPU申请中断。

Page 51: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

五、中断服务寄存器 ISR

ISR(Interrupt Service Register) 用于存放当前正在进行处理的中断源。 ISR 的置位是在第一个 脉冲期间,由优先权电路 (PR) 根据IRR 中各申请中断位的优先级别和 IMR 中屏蔽字的状态,选取允许中断的最高优先级请求位,选通到 ISR 中。当中断处理完毕, ISR 的复位由中断结束方式决定 。

INTA

Page 52: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构 六、优先权电路 优先权电路 (Priority PR) 负责检查中断源的中断请求

的优先级,并与“正在服务中的中断”进行比较,确定是否将这个中断请求送给处理器。假定中断源的中断比正在服务中的中断具有更高的优先权,则 PR 就使 INT 线变为高电平,送给 CPU ,为它提出申请,并在中断响应时将它记入 ISR 的对应位中。如果中断源的中断优先级等于或低于正在服务中的中断优先级,则 PR 不为其提出申请。

PR 相当于一个优先级编码器和一个比较器电路,可实现中断判断,如图 7-8 所示:

Page 53: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构

Page 54: 第 7 章 中断及中断控制器

7.2.1 82C59A 内部结构七、控制逻辑 控制逻辑按初始化设置的工作方式控制 82C59A

的全部工作。该电路可根据 IRR 的内容和 PR 判断结果向 CPU 发中断请求信号 INT ,并接受 CPU 发回的中断响应信号 ,使 82C59A 进入中断服务状态。

八、级联缓冲比较器

级联缓冲比较器用于实现多个 82C59A 之间的级联,使得中断源由 8 个扩展至 64 个。

INTA

Page 55: 第 7 章 中断及中断控制器

7.2.2 中断处理过程 下面以 82C59A 单片使用为例,说明可屏蔽中断处理

的过程: 当一条或多条中断请求线 IR0 ~ IR7 变高时,设置相

应的 IRR 位; PR 对中断优先权和中断屏蔽寄存器的状态进行判断

之后,如果某中断优先权最高且为允许中断状态,就向 CPU 发高电平中断申请信号 INT ,请求中断服务;

CPU 响应中断时,送出中断响应信号;

INTA

Page 56: 第 7 章 中断及中断控制器

中断处理过程

82C59A 接到来自 CPU 的第一个 信号时,当前中断服务寄存器 (ISR) 中相应位置位,并把 IRR 中相应位复位。同时, 82C59A 准备向数据总线发送中断类型码;

在 82C59A 发送中断类型码的最后—个 负脉冲期间,如果是在 AEOI( 自动结束中断 ) 方式下,在这个 负脉冲结束时复位 ISR 的相应位。在非自动中断结束方式下, ISR 相应位要由中断服务程序结束时发出的 EOI命令来复位 。

INTA

INTA

INTA

Page 57: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

82C59A 是一个 28引脚的双列直插芯片,其引脚如图 7-9 所示:

Page 58: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

一、与 CPU 的接口信号主要包括: D0 ~ D7 ,三态, 8 位双向数据线, CPU 与 8

2C59A 之间利用这个数据总线传送数据及命令

,写控制输入信号 ,读控制输入信号 A0 ,地址选择信号,用来对 82C59A 内部的 2

个可编程寄存器进行选择

WR

RD

Page 59: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

,片选输入信号,低电平有效 INT ,由 82C59A 向 CPU输出的中断请求信

号 ,输入信号,接收 CPU 送来的中断响应

信号 二、与外部设备的接口信号 IR0 ~ IR7共有 8 个中断请求输入信号,高电

平或上升沿有效 ( 由编程规定 ) ,用于接收外设接口的中断请求。

CS

INTA

Page 60: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

三、级联时的接口信号

级联时的接口信号包括 CAS0 ~ CAS2 , 82C59A 级联时使用,用来构成 82C59A 的主从式级联控制结构,见图 7-10 :

Page 61: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

Page 62: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

主从结构中,主从片 82C59A 的 CAS0 ~ CAS2 全部对应相连。当 82C59A 作为主片时, CAS0 ~ CAS2 为输出信号,用于发送从片的标识代码;当 82C59A 作为从片时, CAS0 ~ CAS2 为输入信号,用于接收本从片的标识代码。编程时设定的从片标识代码保存在级联缓冲器内。在中断响应时,主 82C59A 把当前申请中断( IRi)的编码从 CAS0 ~CAS2上输出出去,从 82C59A 把这个标识代码与自己级联缓冲器内的标识码做比较。当信号到达时,只有当被选中的从片才把中断类型码送至数据总线。当 82C59A 单片使用时,不使用这些引脚 。

Page 63: 第 7 章 中断及中断控制器

7.2.3 82C59A引脚信号

/ ,从片编程缓冲器使能信号。该信号有两种功能:当工作在缓冲方式时,它是输出信号,用作数据总线缓冲器的使能信号 (EN) ,即用它来控制数据收发器的工作;当 82C59A 工作在非缓冲方式时,它是输入信号,用来指明该 82C59A 是主片 ( / = 1 时 )还是从片 ( / = 0 时 ) 。

SP EN

SPSP

EN

EN

Page 64: 第 7 章 中断及中断控制器

7.2.4 工作方式

82C59A 有多种工作方式,这些工作方式可以通过初始化命令字( ICW1 ~ ICW4)和操作命令字 (OCW0 ~ OCW4) 来设置。

一、引入中断请求的方式 边沿触发方式 以上升沿向 82C59A 请求中断,上升沿后可一直维持高电平,不会再产生中断。

Page 65: 第 7 章 中断及中断控制器

7.2.4 工作方式

电平触发方式 以高电平申请中断,但在响应中断后必须及

时清除高电平,以免引起第 2次误中断。 中断查询方式 外部设备通过 82C59A 申请中断,但 82C5

9A却不使用 INT 信号向 CPU 申请中断, CPU 用软件查询确定中断源,并为其服务。

Page 66: 第 7 章 中断及中断控制器

7.2.4 工作方式二、连接系统总线的方式 在大系统中,要求数据总线有总线缓冲器。 82C59A 与

这种带总线缓冲器的系统总线连接的方式称为缓冲器方式。此时的 / 用于启动缓冲器工作,不能用作表示主/从关系,故需要在 ICW4 中设置 M/ 位来表示级联中 82

C59A芯片的主 /从关系。若在小系统中, 82C59A 则不需要总线缓冲器,而是将其直接连接到数据总线。 82C5

9A 与这种不需要总线缓冲器而直接连到系统总线的方式称为非缓冲器方式。此时, / 用于表示主/从芯片。

SP

SP EN

EN

S

Page 67: 第 7 章 中断及中断控制器

7.2.4 工作方式三、 屏蔽中断源的方式 普通屏蔽方式 利用操作命令字 OCWl,使屏蔽寄存器 IMR 中的一位或数

位置 1 来屏蔽一个或数个中断源的中断请求。若要开放某一个中断源的中断请求,则将 IMR 中相应的位清 0 。

特殊屏蔽方式 在某些场合,执行某一个中断服务程序时,要求允许另一

个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式。它可通过 OCW3 的 D6D5= 11 来设定。

Page 68: 第 7 章 中断及中断控制器

7.2.4 工作方式

四、优先级排队的方式 全嵌套方式 特殊全嵌套方式 优先级自动循环方式 优先级特殊循环方式

Page 69: 第 7 章 中断及中断控制器

7.2.4 工作方式

五、结束中断的处理方式 自动中断结束方式 在中断服务程序中,中断返回之前,不需要发

出中断结束命令就会自动清除该中断源所对应的 ISR 位,实际上,在 CPU 发出第 2 个

信号时, 82C59A即自动清除 ISR 中的对应位。该方式用于多个中断源不会产生嵌套的系统中。

INTA

Page 70: 第 7 章 中断及中断控制器

7.2.4 工作方式

非自动中断结束方式 在中断服务程序返回之前,必须发出中断结

束命令才能使 ISR 中的当前服务位清除。此时的中断源结束命令有两种形式:• 不指定中断源结束命令,即设置操作命令字 OCW2= 00100000B • 指定中断结束命令,即设置 OCW2= 00100L2L1 L0 ,其中的最低 3 位 L2 L1 L0 的编码,表示被指定要结束的中断

Page 71: 第 7 章 中断及中断控制器

7.2.5 命令字和初始化编程 82C59A 是根据收到 CPU 的命令字进行工作的。 C

PU 的命令字分两类:一类是初始化命令,称为初始化命令字 (Initialization Command Word, ICW) , 初始化命令字往往是在系统启动时,由初始化程序设置的。初始化命令字一旦设定,一般在系统工作过程中就不再改变。另一类是操作命令,称为操作命令字 (Operation Command Word, OCW) 。在初始化后, CPU 用这些控制字来控制 82C59A执行不同的操作,如中断屏蔽、中断结束、优先权循环和中断状态的读出和查询等。

Page 72: 第 7 章 中断及中断控制器

7.2.5 命令字和初始化编程

OCW可在初始化之后的任何时刻写入 82C59A ,并可多次设置 CPU 对 82C59A 写入命令设置其工作状态,或由 CPU 对 82C59A的状态寄存器进行读出,与一般的 I/O 设备一样,都是由 、 A0 、 、 等信号的组合来控制的,这实际上形成了 82C59A 的输入输出端口地址,见表 7-2 :

CS RD WR

Page 73: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

表 7-2 82C59A 的输入输出端口地址 由表可见, CPU 用 A0寻址 82C59A 的端口共有 2 个:1 个为偶地址, 1 个为奇地址。

Page 74: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

一、初始化命令字

82C59A 有 4 个初始化命令字 ICW1 ~ ICW4 ,用于对 82C59A 的初始状态进行设置。

⒈ 中断请求触发方式的设置及芯片数量选择的命令字( ICW1), ICW1 应写入偶地址端口,即 A0= 0 ,格式如图 7-11 所示

D7 、 D6 和 D5 在 8086/ 8088 系统中无意义,可设为 0

Page 75: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 76: 第 7 章 中断及中断控制器

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

Page 77: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

例【 7-1】某 8086微机系统中,使用单片 82C59A ,中断请求信号为上升沿触发,需要设置 ICW4 ,端口地址为 20H 和 21H ,则其初始化命令字 ICW1 应为: 00010011= 13H ,设置 ICW1 的指令为:

MOV AL, 13H OUT 20H , AL

Page 78: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

⒉ 设置中断类型码高 5 位的初始化命令字( ICW2)

82C59A 在第 2 个中断响应总线周期向 CPU提供的 8 位中断类型码,实际上是由两部分构成,其中,高 5 位 T7 ~ T3 是由用户通过编程确定的,这就是初始化命令字 ICW2 ,类型码的低 3 位,由 82C59A 内部电路自动产生,分别对应于 8 个中断源的中断请求信号 IR0 ~ IR7 的编号,即 IR0 为 000 , IR1 为 001 ,…… , IR7 为 111 。

Page 79: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

ICW2 应写入奇地址端口,即 Al= 1 ,格式如图 7-12 所示 :

Page 80: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

⒊ 标识主片/从片初始化命令字( ICW3)

只有当系统中有多片 82C59A 级联时才需要设置 ICW3 ,单片 82C59A 时不用设置 ICW3 。当多片 82C59A 级联时, ICW3 用来指出主片上连接从片以及从片连接到主片的情况,所以, ICW3 有两种格式,如图 7-13 和 7-14 所示:

Page 81: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 82: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 83: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

⒋ 方式控制初始化命令字( ICW4)

当 ICW1 中的 D0= 1 时,初始化 82C59A

时需要写入 ICW4 。 ICW4写入奇地址端口,其格式如图 7-15 所示:

Page 84: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 85: 第 7 章 中断及中断控制器

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 SPSP

Page 86: 第 7 章 中断及中断控制器

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 位机系统。

SS

SS

S

INTA

Page 87: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

二、 82C59A 初始化编程逻辑 82C59A 进入正常工作之前,系统必须对每

个 82C59A 进行初始化设置。 初始化是通过编程将初始化命令字按顺序写

入 82C59A 的端口实现的, 82C59A 的初始化流程如图 7-16 所示:

Page 88: 第 7 章 中断及中断控制器
Page 89: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

例【 7-2】某 8086微机系统中有一片 82C59A ,中断请求信号为电平触发,中断类型码为 40H ~ 47H ,中断优先级管理采用普通全嵌套方式,中断结束方式采用自动结束方式,系统中未使用数据缓冲器,系统分配给82C59A 的端口地址为 20H 和 21H ,试对该82C59A 进行初始化编程。

Page 90: 第 7 章 中断及中断控制器

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 送入奇地址瑞口

Page 91: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

三、操作命令字 OCW ⒈ 中断屏蔽操作命令字 OCWl

  OCWl用来实现对中断源的屏蔽功能, O

CWl的内容被直接置入 IMR 屏蔽寄存器,其格式如图 7-17 所示: 

Page 92: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 93: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

⒉ 优先级循环方式和中断结束方式操作命令字 OCW2

  OCW2 有两个功能:设置中断结束方式和优先级循环方式,要求写入偶地址端口,其格式如图 7-18 所示: 

Page 94: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 95: 第 7 章 中断及中断控制器

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中相应位会自动清除。 

Page 96: 第 7 章 中断及中断控制器

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指出具体应清除中断服务寄存器中的哪一位。 

Page 97: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

  当 OCW2 给出特殊的优先级循环方式命令时

(即EOI= 0 , SL = 1 , R= 1) , L2 、 L1 和

L0指出循环开始时哪个中断的优先级最低。 

表 7-3归纳了对 D7 ~ D5 位在各种编码下 OCW

1 完成的功能: 

Page 98: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 99: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

⒊ 特殊屏蔽方式和中断查询方式操作命令 OCW3

 有 3 个功能: 设置和撤消特殊屏蔽方式 设置中断查询方式 设置读出 ISR 或 IRR 寄存器的内容  格式如图 7-19 所示 

Page 100: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 101: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

用 OCW3 设置和撤消特殊屏蔽方式  特殊屏蔽方式是 82C59A 为了响应低级中断而提供的一种功能。为了中断当前的中断服务程序转去响应低级中断, CPU 要先向 82C59A 发出一个特殊屏蔽字,使 82C59A进入特殊屏蔽状态;当低级中断处理完毕返回被中断的高级中断服务程序的断点时,要发出撤消特殊屏蔽字,以恢复原来的嵌套顺序。设置和撤消特殊屏蔽字由 OCW3中的 D6 、 D5位来实现。 

Page 102: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程 ESMM称为特殊屏蔽允许位, SMM称为特殊屏蔽方式位,这两位的组合决定是设置特殊屏蔽还是撤销屏蔽。 • 当 ESMM、 SMM= 11 时,将 82C59A 设置为特殊屏蔽方式,即

只屏蔽本级中断请求,允许高级的或低级的中断申请进入。  • 当 ESMM、 SMM= 10 时,撤消特殊屏蔽方式,恢复原来的优先

级控制。 • 当 ESMM= 0 时,不能建立特殊屏蔽方式, SMM 位也不起作用。 

设 D2、 D1、 D0这 3位均为 0,则设置的特殊屏蔽方式字 OCW3=68H,撤消特殊屏蔽方式字OCW3= 48H。 

Page 103: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

OCW3的中断查询功能   OCW3的 D3位即 P位为中断查询方式位。当 P=1 时,使 82C59A 处于中断查询方式,即CPU 向 82C59A偶地址端口写入一个查询命令OCW3= 0CH后,再执行输入指令 (IN) , CPU便可读入 82C59A提供的查询字。查询字反映了当前有无中断请求,以及中断请求中优先级最高的是哪一个。 82C59A 的查询字格式如图 7-20 :

Page 104: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

Page 105: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

OCW3 的读操作功能

  82C59A 内部有 3 个寄存器 (IRR 、 IMR 、 ISR) 可供 CPU读出其当前的状态, CPU 在发读命令之前,须先指定读取哪个寄存器,然后再发 IN指令,才能读取 IRR 和 ISR 中的内容。当所读的寄存器不变,就不必每次都指定所要读取的寄存器。在 82C59A 初始化后,自动指向读 IRR 。 

Page 106: 第 7 章 中断及中断控制器

7.2.5命令字和初始化编程

 OCW3 中的 D1 , Do两位用来指定具体读 ISR 和 IRR 中的哪一个寄存器: • 当 RR 、 RIS = 11 时,表示 CPU 的下

一条 IN指令要读取 ISR 寄存器的内容。 • 当 RR 、 RIS=10 时,表示 CPU 的下一条

IN指令要读 IRR 寄存器的内容。   

Page 107: 第 7 章 中断及中断控制器

IMR 寄存器的读出:

对 IMR 寄存器的读出,不需要事先发出指定命令,直接通过读奇地址端口,

就可以读到 IMR 寄存器的内容。 

Page 108: 第 7 章 中断及中断控制器

习 题 7

7.2 7.6 7.7 7.12