目录
一、8086/8088 中断系统
1. 8086/8088 中断源类型
2. 中断向量表
3. CPU 中断类型码的获取方法
二、8259A 的引线及内部结构
1. 外部引线
2. 内部结构
3. 与系统总线的连接方式
4. 级联连接方式
5. 中断触发方式
三、8259A 的工作过程
四、8259A 的工作方式
1. 中断优先级控制方式
2. 中断嵌套方式
3. 中断结束处理方式
4. 中断源屏蔽方式
五、8259A 的控制命令
1. 8259A 内部寄存器的寻址方式
2. 8259A 的初始化顺序
3. 8259A 的初始化命令字 ICW
4. 8259A 初始化编程
5. 8259A 操作命令字
6. 8259A 编程
六、中断程序设计概述
一、8086/8088 中断系统
1. 8086/8088 中断源类型
对内部中断来说,中断的控制完全是在 CPU 内部完成的;而对于外部中断,则是利用 CPU 的两条中断输入信号线 INTR 和 NMI 来告诉 CPU 已发生了中断事件。
(1)INTR 可屏蔽中断输入信号
CPU 能否响应 INTR 信号受到中断允许标志寄存器 IF 的控制:
- 当 IF = 1 时,CPU 在一条指令执行完后对 INTR 作出响应;
- 当 IF = 0 时,CPU 不予响应,该中断请求被屏蔽。
(2)NMI 非屏蔽中断请求输入信号
上升沿有效。NMI 不受标志位 IF 的约束,只要 CPU 在正常地执行程序,它就一定会响应 NMI 的请求。
2. 中断向量表
典例:将用户定义的中断服务程序入口地址放入向量表的方法。
题:将类型码为 48H 的中断服务子程序 TIMER 的中断向量放入向量表。
3. CPU 中断类型码的获取方法
(1)内部中断和 NMI 中断
此类中断没有 INTA 总线周期,中断类型码固定或者由指令给出。
(2)可屏蔽中断
二、8259A 的引线及内部结构
1. 外部引线
2. 内部结构
图示
3. 与系统总线的连接方式
(1)缓冲方式
(2)非缓冲方式
4. 级联连接方式
注意:图中 SP/EN 的连接只针对非缓冲方式。
5. 中断触发方式
(1)边沿触发方式
(2)电平触发方式
三、8259A 的工作过程
(2)综合当前中断服务寄存器 ISR 和中断屏蔽寄存器 IMR 的状态,找出最高优先权的中断请求,并且判断是否能够发出中断请求。若能则向 CPU 发出信号 INT,请求中断服务。
(3)在多级级联的情况下,主片收到第一个 INTA 脉冲后,通过 CAS2 ~ CAS0 发出从片编码。所有从片均将收到该编码,并且与自身编码进行比较。若相等,则该片在收到第二个 INTA 脉冲后发出中断类型码。
四、8259A 的工作方式
1. 中断优先级控制方式
(1)固定优先级方式
(2)自动循环优先级方式
(3)特殊循环优先级方式
用控制命令指定最低优先级的中断源。
2. 中断嵌套方式
(1)普通全嵌套方式
(2)特殊全嵌套方式
(3)对比
3. 中断结束处理方式
(1)自动中断结束方式
(2)正常中断结束方式
(3)特殊中断结束方式
主要用于特殊循环方式及特殊屏蔽方式下的中断结束,即当前执行的中断程序所对应的 ISR 中需要复位的位不一定是所有置 1 的优先级最高位。
(4)小结
不管是正常中断结束方式,还是特殊中断结束方式,在一个中断服务子程序结束时,对于级联使用的 8259A 都必须发两次中断结束命令,一次是发给主片的,另一次则是发给从片的。
4. 中断源屏蔽方式
(1)普通屏蔽方式
(2)特殊屏蔽方式
PPT:
五、8259A 的控制命令
8259A 是可编程中断控制器,在它工作之前,必须通过软件向其写入控制命令的方法来让它工作在人们所希望的状态下,这就是 8259A 的编程。控制命令分为:
- 初始化命令字 ICW(Initialization Command Word)
- 操作命令字 OCW(Operation Command Word)
写入 8259A 后被保存在内部的 ICW 和 OCW 寄存器组中。相应地,对 8259A 的编程也分为初始化编程和操作方式编程两个步骤:
- 初始化编程:由 CPU 向 8259A 送 2~4 个字节的初始化命令字 ICW。在8259A 工作之前,必须写入初始化命令字使其处于准备就绪状态。
- 操作方式编程:由 CPU 向 8259A 送 3 个字节的操作命令字 OCW,以规定 8259A 的操作方式。OCW 可在 8259A 初始化以后的任何时刻写入。
1. 8259A 内部寄存器的寻址方式
当对 8259A 进行写时,若 I/O 地址为奇数,则写的对象将包括 4 个寄存器(ICW2、ICW3、ICW4 和 OCW1),即一个 I/O 地址对应了 4 个寄存器,为了区分到底写入的是哪个寄存器,8259A 规定初始化的顺序必须严格按照规定的顺序依次写入,即根据顺序来区分不同的寄存器。
2. 8259A 的初始化顺序
3. 8259A 的初始化命令字 ICW
(1)ICW1:初始化字(确定写入字节数 2~4)
写 ICW1 意味着重新初始化 8259A,ICW1 决定了写几次寄存器,即写几个字节。
(2)ICW2:中断类型码
ICW2 为中断类型码寄存器,用于存放中断类型码。CPU 响应中断时,8259A 将该寄存器内容放到数据总线上供 CPU 读取。
初始化时只需设定中断类型码的高 5 位,低 3 位由 8259A 在中断响应时根据中断源的序号自动填入。
举例
(3)ICW3:级联控制字
ICW3 仅在多片 8259A 级联时需要写入。主片的 8259A 的 ICW3 与从片的 ICW3 在格式上不同。ICW3 应紧接着 ICW2 写入同一 I/O 地址中。
举例
(4)ICW4:方式命令字(主要完成主从设定)
ICW4 紧跟在 ICW3 之后写入同一 I/O 地址中。
缓冲方式与非缓冲方式:
4. 8259A 初始化编程
举例:以微型计算机中使用的单片 8259A 为例,试对其进行初始化设置。在微型计算机中,8259A 的 ICW1 和 ICW4 的端口地址分别为20H、21H。
初始化设置的程序段如下:
5. 8259A 操作命令字
(1)OCW1:中断屏蔽字
OCW1 用于决定中断请求线 IR 被屏蔽否。初始时为全 0(全部允许中断)。
(2)OCW2:中断结束和优先级方式控制字
OCW2 与 OCW3 共用一个端口地址,但其特征位 D4D3=00,因此不会发生混淆。
SL = 1,用于特殊循环优先级方式;SL = 0,用于普通循环优先级方式。
(3)OCW3:屏蔽方式和状态读出控制字
三大功能:
6. 8259A 编程
举例
两片 8259A 级联,提供 15 级向量中断。CAS2 ~ CAS0作为互连线,从片 8259A 的 INT 直接连到主片 8259A 的 IR2 上。
15 级向量中断:
编程
(1)主片 8259A 初始化编程
(2)从片 8259A 初始化编程
六、中断程序设计概述
(1)中断服务程序主体
(2)主程序设置中断向量