12 可编程中断控制器
作者:
MingXiao
12.1 中断
作用
- 使CPU和外设在部分时间并行工作,提高CPU效率
- 便于实时数据处理
- 便于发现故障和处理
- 调用中断例程,方便程序编写
外部中断
- 不可屏蔽中断(NMI),如I/O校验位错误,掉电等紧急事件,不受
IF=0的影响 - 可屏蔽中断由8259A的
INT引脚输出,连接到CPU的INTR,受IF=0的屏蔽
中断优先级
由高到低为
- 除法错(
INT 0),INT N(N号中断),INTO(溢出错误),都是内部中断 - NMI
- INTR
- 单步中断
-t
中断嵌套
当CPU正在处理中断时,有更高优先级的中断被挂起,CPU产生中断嵌套;深度没有限制,但是有堆栈的物理限制

如何实现?
- 进入中断后硬件会自动关闭中断
- 此时需要使用
STI指令打开中断,才能嵌套 - 中断结束时,用
EOI指令结束中断,用IRET返回到上一级中断/原程序
12.2 8259A的结构和功能

IR7-IR0:8级中断请求输入,优先级为IR0 - IR7,多片8259A级联时,从片的INT连接到IRiINT:高电平有效,连接到CPU的INTRINTA:中断响应应答输入,接收到CPU第二个INTA信号时将最高级别的中断请求码送出A0:决定IO地址CAS2-CAS0:级联信号引脚,主片输出,从片输入SP/EN:非缓冲下,主片为1,从片为0;缓冲模式,EN作为外部数据总线缓冲器的启动信号缓冲模式:多片时大部分工作于此,少部分可以非缓冲
8259A内部存在4个8bit寄存器,分别是
- 中断请求寄存器(IRR),当外部
IRi存在请求时,对应的位置为1,响应完为0,可以允许多个中断请求 - 中断屏蔽寄存器(IMR),存放屏蔽信息,当对应位置为
1时,不响应IRi - 中断服务寄存器(ISR),保存正在处理的中断,
IRi被处理时,对应位置为1;多重中断时多个位置为1 - 优先级判决器(PR,resolver),判断
IRi的优先级,还会判断新的中断能否打断正在执行的中断
由8259A引入的中断类型码
一共8个8bit中断类型码,其中D7-D3由用户编程决定,D2D1D0由IRi决定
8259A设置优先级的方式
- 全嵌套方式
IRi具有固定的优先级,初始化后默认进入此方式- 中断响应后,ISR对应的bit置
1,保持到终端结束,即使有嵌套,类型码N由DataBus送入CPU
- 中断响应后,ISR对应的bit置
- CPU发出
EOI指令,对应的ISR复位(置0);也有自动中断命令AEOI,看芯片设置 - 高级中断可以嵌套在低级中断中
- 特殊嵌套方式:允许同级中断嵌套
中断屏蔽方式
使用
CLI指令屏蔽所有可屏蔽中断开中断时,存在两种屏蔽方式
- 普通屏蔽:将IMR中的对应位置
1 - 特殊屏蔽:仅屏蔽本级中断,其他不屏蔽,不允许同级嵌套
- 普通屏蔽:将IMR中的对应位置
优先权管理
- 固定优先级:固定
IR0-IR7的优先级- 全嵌套方式:高级中断可以嵌套在低级中断中
- 特殊嵌套方式:允许同级嵌套
- 循环优先级:圆周循环,轮流处于最高优先级
- 自动循环方式:当前中断结束后自动变为最低,下一级变为最高,沿用了
IR0-IR7的优先级排序 - 特殊循环方式:由编程决定优先级,也会循环
- 自动循环方式:当前中断结束后自动变为最低,下一级变为最高,沿用了
- 固定优先级:固定
中断结束方式
- 自动中断结束(AEOI):第二个中断响应周期下降沿,ISRi置0
- 正常中断结束(EOI):CPU发出EOI指令,将ISRi置0
- 特殊中断结束(SEOI):CPU发送指定的ISRi置0
- 一般中断结束(SEOI):8259A自动选择ISRi置0
12.3 编程控制:初始化命令字
初始化命令字是ICW1-ICW4,对8259A初始化,其中ICW3只在级联时使用
8259A一共有两个端口,根据A0的不同分为奇偶地址口,分别是**21H/20H(在XT机中)**
ICW1

ICW2
紧跟ICW1写入,但是是奇地址

其中
T7-T3用于确定中断类型码的D7-D3,如前文所述T2-T0=000,由IRi决定
ICW3
A0=1,只在级联时使用,主片从片的格式不同,要和硬件搭配

注意主/从片的SP/EN接法
ICW4
8086CPU必须设置,A0=1;无ICW3时紧跟ICW2,有就跟3

12.4 编程控制:操作命令字
没有规定写入顺序,但是写入端口有规定
OCW1写入奇地址,OCW2,OCW3写入偶地址
OCW1
也称中断屏蔽字,直接对IMR的各位进行操作

如果是直接更改
mov al, 11111101B
out 21H, al
如果是新增
in al, 21H
and al, 11111101B
out 21H, al
OCW2
设置优先级循环方式和中断结束方式

OCW3
