8259A可编程中断控制器
8259A的功能
1.功能
Intel 8259A 是与8086系列CPU兼容的可编程中断控制器,它的主要功能为:
(1)具有8级优先权控制,级连可扩展至64级。
(2)每一级中断都可以屏蔽或允许。
(3)在中断响应周期,8259A可提供相应的中断向量号(中断类型号)。
(4)8259A的工作方式,可通过编程来进行选择。

D0~D7: 接了数据总线缓冲器,来实现8259和8086的数据交换
A0:片内寻址,对应2个端口,接8086的地址线,从而实现了8086地址输出的不同,来访问的端口不同。8086的A0 不能接 8259A 的A0,因为8086的 A0 是区分奇偶体
中断请求寄存器(IRR):对应8个中断,IR0~IR7,谁请求对应的编号设置成1,其余写成0
中断服务寄存器:对应正在执行哪个中断,如果发生多个 '1',正在进行中断嵌套。
中断请求寄存器通过 优先权电路(FR) 来判定优先权
中断屏蔽寄存器:控制8个中断是否打开,为1屏蔽,为0打开。
8259A的引脚

8259A的工作原理
当系统通电后,首先应对8259A初始化。(由CPU执行一段程序,向可编程芯片写入若干命令字,规定其工作状态,使其处于准备就绪的状态。)
8259A对外部中断请求处理过程如下:
(1) 当有IR0~IR7变 高,则IRR的相应位置1。
(2) 若中断请求线中至少有一条是中断允许的(判断IMR对应的中断是否为打开状态),则由 INT 引脚向CPU发出中断请求。
(3) 若CPU处于开中断状态,则在当前指令执行完后,用INTA信号作为响应。
(4) 8259A接到INTA后,使最高优先权的ISR位置1,而相应的IRR位复位。在此周期中,8259A不向系统数据总线送任何内容。
(5) 在中断响应周期的第二个信号期间8259A向数据总线输送一个8位指针(向量号或类型号),CPU读取此类型号,类型号*4作为地址就可从中断向量表中取出中断服务程序入口地址。
(6) 若8259A工作在自动结束中断AEOI方式(Automatic End Of Interrupt),在第二个INTA结束时,使中断源在ISR的相应位复位。否则,直至中断服务程序执行到EOI命令,才使ISR的相应位复位。
8259A的编程
8259A的编程分两部分:
(1)初始化编程
由CPU向8259A送2~4字节的初始化命令字ICW
(2)工作方式编程
由CPU向8259A送三个字节的工作命令字OCW,以规定8259A的工作方式。该命令字可在8259A初始化命令字ICW后的任何时间写入。
8259A的初始化编程
8259A的初始化命令字共4个(ICW1~ICW4)
设置过程如图:

⑴ 写初始化命令字ICW1——芯片控制字(多片使用的时候需要写入 ICW3)

(2)写初始化命令字ICW2——中断类型控制字( 中断类型码 )
用来定义中断类型码的高5位

(3) 写初始化指令字ICW3—主/从片初始化(级连控制字)

(4)写初始化命令字ICW4——方式控制字
对于8086/8088系统是必须设置的初始化命令字

8259A的操作命令字
三个操作命令字OCW1~OCW3。
在设置操作命令字时,顺序上没有严格的要求,但端口地址上有严格的规定。
OCW1必须写入奇地址端口(A0=1)
OCW2和OCW3必须写入偶地址端口(A0=0)
⑴ 操作命令字OCW1 —屏蔽操作命令字
用来设置或清除对中断的屏蔽(设置IMR的值)

(2) 操作命令字OCW2——中断方式命令字
设置优先级循环和中断结束方式

(3) 操作命令字OCW3——状态操作命令字
设置和撤销特殊屏蔽方式、设置中断查询方式、
设置对8259A内部寄存器的读出命令

8259A的工作方式
1.中断嵌套方式
(1)全嵌套方式
中断优先权是固定的,即IR0优先权最高,IR7优先权最低。
(2)特殊全嵌套方式——级连情况
当某一从片中断请求被响应后,主片不封锁从片的INT输入端,使该从片优先级更高的中断源的请求能得到响应。
中断优先级循环方式
⑴ 自动循环方式
当某一个中断源服务完以后,它的优先级变成最低的 。
(2) 特殊循环方式
设置IR5为最低优先权,则IR6的优先权就变为最高。
例如: 设置IR5为最低优先权,则IR6的优先权就变为最高。这时OCW2最高三位为110,而最低三位L2~L0应为101(最低优先权编码)。
中断屏蔽
8259A的8条中断请求线的每一条都可根据需要单独屏蔽,可通过写入OCW1的命令字来实现。
普通屏蔽方式:
允许比该优先级高的中断源申请中断,不允许同级或低级中断源申请中断。
特殊屏蔽方式:
屏蔽同级,允许级别比他高的或比他低的中断源申请中断。
中断结束命令
根据不同的工作方式8259A可以有几种不同的结束方法。
(1)自动中断结束方式(AEOI)
当某一级中断被CPU响应后,CPU送回第一个INTA中断响应信号,使ISR的相应位置1,当第二个INTA负脉冲结束时,自动将ISR的相应位置0。
(2)非自动中断结束方式(EOI)
中断返回前,必须用指令向8259A发中断结束命令,即使ICW4的D1=0。若级连,发2个。
首先将ICW4的D1=0,定为正常中断结束方式,然后用OUT向8259A的偶地址端口输出OCW2操作控制字(OCW2的D7D6D5=001),实现自动结束命令。
读8259A 的状态
8259A的IRR、ISR、IMR,通过OCW3来读取状态