【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A

文章目录

  • 8.1 中断
    • 8.1.1 中断概念和分类
      • 1.中断的定义和功能
      • 2.中断源和中断分类
        • 1)外部中断
        • 2)内部中断
      • 3. 中断向量表
      • 4.中断优先级和中断嵌套
        • (1) 中断优先级
        • (2) 中断嵌套
    • 8.1.2 中断的响应与处理过程
      • 1.中断响应过程
      • 2.8086的中断响应与处理
        • 1)中断查询
        • 2)中断响应
        • 3)中断处理和返回
  • 8.2 可编程中断控制器8259A的工作原理
    • 8.2.1 8259A的引脚信号和内部结构
    • 8.2.2 8259A的工作方式
      • 1. 设置优先级方式
        • 1)全嵌套方式
        • 2)特殊全嵌方式
        • 3)优先级自动循环方式
        • 4)优先级特殊循环方式
      • 2.中断屏蔽方式
        • 1)普通屏蔽方式
        • 2)特殊屏蔽方式
      • 3.结束中断方式
        • 1)自动结束中断方式—AEOI
        • 2)普通结束中断方式—EOI(End of Interrupt)
        • 3)特殊结束中断方式—SEOI
      • 4.中断查询方式-POLL
    • 8.2.3 8259A的命令字及编程
      • 1. 初始化命令字ICW
        • (1) ICW_1 初始化命令字
        • (2) ICW_2 中断类型码初始化
        • (3) ICW_3 级联初始化
        • (4) ICW4
      • 2. 操作命令字OCW
        • (1) OCW1 中断屏蔽字
        • (2) OCW2 优先级循环和中断结束
        • (3) OCW3 特殊屏蔽和中断查询
  • 8.3 8259A应用举例


8.1 中断

8.1.1 中断概念和分类

1.中断的定义和功能

中断定义:计算机在执行正常程序过程中,暂时中止当前程序的运行,转到中断处理程序去处理临时发生的事件,处理完后又恢复原来程序的运行,这个过程称为中断(Interrupt)。

中断功能:

  • 使CPU和外设在部分时间内并行工作,大大提高CPU的利用率;
  • 在实时控制系统中,现场数据可及时接收处理,避免丢失;
  • 故障的处理,如电源掉电、奇偶校验错、运算中溢出错等;
  • 利用中断指令,直接调用大量系统已编写好的中断服务程序实现对硬件的控制

2.中断源和中断分类

引起中断的原因或能发出中断请求的来源称为中断源。
8086有两种中断源,中断分为两大类:
1)外部中断或硬件中断,从不可屏蔽中断引脚 NMI 和可屏蔽中断引脚 INTR 引入;
2)内部中断或软件中断,是为解决CPU运行过程中出现的一些意外事件或便于程序调试而设置的。

我们这门课,学习 8259A 主要是处理 INTR

图8.1 IBM PC机中 8086 的中断分类和中断源

【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第1张图片

1)外部中断

不可屏蔽中断NMI,处理较紧急的情况,如存储器或I/O校验错、掉电、协处理器异常中断请求等,不受中断标志IF的影响。
可屏蔽中断由 8259AINT 引脚输出,连到CPU的INTR上。只有当CPU的 FLAGSIF=1 时,才允许响应此类中断请求
8259A的输入引脚 IR0~IR7 可引入 8 级中断:时钟、键盘、串行通信口COM1和COM2、硬盘、软盘、打印机。经芯片内部判别后,将优先级高的中断请求信号送到 INT 引脚。

2)内部中断

(1) 除法错中断
执行除法运算指令时,如除数为0或商超过了结果寄存器能容纳的范围,则产生除法错中断。

(2) 单步中断
单步标志 TF 置1,指令执行完后,产生单步中断。结果是将CPU的内部寄存器和有关存储器的内容显示出来,便于跟踪程序的执行过程,实现动态排错。
8086没有直接使TF标志置1或清0的指令,如何使 TF 标志置1或清0?使TF标志置1的程序段:

PUSHF		  ;标志寄存器FLAGS入栈
POP AX		  ;AX←FLAGS内容
OR  AX, 0100H ;使AX(即标志寄存器)的
			  ;D8=1,其余位不变
PUSH AX		  ;AX入栈
POPF		  ;FLAGS寄存器←AX

用类似方法将标志寄存器与 FEFFH 相与,可使 TF 标志清0,从而禁止单步中断

(3) 溢出中断
溢出标志 =1 ,则可由溢出中断指令 INTO 产生中断类型号为 4 的溢出中断。若OF=0 ,不会产生中断。
带符号数加、减指令后应安排一条 INTO 指令,一旦溢出就能及时向CPU提出中断请求,CPU响应中断后可进行相应的处理。

(4) 软件中断指令 INT n
中断类型号 n=0~255 。它可以安排在程序的任何位置上。

(5) 断点中断
程序运行到断点时便产生中断,像单步中断一样,查看各寄存器和有关存储单元的内容
断点可设在程序任何地方并可以设多个断点,设置的方法是插入一条 INT 3 指令。利用断点中断可以调试一段程序,比单步中断的调试速度快得多。

3. 中断向量表

(1)中断响应和返回

  • CPU响应中断时,首先要把 CS、IP 寄存器的值(断点)以及标志寄存器 FLAGS 的值推入堆栈保护
  • 然后找到中断服务程序的入口地址(中断向量),转去执行相应的中断服务程序
  • 中断服务程序结束时,执行中断返回指令 IRET 返回正常程序继续执行。

如何寻找中断服务程序的入口地址,是中断处理过程中的一个重要环节。

(2)中断向量表
中断向量表用来存放中断服务程序的入口地址

  • 8086可处理 2560~FFH)类中断,每类中断有一个入口地址(中断向量),包含 CSIP ,共 4 个字节。因此存储 256 个地址,需要占用 1K 字节,它们位于内存 00000~003FFH 的区域中(早年的8086/8088)。
  • 将中断类型号 n 乘以 4 就能找到规定类型的中断向量,规定 IP 在前,CS 在后。
  • 类型号为 0~4 的专用中断:0-除法错中断、1-单步中断、2-不可屏蔽(NMI)中断、3-断点中断和4-溢出中断,它们的中断向量分别存放在 00H04H08H0CH10H开始的4个连续单元中。
    【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第2张图片

举例说明中断类型号n中断向量表的关系。

例8.1 类型号 n=44H 的中断服务程序的入口地址为 3600:2000H ,它们在中断向量表中应如何存放?
分析:中断类型号 n=44H=01000100B ,它的中断服务程序的入口地址应放在 44H*4 开始的4个字节单元中。44H*4=01 0001 0000B= 0110H。从0110H开始存放 3600:2000H
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第3张图片

例8.2 若在中断向量表中,(0040H)=240BH,而 (0042H)=D169H,如图8.4所示,试问这4个单元中的内容对应的中断类型号 n= ?该中断服务程序的起始地址是什么?
分析:中断服务程序的入口地址从 0040H 单元开始存放,其类型号n=40H/4=10H(右移 2 位)。由图可知,中断类型号为 10H 的中断服务程序的入口地址=D169:240BH
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第4张图片

4.中断优先级和中断嵌套

(1) 中断优先级

按中断源的重要性实时性,排出响应中断的次序,这种次序称为中断优先级。 在8086中,中断优先级从高到低的次序为:

除法错、INT n、INTO		;最高级,同一行的有同等优先级
NMI					    ;次高级
INTR					;较低级(由8259A引入)
单步中断					;最低级

(2) 中断嵌套

CPU响应中断时,一般先响应优先级高的,后响应优先级低的中断请求。如CPU正在执行中断服务程序时,有优先级较高的中断源提出请求,则将正在处理的中断暂时挂起,先为高级中断服务,服务完后再返回较低级中断,称为中断嵌套。

如何实现中断嵌套?

  • 机器进入中断服务程序后,硬件会自动关中断 CLI
  • 只有程序员手动用 STI 指令将中断打开后,才允许高级中断进入实现中断嵌套
  • 中断服程序结束前,必须用 EOI 命令结束该级中断,并用 IRET 指令返回到中断前的断点处继续执行原程序

8.1.2 中断的响应与处理过程

1.中断响应过程

可屏蔽中断的响应和处理流程如图:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第5张图片

每条指令执行完,CPU都要查 NMIINTR 脚上是否有中断请求,若无,继续取下一条指令执行。如有则响应中断,硬件自动完成关闭中断和保护断点操作,将下条要执行指令的 CSIP(即断点)推入堆栈;然后寻找中断服务程序的入口地址,找到后就转入相应的中断服务程序。最后,恢复现场,开中断,返回断点。

2.8086的中断响应与处理

1)中断查询

CPU在执行完每条指令后,会顺序检查是否有 软中断、NMI、INTR和单步中断 ,如有,则进入中断响应周期。

2)中断响应

根据不同的中断源形成不同的中断类型码n,再在中断向量表中,根据 n 找到各自的中断服务程序的入口地址,转入相应的中断处理程序

例如 n=2 ,则形成中断类型码 2 ,再在中断向量表中找到 n*4=2*4=8 开始的连续4个字节单元,从中取出 CS:IP ,转去执行可屏蔽中断

重点介绍从 INTR 引脚引入的可屏蔽中断的类型码是如何形成的。CPU响应 INTR 中断后,要执行两个连续的中断响应 INTA 总线周期,其时序图如图:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第6张图片

第一个 INTA ‾ \overline {\text{INTA}} INTA 周期,CPU使数据线 D7~D0 浮空,T2~T4 期间向 8259A 发第1个中断响应信号 INTA ‾ \overline {\text{INTA}} INTA ,表示CPU已响应此中断禁止其它总线控制器竞争总线

第二个 INTA ‾ \overline {\text{INTA}} INTA 周期,8259A 收到第二个 INTA ‾ \overline {\text{INTA}} INTA 信号后,将中断类型号 n 置于数据总线上,由此找到中断服务程序的入口地址

8259AIR7~IR0 上可引入 8 级中断,形成 88 位中断类型码,其中高 5D7~D3 由用户通过对8259A编程来确定,在 PC/XT 机中为 00001 ;低 3D2~D0IR7~IR0 的序号来决定, 见表8.1。高5位确定后,8 级中断类型码就确定了。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第7张图片

3)中断处理和返回

(1) 由硬件自动完成以下工作

  • FLAGS 的内容入栈;
  • 保护单步标志 TF
  • IF 标志,关中断,中断处理过程中禁止其它中断进入;
  • TF 标志,使CPU不会以单步形式执行中断处理程序;
  • 保护断点,CS:IP 入栈。

(2) 进入中断服务
进入中断处理后,若在处理过程中又有 NMI 进入,NMI 中断处理后,会清除CPU中锁存的 NMI 请求信号,使加在CPU上的 NMI 只会被CPU识别一次;

接下来执行用户编写的中断服务程序,包含保护现场,中断处理和恢复现场程序。

(3) 执行用户编写的中断返回指令 IRET
CS:IP 出栈,恢复断点,恢复 FLAGS 的内容,返回主程序,继续执行下一条指令。


8.2 可编程中断控制器8259A的工作原理

8.2.1 8259A的引脚信号和内部结构

中断控制器8259A的引脚:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第8张图片

可接收 8 级中断,经 48 位寄存器判别后,优先级最高的中断请求信号从 INT 脚输出,送CPU的 INTR 脚请求可屏蔽中断。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第9张图片

内部结构:(1根地址,说明只占用了两个端口地址;D7-D0 8位数据)

  • 中断请求寄存器 IRR \text{IRR} IRR (Interrupt Request Register)

    • 外部8级中断请求信号IR7~IR0 脚上引入,有请求时相应位置 1 。例如 IR7、IR5、IR2 上有请求, IRR \text{IRR} IRR 将置成 10100100
    • 中断响应时相应位清 0
    • 中断请求信号可为高电平或上升沿触发,编程定义。
  • 中断屏蔽寄存器 IMR \text{IMR} IMR (Interrupt Mask Register)
    存放中断屏蔽信息,每 1 位与 1IR 位对应,置 1 禁止对应中断请求进入系统。用来有选择地禁止某些设备请求中断。

  • 中断服务寄存器 ISR \text{ISR} ISRInterrupt Service Register
    保存正处理的中断请求。任一中断被响应而执行其服务程序时,相应位置 1 ,直到处理结束。多重中断情况下,会有多个位置 1

  • 优先级判决器 PR \text{PR} PRPriority Resolver

    • 判别请求寄存器 IRR \text{IRR} IRR 里中断的优先级,把优先级最高的中断请求选进服务寄存器 ISR \text{ISR} ISR 中去。
    • 多重中断出现时, PR \text{PR} PR 判定新出现的中断能否去打断正在处理的中断,优先服务更高的中断级别
  • 控制电路
    包含一组初始化命令字寄存器 ICW1~ICW4 和一组操作命令字寄存器 OCW1~OCW3 ,管理 8259A 的全部工作。

    • 根据 IRR \text{IRR} IRR 设置和 PR \text{PR} PR 判定,发控制信号。
    • INT 脚向CPU发中断请求信号接收CPU或总线控制器8288送来的中断响应信号 INTA ‾ \overline {\text{INTA}} INTA
    • 中断响应 ISR \text{ISR} ISR 相应位置 1 ,并发送中断类型号 n ,经数据总线缓冲器送到 D7~D0
    • 中断服务程序结束时,按编程规定方式结束中断。
  • 数据总线缓冲器
    8259A 与CPU的接口,CPU经它向 8259A 写控制字接收 8259A 送出的中断类型号,还可从中读出状态字(中断请求、屏蔽、服务寄存器的状态)和中断查询字

  • 读/写控制电路
    接收CPU的 RD ‾ \overline {\text{RD}} RD WR ‾ \overline {\text{WR}} WR 、地址、片选 。一片 8259A 只占两个I/O地址,XT机中 A0 接地址 A0 ,口地址为 20H、21H 。与8086连时,A0 脚接地址 A1A0 的0/1选偶/奇地址口。

  • 级联缓冲器/比较器

    • 一片 8259A 最多引入 8 级中断,超过 8 级要用多片 8259A 构成主从关系,级联使用。
      从片输出 INT 接主片 IRi 。主从片的 3 条级联信号线 CAS2~CAS0 并接。
    • SP ‾ / EN ‾ \overline {\text{SP}} /\overline {\text{EN}} SP/EN主从定义/缓冲器方向;双功能
      • 缓冲方式:输出,控制缓冲器传送方向;
      • 非缓冲方式:输入;定义主从片,1:主片,0:从片
    • 多片时,8259A 必须经驱动器与数据总线相连工作于缓冲方式;少量 8259A 系统中,8259A直接与数据总线相连工作于非缓冲方式

8.2.2 8259A的工作方式

写入初始化命令字 ICW 和控制命令字 OCW ,对 8259A 设置不同的工作方式。

1. 设置优先级方式

1)全嵌套方式

最基本方式,初始化后自动进入

  • 从各 IRi 脚引入的中断请求具有固定优先级IR0~IR7 依次降低,IR0 最高。8259A 初始化后自动进入此方式。
  • 中断响应后,中断服务寄存器 ISR \text{ISR} ISR 的对应位 ISn1 ,并保持到中断结束,类型号 n 出现在 DB 上,然后进入中断处理
  • 由CPU发 EOI 命令结束中断,使 ISn 复位;也可发自动结束中断命令 AEOI
  • 处理过程中,高级中断打断低级中断禁止低级或同级中断进入

2)特殊全嵌方式

同全嵌套方式,但允许同级中断进入

例8.3 同级中断举例。图中,从片 INT 脚接主片的 IR2,主片角度看,从片的 8 级中断为同级中断。若正在处理 IR3 ,则允许 IR0~IR2 进入, 即允许同级中断进入。必须在 IR3 中断处理程序中,用 STI 指令开中断,才允许从片中断嵌套。但全嵌套方式禁止同级中断进入。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第10张图片

3)优先级自动循环方式

各中断请求优先级相同IRi 服务完后成为最低级IRi+1 成最高级。初始优先级从高到低为 IR0~IR7

例8.4 参看下图的优先级自动循环方式示意图。

  • 图(a):初始状态 IR0 为最高级,若 IR1、IR3、IR6 同时请求中断,则 IRR \text{IRR} IRRIR1、IR3、IR6 均置 1
  • 图(b):IR1 先被服务,之后 IS1=0IR1 成最低级,IR2 为最高级,优先级顺序:IR2->IR7、IR0、IR1 。为 IR3 服务后 IS3=0IR3 最低,IR4 最高,依次类推。
    【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第11张图片

4)优先级特殊循环方式

也称为设置最低优先级方式,与优先级自动循环方式类似,只是最低优先级由程序设置,并非 IR7 最低。IRi 设为最低后,IRi+1 便是最高。


2.中断屏蔽方式

可用 CLI 指令关中断,禁止可屏蔽中断进入;开中断情况下,可将中断屏蔽寄存器 IMR \text{IMR} IMR 的相应位置1,来屏蔽某一级或某几级中断。有两种屏蔽方式:

1)普通屏蔽方式

IMR \text{IMR} IMR 中的某 1 位或某几位置 1 ,就可将相应的中断请求屏蔽。例如,令 IMR = 00100100 \text{IMR}=00100100 IMR=00100100 ,则 IR5IR2 上的中断请求被屏蔽。

2)特殊屏蔽方式

仅屏蔽本级中断,高级或低级中断允许进入。(关于优先级的改变)


3.结束中断方式

中断响应后, ISR \text{ISR} ISR 的相应位 ISn1中断结束后应将 ISn0 ,表示结束中断。
2 种结束中断方式:自动和非自动,后者又分普通结束和特殊结束(EOI和SEOI)。

1)自动结束中断方式—AEOI

IRi 上中断响应后, ISR \text{ISR} ISR 相应位置 1 ,在CPU发来的中断响应信号 INTA ‾ \overline {\text{INTA}} INTA 的第 2 周期结束时, ISR \text{ISR} ISR相应位自动清 0,结束中断。

AEOI 方式,中断结束时(中断服务程序)不用对 8259A 发任何命令,通常在只有一片 8259A多个中断不会嵌套的情况下使用。

2)普通结束中断方式—EOI(End of Interrupt)

是常用的结束中断方式,用于全嵌套方式。当CPU处理完 1 个中断请求时,需向 8259AEOI 命令,8259A 收到 EOI 后,将 ISR \text{ISR} ISR 寄存器中优先级最高的中断,也就是刚服务过的中断ISn 清零,从而结束中断

3)特殊结束中断方式—SEOI

非完全嵌套方式下,用 ISR \text{ISR} ISR 寄存器无法确定当前正在处理哪级中断,也无法确定哪级中断是最后响应和处理的,不能用 EOI 方式结束中断,要用特殊方式。这时要用 OCW2 命令中的 L2~L0 来指定将 ISR \text{ISR} ISR 寄存器的哪 1 位清 0


4.中断查询方式-POLL

使用一条 IN 指令读取中断查询字,就可查到 8259A 是否有中断请求以及哪个优先级最高。下图是中断查询字格式:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第12张图片


8.2.3 8259A的命令字及编程

为使 8259A 按预定方式工作,必须对它编程,由CPU向其控制寄存器发各种控制命令。控制命令有两类:

  • 初始化命令字 ICW1~ICW4 ,对 8259A 初始化;
  • 操作命令字 OCW1~OCW3 ,定义操作方式

在操作过程中,允许重设置操作命令字,动态改变 8259A 的控制方式。两类命令字被写入 8259A 的两个端口,一个为偶地址口8259AA0=0 ,另一个为奇地址口,A0=1 。在 XT 机中,偶/奇地址口为 20H21H

1. 初始化命令字ICW

初始化命令字 ICW1~ICW4 顺序写入控制口,设置 8259A 初始状态。8086系统中 ICW1ICW2ICW4 必须要有,ICW3 只在级联时用

(1) ICW_1 初始化命令字

【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第13张图片

A0=0,ICW1 写入偶地址口D4=1 标志位;IC4=1 需要设 ICW4 (8086必须写 ICW4 );
单片SNGL=1, 不要写入ICW3级联SNGL=0 ,要写入 ICW3
LIMT=1IRi 引入中断为电平触发,0 边沿触发;
A7~A5ADI 位用于8位CPU。

(2) ICW_2 中断类型码初始化

ICW2 紧跟 ICW1 写入,A0=1 ,写入奇地址口无标志位T7~T3 位用于确定中断类型码 n 的高 5 位,低 3D2~D0 则由 8259A 根据从 IR_i引入中断的引脚序号自动填入,从 IR0~IR7 的序号依次为 000~111,其初值可以置为 0

ICW2 的高 5 位内容是可以任选的,一旦高 5 位确定,一块芯片的 8 个中断请求信号 IR0~IR7 的中断类型号也就确定了。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第14张图片

例8.4 在 PC/XT 机中,ICW2的高 5T7~T3=00001B ,若从 IR5 上引入中断请求,则其中断类型码 n= ? 如何设置 ICW2 ?
分析:从 IR5 上引入的中断类型号的低 3D2~D0=101B ,由于高 5 位是 00001B ,所以从 IR5 上引入的中断类型码 n=00001 101B=0DH ,表示是硬盘中断请求。设置 ICW2 的指令为:

MOV	AL, 00001000B
OUT 21H, AL

据此可知,若 ICW2 的高 5 位为 01110B ,则该 8259A 引入的 8 级中断的中断类型号 n = 01110000B ~ 01110111B = 70H~ 77H ,这是为 PC/AT 机设置的 ICW2

(3) ICW_3 级联初始化

ICW3 只在级联时使用。图8.15是 ICW3 的格式和 8259A 主从结构连接图。
(a) 主片 ICW3 格式。Si=0IRi 上未接从片;Si=1 接有从片。
(b) 从片 ICW3 格式。低 3 位指明从片接主片哪个引脚,ID2~ID0 = 000~111 表示 IR0~IR7 引脚。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第15张图片

例8.5 用 38259A 按主从结构连接,如图8.15(c)。主片口地址为 20H/21H , 从片1口地址为 A0H/A1H ,从片 2B0/B1H 。试求出 38259AICW3 ,并编程将 ICW3 写入各芯片的奇地址口中。
分析:

  • 主片 IR2IR7 接从片,故主片 ICW3=10000100B=84H
  • 从片 1 接主片 IR2 ,故从片 1ICW3=00000010B=02H
  • 从片 2 接主片 IR7 ,故从片 2ICW3=00000111B=07H

对各芯片写入初始化命令字 ICW3

MOV    AL, 84H		;主片程序
OUT    21H, AL
MOV    AL, 02H		;从片1程序
OUT    0A1H, AL
MOV    AL, 07H		;主片2程序
OUT    0B1H, AL

如图中所示的级联系统:

  • 主片的 ICW3=24H00100100
  • 从片 1ICW3=02H00000010
  • 从片 2ICW3=05H00000101
    【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第16张图片

只有 A 有申请(与单片系统相同):

  • 从片1: IRR=00H \text{IRR=00H} IRR=00H
  • 从片2: IRR=00H \text{IRR=00H} IRR=00H
  • 主片: IRR 6 = 1 \text{IRR}_6=1 IRR6=1 INT = 1 \text{INT}=1 INT=1,收到 INTA ‾ \overline {\text{INTA}} INTA,主片 ISR 6 = 1 \text{ISR}_6=1 ISR6=1 ,送 IR6 的类型号。

A、B、C 同时申请:

  • 从片1: IRR 7 = 1 \text{IRR}_7=1 IRR7=1
  • 从片2: IRR 4 = 1 \text{IRR}_4=1 IRR4=1
  • 主片: IRR 6 \text{IRR}_6 IRR6 IRR 2 \text{IRR}_2 IRR2 IRR 5 \text{IRR}_5 IRR5 同时为1, INT=1 \text{INT=1} INT=1 (转发 IR2 的请求)
  • 过程:
    • 第1个 INTA ‾ \overline {\text{INTA}} INTA,主片 ISR 2 = 1 \text{ISR}_2=1 ISR2=1 并送 IR2 的级联代码;从片 2 与自己的识别码比较不同,无操作;从片 1 :相同, ISR 7 = 1 \text{ISR}_7=1 ISR7=1
    • 2 INTA ‾ \overline {\text{INTA}} INTA:从片 1 送出 IR7 的类型号,主片不送
    • 最后,送两个 EOI 命令,给主片送 EOI 的条件——从片 ISR=00H \text{ISR=00H} ISR=00H

(4) ICW4

8086系统 ICW4 必须设置,写入奇地址口。无级联时 ICW4 应在 ICW2 后写入,级联时它在 ICW3 后写入。图8.16 ICW4 的格式:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第17张图片
ICW4 各位的含义:

  • D7~D5=000,为标志位;
  • SFNM=1 ,设置特殊全嵌套方式(Special Fully Nested Mode),否则为一般全嵌套方式;
  • BUFM/S 配合使用决定缓冲或非缓冲方式等;
  • AEOI=1,选择 AEOI 方式,即自动结束中断方式;
    AEOI=0,为非 AEOI (非自动结束中断)方式,须在中断服务程序中安排操作命令字 OCW2,选择所需的方式结束中断;
  • μ PM=1 \mu \text{PM=1} μPM=1,选择8086系统。

整个初始化流程如下:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第18张图片

例8.6 在 PC/XT 机中,只使用一片 8259AROM BIOS 中对 8259A 进行初始化的程序为:

MOV 	AL, 00010011B  ;ICW1:边沿触发,
					   ;单级,要ICW4
OUT  	20H, AL
                         
MOV  	AL, 00001000B  ;ICW2:中段类型号
					   ;基值为08H
OUT   	21H, AL

MOV  	AL, 00001001B  ;ICW4:全嵌套,
					   ;缓冲,非AEOI
OUT 	21H, AL

2. 操作命令字OCW

8259A 工作期间,可写入操作命令,让它按需要方式工作。

  • 可写入 3 个操作命令字 OCW1~OCW3 ,用来发非 AEOI 方式结束中断的命令、优先级循环命令中断查询命令,还可设置或撤销 AEOI 循环命令、设置或撤销特殊屏蔽方式、读内部寄存器的状态,功能比较复杂,尤其是 OCW2
  • OCW 在应用程序内部设置,没有规定写入顺序,但写入的端口地址有规定:OCW1 必须写入奇地址口OCW2OCW3 要求写入偶地址口

(1) OCW1 中断屏蔽字

OCW1 也称中断屏蔽字,直接对中断屏蔽寄存器 IMR \text{IMR} IMR 的各位进行置 1 或清 0 。当 Mi 位置 1 ,相应 IRi 的中断请求将被屏蔽,清 0 则允许中断。
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第19张图片
屏蔽某个 IRi 中断,并不影响其它脚上的中断请求。允许随时读出 IMR \text{IMR} IMR 的内容,供CPU分析。

例8.7 某系统只允许键盘(IR1)中断,其余位均屏蔽,8259A 口地址 20H/21H,试写入中断屏蔽字。如系统中要新增键盘中断,其余屏蔽位不变,如何设置屏蔽字。
只允许键盘中断的程序段为:

MOV  AL, 11111101B          ;D1=0,IR1没被屏蔽,
	            			;其余均被屏蔽
OUT  21H, AL

新增键盘中断的程序段为:

IN   AL, 21H        		;用IN指令读屏蔽字
AND  AL, 11111101B       	;仅D1清0,其余位不变
OUT  21H, AL             	;写入修改后的屏蔽字

(2) OCW2 优先级循环和中断结束

OCW2 设置优先级循环方式中断结束方式的命令字:
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第20张图片
OCW2 各位有单独的含义:

  • D4D3=00,是 OCW2 的标志位。和 ICW1 进行区分。
  • RRotate) :R=1,优先级按循环方式设置,否则为非循环方式。
  • SLSpecific Level):SL=1OCW2 中的 L2~L0 有效,否则无效。
  • EOIEnd of Interrupt) :结束中断命令。EOI=1,当前 ISR \text{ISR} ISR 寄存器相应位清 0 。当 ICW4 中的 AEOI=0 ,即非自动结束中断时,可用它来结束中断。
  • L2~L0SL=1 时,配合 RSLEOI 设置来确定一个中断优先级的编码,L2~L0 的编码000~111,分别与 IR0~IR7 相对应。

R、SL、EOI 组合设置,具有不同的意义:
(1) R SL EOI=001 ,发 EOI 命令
在中断服务程序结束时,IRET 指令前,发 EOI 命令结束中断,将服务寄存器中刚服务过的 ISn 位清 0 ,结束中断。设置命令的方法是将 00100000B=20H 输出到 8259A偶地址口中。EOI命令是最常用的中断结束命令
例8.9 在PC机的中断服务程序中设置中断结束命令,使相应的 ISn0 。程序段如下:

MOV   AL, 20H         		;OCW2的EOI命令
OUT   20H, AL         		;发EOI命令

(2) R SL EOI=011 ,发 SEOI 命令
在中断服务程序结束时,发特殊结束中断命令 SEOI ,到底结束哪一级中断由 L2~L0 指定,将相应的 ISn0
例8.10 发特殊结束中断 SEOI 命令,结束 5 级中断。

MOV   AL, 01100101B   ;OCW2的SEOI命令, L2~L0=101
OUT   20H, AL         ;将IS5清0, 结束5级中断

(3) R SL EOI=101 ,发 EOI 循环命令
采用 EOI 方式结束中断,将刚服务过的优先级最高的 ISn0 ,同时将刚结束的中断请求 IRi 的优先级设为最低级,使 IRi+1 置为最高级,将优先级置为自动循环方式

(4)R SL EOI=100 ,设置 AEOI 循环命令
使 8259A 采用自动结束中断方式结束中断,CPU响应中断时,在中断总线周期的第二个 INTA ‾ \overline {\text{INTA}} INTA 脉冲结束时,将 ISR \text{ISR} ISR 寄存器的相应位清 0 ,并使优先级置为自动循环方式

(5) R SL EOI=000 ,发清除 AEOI 循环方式命令

(6) R SL EOI=111 ,发 SEOI 循环命令
采用特殊结束中断方式结束中断,使 ISR \text{ISR} ISR 寄存器中由 L2~L0 指定的相应 ISn 位清 0,并置优先级为自动循环方式

例8.11 发 OCW2 命令,结束 2 级中断,并置优先级为自动循环方式

MOV  AL, 11100010B   ;OCW2的SEOI循环命令, 
				     ;L2~L0=010
OUT  20H, AL       	 ;IS2=0结束2级中断, 优先级
			  		 ;IR2最低, IR3为最高

(7) R SL EOI=110 ,设置最低优先级循环命令
L2~L0 指定的中断请求 IRi 设置为最低优先级其余按循环方式给出。(对应优先级特殊循环)

例8.12 要求发OCW2命令,使IR3设为最低优先级,优先权按循环方式给出。

MOV  AL, 11000011B    ;将IR3置为最低优先级, IR4置为最高优先级
OUT  20H, AL

(8) R SL EOI=010 无效命令字

(3) OCW3 特殊屏蔽和中断查询

OCW3 的格式如图所示。(下图的 D7 其实是 0 不是 R)
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第21张图片
OCW3 命令字含义:

  • D4D3位=01OCW3 的标志位( 20H 端口,标志为进行区分)。
  • D6D5=11设置特殊屏蔽方式D6D5=10 时撤销该方式。
  • P 位是中断查询(Poll)位,若 P=18529A 发中断查询命令,紧接着用 IN 指令读取中断查询字。查询字格式见图。
  • RR 位为读寄存器RR=1,允许读 IRR \text{IRR} IRR ISR \text{ISR} ISR 寄存器的内容。进一步查看 RIS;若 RIS=0,下次 IN 指令读取 IRR \text{IRR} IRR 内容;若 RIS=1 ,则读取 ISR \text{ISR} ISR 内容。RR=0为无效命令。
    【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第22张图片

例8.13 编写读取中断屏蔽字 (21H)、中断查询字(20H)及中断服务寄存器的程序段。
读取中断屏蔽字的程序段:

IN AL, 21H   ;从奇地址口读IMR, 获得中断屏蔽字

读取中断查询字的程序段:

MOV AL, 00001100B  ;OCW3, P=1, 发查询命令
OUT 20H, AL        ;OCW3写入偶地址口
IN  AL, 20H        ;AL←中断查询字。若AL=
				   ;10000110B,表示有中断请求, 且IR6上的优先级最高

读取中断服务寄存器 ISR \text{ISR} ISR 的程序段:

MOV	AL 00001011B 	;OCW3, RR-RIS=11,
					;下次读ISR
OUT 20H, AL        	;OCW3写入偶地址口
IN  AL, 20H        	;AL←ISR内容

特定屏蔽方式(开放高级和低级中断)设置方法(在某一个中断的中断服务程序中设置的,把我的中断优先级屏蔽掉,允许中断嵌套;设置后一直有效,直到清除):
① 用 OCW1 屏蔽当前中断
② 用 OCW3 设置特定屏蔽方式

清除方法:
① 用 OCW3 清除特定屏蔽方式
② 用 OCW1 开放当前中断

如在 IR3 的服务程序中使用,IR0-2 开放,IR3-7 关闭。比 IR3 优先级低的中断的服务程序必须送指定 EOI

...           ;IR0-2开放,IR3-7关闭; 下面设置特殊屏蔽方式
CLI			  ;关中断
IN  AL, 21H	  ;读入中断屏蔽字
OR  AL, 08H   ;屏蔽第3个引脚 0000_1000
OUT 21H, AL   ;送出去
MOV AL, 68H   ;0_11_01_0_00特殊屏蔽字
OUT 20H, AL   ;发特殊屏蔽字
STI        	  ;开中断
...			  ;IR0-2开放,IR4-7开放,IR3关闭    
 
CLI        	  ;关中断; 下面关闭特殊屏蔽方式
MOV AL, 48H   ;0_10_01_0_00
OUT 20H, AL   ;清除特殊屏蔽方式
IN  AL, 21H   ;读入中断屏蔽字
AND AL, 0F7H  ;开放自己,IMR3=0
OUT 21H, AL   ;送出去
STI        	  ;开中断
...         
MOV AL, 20H   ;EOI命令
OUT 20H, AL   
RET  

8.3 8259A应用举例

早期PC机——单片系统端口地址:20H、21H

  • 边沿触发
  • 完全嵌套
  • 固定优先级;
  • 非缓冲
  • 中断类型号08H~0FH

初始化编程:

MOV  AL, 13H    
OUT  20H, AL    ;ICW1
MOV  AL, 08H 
OUT  21H, AL    ;ICW2
MOV  AL, 01H    
OUT  21H, AL    ;ICW4
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第23张图片

286以上PC机——双片级联系统:

  • 从片连在主片的 IR2 上,主从级联信号互连
  • 端口地址,主片:20H、21H;从片:0A0H、0A1H
  • 边沿触发;
  • 完全嵌套;
  • 固定优先级;
  • 非缓冲;
  • 中断类型号,主片:08H~0FH;从片:70H~77H

初始化编程(主)

MOV  AL, 11H  ;000_1_0_0_01
OUT  20H, AL
MOV  AL, 08H
OUT  21H, AL
MOV  AL, 04H
OUT  21H, AL
MOV  AL, 01H
OUT  21H, AL

初始化编程(从)

MOV  AL, 11H
OUT  0A0H, AL
MOV  AL, 70H
OUT  0A1H, AL
MOV  AL, 02H
OUT  0A1H, AL
MOV  AL, 01H
OUT  0A1H, AL
【微机原理与接口技术】学习笔记7 中断和可编程中断控制器8259A_第24张图片

你可能感兴趣的:(微机原理)