lIntel 8259中断控制器是集合中断源识别、中断屏蔽、中断优先权排队、中断类型号提供等功能的,专用于微机系统INTR类中断管理的大规模集成电路芯片。
8259A的主要功能:
- 中断源管理:单片8259可管理8级中断,最多可扩展管理64级,主从式的中断管理
- 中断类型号:当8259中断响应时,可提供相应的中断类型号,中断类型号可以是由用户设定的8个连续类型号。
- 中断屏蔽管理:8259对任何一级中断源可屏蔽/允许
- 中断优先管理: 8259可选择多种中断优先权排队模式。 8259可以通过编程设定各种工作方式
8259A 引脚以及结构

1. 引脚信号
-
D7~D0 :双向数据总线,用于与 CPU 传送命令、状态和中断类型号。(Data Bus lines)
-
A0 :地址线,接系统地址总线,用于选择内部寄存器。(Address line)
-
:片选信号,由高位地址译码产生。 (Chip Select)
-
、
:读、写控制信号,配合 A0、CS 完成寄存器访问。(Read、Write)
-
INT:中断请求输出,接 CPU 的 INTR 引脚。(Interrupt)
-
:中断响应输入,接收 CPU 发出的两个负脉冲。(Interrupt Acknowledge)
-
IR0~IR7:8 级中断请求输入,可设为边沿或电平触发。(Interrupt Request lines)
-
CAS0~CAS2:级联总线,主从片通信用。主片为输出,从片为输入。(Cascade lines)
-
、
:双功能引脚。非缓冲方式下作输入,主片接高电平,从片接地;缓冲方式下作输出,控制数据总线缓冲器。 (Slave Program / Enable)
非缓冲方式:直接连到 CPU 的系统数据总线
缓冲方式:不再直连系统总线,而是先连到一个双向总线收发器上(如 74LS245),再由收发器连到系统数据总线。

2. 内部结构组成
-
中断请求寄存器(IRR) :存放来自外设的中断请求信号IR0~IR7。有上升沿和"高电平"电平触发两种触发方式。高电平状态须保持到第一个中断响应信号**
** 变为有效后,否则将丢失中断请求信号。
-
中断屏蔽寄存器(IMR):存放中断屏蔽字,若某位置为1 则屏蔽对应 IR 请求。
-
优先级分析器(PR):选出 IRR 中未被屏蔽的最高优先级请求,将优先级最高的中断服务送入ISR。
- 根据CPU送入命令定义或修改IR0~IR7优先级。默认IR0最高(0级)、IR7最低(7级),可通过软件修改。
- 多个中断请求同时出现,分析哪个中断优先级最高。
- 判别是否可进入多重中断,即新中断源的优先级是否高于正在处理的中断级。
- 当一个中断请求被判别为较高优先级,通过控制逻辑向CPU发出中断请求信号INT。当CPU响应中断获得响应信号INTA#,使ISR相应位置为1 。
- 中断服务寄存器(ISR):记录当前正在被服务的中断级,被响应后对应位置为1。
- 当CPU正为某个中断源服务时,8259A使ISR中相应位置为1 ,当ISR为全0时,表示CPU正在执行正常的主程序,无任何中断服务。
- 如果有新的中断申请,当前服务的中断要发回PR重新进行中断优先级比较,所以ISR和PR之间是双向数据线。
- 控制逻辑(Control Logic):接收 CPU 命令,完成时序控制。
- 将根据的请求向CPU发出中断请求信号INT,该信号连接到8086/8088 CPU 的可屏蔽中断INTR引脚;同时接收CPU的中断响应信号
,并作出相应的处理,如置位ISR 的相应位、释放中断类型码到总线D7~D0、清除INT信号等。
- 包含有4个初始化命令寄存器和3个操作命令寄存器,用于存放4个初始化命令字ICW1~ICW4和3个操作命令字OCW1~OCW3。
- 数据总线缓冲器:在读写逻辑的控制下实现CPU与8259A之间的信息交换.
8位三态双向缓冲器,通常和CPU 系统总线中的D7~D0相连接。
- 读/写控制逻辑 :根据CPU送来的读写信号(
、
)和地址信息(A0、
),通过数据总线缓冲器完成CPU对8259A的所有写操作和读操作。
8259A只有两个I/O 端口地址,由**
** 和A0输入的地址信息决定,一般**
**应连接到I/O 地址译码器的输出端,而A0端通常是和地址总线A0或A1相连接。
- 级联缓冲/比较器:存放和比较级联标识,主片向从片送出标识,从片比较相符时送出中断类型号。
为实现多片8259A的级联应用而设计。在级联应用中只有一片8259A为主片,其他均为从片,但最多不能超过9片(包括主片)。
级联时,主片要拿出几个 IR 引脚来连接从片的 INT 输出,这些被占用的引脚就不能再接普通中断源了。
总中断源数量 = 主片可用 + 从片可用
8−(N−1)+8(N−1)=7N+18−(N−1)+8(N−1)=7N+1
比如中断源有25个,就需要4个8259芯片。
主8259A在第一个响应周期内通过CAS0~2送出3位识别码,与此识别码相符的从8259A将在第二个
响应周期内释放中断类型码到数据总线,使CPU进入相应的中断处理程序。
工作方式

1. 触发方式 (ICW1 的 LTIM 位)
-
边沿触发:由低到高的上升沿触发,请求被 IRR 锁存,直到被响应。
-
电平触发:高电平有效,IRR 不锁存,请求信号必须保持到响应,否则会丢失中断。
2. 屏蔽方式

- 普通屏蔽方式:由 OCW1 写 IMR,置 1 则屏蔽对应中断。
允许比该优先级高的中断源申请中断,不允许同级或低级中断源申请中断。
-
特殊屏蔽方式:允许在服务某级中断时,动态开放对低级中断的响应。
- 先通过 OCW3 设为特殊屏蔽(ESMM=1, SMM=1),再修改 IMR 屏蔽当前高级中断,此时 ISR 屏蔽作用被忽略。低级中断完成后需恢复。
屏蔽同级,允许级别比他高的或比他低的中断源申请中断。
3. 优先级管理方式

-
完全嵌套方式:固定优先级 IR0 最高、IR7 最低。ISR 某位置位后,同级及低级中断均被封锁。
-
特殊完全嵌套方式:主要用于级联的主片。允许同级中断请求(来自同一从片的更高优先级请求)打断当前服务。
-
自动循环优先级:某级服务结束后自动降为最低,相邻高一级变为最高。
-
指定循环优先级:通过 OCW2 指定最低优先级,其余顺次排列。
-
查询方式:CPU 写 OCW3(P=1)后读 A0=0 端口,获得最高优先级请求。此时不使用 INT 引脚。
4. 中断结束方式(EOI)

-
自动结束(AEOI) :在第二个
脉冲结束时自动清除 ISR 对应位。可能引发重复中断或同级嵌套,一般不用于全嵌套系统。
-
非自动结束(EOI):需程序发结束命令。
-
普通 EOI:自动清除当前 ISR 最高优先级位。
-
特殊 EOI:由 L2~L0 指定清除 ISR 哪一位。
-
自动循环 EOI:清除当前最高优先级位,并将其优先级降为最低。
-
特殊循环 EOI:清除指定 ISR 位,并将该优先级降为最低。
-
5. 连接系统总线方式
-
非缓冲方式:SP/EN 作输入,决定主/从。
-
缓冲方式:SP/EN 作输出使能,主/从由 ICW4 的 M/S 位确定。
中断响应过程
1. 单片或非级联响应步骤
① 外设通过 IRi 发出请求,8259 将 IRR 对应位置 1。
② 经过 IMR 屏蔽及优先级分析,若条件满足,8259 由 INT 引脚向 CPU 发中断请求。
③ CPU 若 IF=1 且当前指令执行完,发出两个 脉冲作为响应。
④ 第一个 脉冲 :8259 冻结优先级,清除被选中的 IRR 位,置位对应的 ISR 位(禁止同级及低级中断)。边沿触发下请求被清除。若级联,主片还在 CAS 上送出从片标识。
⑤ 第二个 脉冲 :8259(或选中的从片)将 8 位中断类型号送上数据总线,CPU 读取后自动保护现场,转入中断服务程序。若 AEOI=1,此时 ISR 位自动清零。
⑥ 中断服务程序结束时,需发 EOI 命令(若非 AEOI)清除 ISR 位,开放后续中断。
2. 中断类型号形成
上图左部分多框了一位
-
由 ICW2 的高 5 位作基值,低 3 位由请求引脚 IR0~IR7 的编码自动填入。
-
CPU 将类型号 n×4 得中断向量表地址,取出服务程序入口 CS:IP。
编程
1. I/O 端口寻址
| A0 | 操作 | 写入(WR) | 读出(RD) |
|---|---|---|---|
| 0 | 偶地址 | ICW1, OCW2, OCW3 | IRR, ISR (先写 OCW3 选择), 查询字 |
| 1 | 奇地址 | ICW2~ICW4, OCW1 | IMR |
特征位区分:
-
A0=0, D4=1 → ICW1
-
A0=0, D4=0, D3=0 → OCW2
-
A0=0, D4=0, D3=1 → OCW3
-
A0=1 → ICW2、ICW3、ICW4、OCW1(按顺序及写入时刻区分)
2. 初始化命令字(必须按顺序写入)

ICW1 (A0=0,D4=1):中断请求信号,单片和级联的选择
|---|---|---|---|------|---|------|-----|
| | | | 1 | LTIM | | SNGL | IC4 |
-
D3(LTIM):1 电平触发,0 边沿触发。
-
D1(SNGL):1 单片使用,0 级联。
-
D0(IC4):1 需要写入 ICW4,0则无需写入 ICW4。

ICW2 (A0=1):设置对应的中断类型码
|---|---|---|---|---|---|---|---|
| T | T | T | T | T | | | |
- 高 5 位为中断类型号基值,低 3 位由用户编程时写入,基于𝑰𝑹_𝟎~𝑰𝑹_𝟕的引脚序号自动形成,初始化的时候无需设值。

为什么 08H ~ 0FH 都行?
已知硬盘接在 IR5 ,要求其中断类型码为 0DH (即
00001101)。设 ICW2 写入值为
X,则:
中断类型码=(X 的高 5 位)×8+5=0DH中断类型码=(X 的高 5 位)×8+5=0DH解出高 5 位对应的基值 =
0DH - 5 = 08H,即 基值必须是 08H。
08H的二进制是00001 000,高 5 位是00001。观察:08H = 00001 000
09H = 00001 001
0AH = 00001 010
0BH = 00001 011
0CH = 00001 100
0DH = 00001 101
0EH = 00001 110
0FH = 00001 111
高 5 位都是**
00001**,只有低 3 位在变化。而 8259A 在形成中断向量时,不会看低 3 位,会用 IR5 的编码
101强制替换。因此,只要写入的值高 5 位为
00001,即08H ~ 0FH 中的任何一个,效果完全一样。
ICW3 (A0=1,仅级联时写入):主/从片初始化命令

-
主片:哪根 IR 引脚接有从片,对应位写 1(如 IR2 接从片,写 04H,直接映射,即D2=1)。
-
从片:D2~D0(ID0~ID2)表示该从片连到主片哪根 IR 线(如连在 IR2,写 02H,二进制映射,即D1=1)。


在传统的 IBM PC/AT 架构中:
主片 8259A 占用 I/O 地址:
20H(命令端口)、21H(数据/掩码端口)从片 8259A 通常占用:
0A0H(命令端口)、0A1H(数据/掩码端口)这里
21H是主片的数据端口 (用于写 ICW2、ICW3、ICW4 以及 OCW1)。
0A1H是从片的数据端口(类似作用)。这里为了支持第二个从片,硬件设计时通常会把第二个从片映射到 0A2H(命令)/ 0A3H(数据),即+2。
ICW4(A0=1,当 ICW1 的 IC4=1):设定8259A在级联方式下的优先级管理方式
|---|---|---|------|-----|-----|------|-----|
| 0 | 0 | 0 | SFNM | BUF | M/S | AEOI | μPM |
- D4(SFNM):1 特殊完全嵌套,0 普通完全嵌套。

-
D3(BUF):1 缓冲方式,0 非缓冲方式。
-
D2(M/S):1 主片,0 从片。
-
D1(AEOI):1 自动中断结束,0 非自动结束中断方式。
**非自动结束中断方式:**需要软件在中断服务程序结束前发送清ISR对应位的命令,具体是正常清ISR中最高置1位还是清ISR中的指定位由后续具体的操作命令字OCW2来决定。这种方式下如果不通过软件来清ISR对应位,则8259A会一直处于等待状态。
- D0(μPM):1 8086/8088 模式(>=16位微机),0 8080/8085 模式(8位微机)。

3. 操作命令字
OCW1 (A0=1):设置中断源的屏蔽状态,即对8259A内的中断屏蔽寄存器IMR中的各位进行动态地置1或复0操作选择(直接映射)。
|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 𝑴****𝟕 | 𝑴****𝟔 | 𝑴****𝟓 | 𝑴****𝟒 | 𝑴****𝟑 | 𝑴****𝟐 | 𝑴****𝟏 | 𝑴****𝟎 |
- 𝑴𝒙=𝟏,表示𝑰𝑹𝒙被屏蔽
- 𝑴𝒙=0,表示𝑰𝑹𝒙****不被屏蔽

OCW2(A0=0, D4=0, D3=0):设置中断结束方式和修改中断优先级管理方式。
|---|----|-----|---|---|----|----|----|
| R | SL | EOI | 0 | 0 | L2 | L1 | L0 |
-
R:1表示循环优先级;0表示固定优先级。
-
SL:1表示L2~L0有效,0表示L2~L0无效。
-
EOI:1表示发送非自动结束中断结束命令;0表示该命令与中断结束命令无关,是设置优先级的命令。
-
SL=1时,L2~L0 对应R、EOI的定义:
R EOI=10 设定循环优先级最低位;
R EOI=01 指定清除ISR的位;
R EOI=11 先清除指定的ISR位,再以设定循环优先级最低位。
OCW3(A0=0, D4=0, D3=1)
|---|------|-----|---|---|---|----|-----|
| | ESMM | SMM | 0 | 1 | P | RR | RIS |
- D6(ESMM)、D5(SMM):置/复位特殊屏蔽方式。
ESMM=1为允许特殊屏蔽方式;
SMM=1为特殊屏蔽方式。
- D2(P):1 发送查询命令,下次读 A0=0 端口可得查询字。
P=1为查询工作方式,此时读出的端口值D7位为1表示有中断,D0到D2用来表示哪一根引线有中断源。
-
D1(RR):读IRR控制,1为IRR;0为ISR
-
D0(RIS):读ISR控制,1为允许;0为禁止
级联
-
主片 INT 接 CPU 的 INTR,从片 INT 接主片的某根 IR 线。
-
主片需设为特殊完全嵌套(SFNM=1),以保证从片内部多级中断的正常嵌套。
-
中断响应时,主片在第一个 INTA 期间通过 CAS0~CAS2 送出从片标识,对应从片在第二个 INTA 将自身的中断类型号送上数据总线。
-
从片送出的中断类型号由其自身的 ICW2 决定,而不是主片 ICW2。
-
结束级联中断时,需向从片和主片各发一次 EOI 命令(自动结束方式除外)。

