1.08k likes | 1.33k Views
第 7 章 中断及中断控制器. 7.1 概述 7.2 可编程中断控制器 82C59A. 教学目的和要求. 掌握有关中断和中断源、中断处理过程、中断优先级和中断嵌套等基本知识 掌握可编程中断控制器 82C59A 外部特性及其与 CPU 的连接方式 掌握 82C59A 的初始化编程 掌握 8086/8088 可屏蔽中断的全过程 了解 82C59A 的结构及级联方式的运用等. 中断及中断控制器. 重点 中断及中断处理过程 82C59A 的初始化编程 8086/8088 可屏蔽中断的全过程 难点 8086/8088 的中断系统 中断优先权的控制机理.
E N D
第7章 中断及中断控制器 • 7.1 概述 • 7.2 可编程中断控制器82C59A
教学目的和要求 • 掌握有关中断和中断源、中断处理过程、中断优先级和中断嵌套等基本知识 • 掌握可编程中断控制器82C59A外部特性及其与CPU的连接方式 • 掌握82C59A的初始化编程 • 掌握8086/8088可屏蔽中断的全过程 • 了解82C59A的结构及级联方式的运用等
中断及中断控制器 重点 • 中断及中断处理过程 • 82C59A的初始化编程 • 8086/8088可屏蔽中断的全过程 难点 • 8086/8088的中断系统 • 中断优先权的控制机理
7.1 概述 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值依次压入堆栈保存 ,以便中断处理完后能正确地返回到主程序的断点地址,接着执行被中断的程序。
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有两条中断信号线—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的最大方式下,在这两个中断响应周期内输出 信号,以通知其他处理器不能再试图控制总线
可屏蔽中断INTR 在第一个中断响应周期内 信号通知82C59A,中断请求已被接受;在第二个中断响应周期内 信号有效时,82C59A必须把请求服务的那个设备的中断类型码(0~255)送到数据总线,该中断类型码是82C59A的初始化过程中由8086/8088写入的。CPU读入该中断类型码后,由此调用相应的中断服务程序 。
不可屏蔽中断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的中断优先级见下表
三、中断向量表 中断向量表又称中断指针表,是存放中断服务程序入口地址(即“中断向量”)的表格。它存放在存储器的最低端(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 0C to +70C I82C59A -40C to +85C M82C59A -55C to +125C
7.2.1 82C59A内部结构 82C59A的内部结构如图7-7所示,主要有8个基本组成部分: 一、数据总线缓冲器 8位的双向三态缓冲器,一般与CPU数据总线D7~D0直接连接,完成命令、状态信息的传送,中断类型号也是由数据缓冲器送到CPU。
7.2.1 82C59A内部结构 二、读写控制逻辑 该部件接收来自CPU的读写命令,完成规定的操作。操作过程由 、Ao、 、 等输入信号共同控制。在CPU写82C59A时,把写入数据送至相应的命令寄存器中(包括初始化命令字和操作命令字)。在CPU读82C59A时,控制相应寄存器的内容输出到数据总线上。
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申请中断。