Files
final-exam/接口与通讯技术/复习文档/8259A中断控制器.md
T

7.3 KiB
Raw Blame History

tags, create time
tags create time
接口与通讯技术
8259A
中断控制器
可编程芯片
2026-06-26 23:05

8259A 中断控制器

概述

8259A 是 Intel 公司生产的可编程中断控制器(Programmable Interrupt Controller, PIC),在全部 4 套试卷中均有出现。它负责管理和控制 8086 系统中的外部中断请求,支持 8 级优先级中断,可通过级联扩展。本芯片的知识点主要集中在 初始化命令字(ICW)编写、中断响应过程 和 优先级管理 三个方面。

[!tip] 考试要点

  • ICW 写入顺序:ICW1 → ICW2 → ICW3(可选)→ ICW4(可选)
  • ICW2 与中断类型码的关系
  • 中断响应时序:两个 INTA 脉冲期间 8259A 做了什么
  • 全嵌套方式的优先级规则

正文

1. 8259A 的核心功能

graph TB
    A["IR0~IR7 中断请求输入"] --> B["8259A"]
    B -- "INT" --> C["CPU"]
    C -- "INTA" --> B
    B -- "中断类型码 D0~D7" --> C
    B --> D["优先级判别器"]
    B --> E["中断屏蔽寄存器 IMR"]
    B --> F["中断服务寄存器 ISR"]
    B --> G["中断请求寄存器 IRR"]
寄存器 缩写 功能
中断请求寄存器 IRR 记录哪些 IR 引脚有中断请求(8 位,对应 IR0~IR7)
中断屏蔽寄存器 IMR 某位=1 则屏蔽对应 IR 的中断请求(通过 OCW1 设置)
中断服务寄存器 ISR 记录当前正在被服务的中断(用于嵌套管理)
优先级判别器 PR 从 IRR 中未被 IMR 屏蔽的请求里选出最高优先级

[!question] IRR、IMR、ISR 三者如何协作?

  1. 外设在 IRi 引脚产生中断请求 → IRR 对应位置 1
  2. IMR 检查该位是否被屏蔽(=1 则忽略)
  3. 未屏蔽的请求送入 PR 进行优先级判别
  4. 若当前无更高优先级中断正在服务(查 ISR),则 8259A 向 CPU 发出 INT 信号

2. 初始化命令字(ICW)

8259A 有 4 个初始化命令字,必须按顺序写入:

graph LR
    A["ICW1 写入偶地址"] --> B["ICW2 写入奇地址"]
    B --> C{"需要级联?"}
    C -- "是" --> D["ICW3 写入奇地址"]
    C -- "否" --> E{"需要 ICW4?"}
    D --> E
    E -- "是" --> F["ICW4 写入奇地址"]
    E -- "否" --> G["初始化完成"]
    F --> G

ICW1(偶地址端口,A0=0)

D7 D6 D5 D4  D3     D2 D1 D0
[A7 A6 A5] 1 [LTIM] [SNGL] [IC4]
              0=边沿  0=级联  0=不需要ICW4
              1=电平  1=单片  1=需要ICW4

[!info] ICW1 标志位 D4 位 固定为 1,这是识别 ICW1 的标志。写入时 A0 必须为 0(偶地址端口)。

ICW2(奇地址端口,A0=1)

ICW2 提供 中断类型码的高 5 位(T7~T3),低 3 位由 8259A 自动填入 IR 编码。

中断类型码 = T7 T6 T5 T4 T3 [IR2 IR1 IR0]
                              ↑ 自动填充

[!example] ICW2 计算示例 要求:IR0IR7 对应中断类型码 80H87H

80H = 1000 0000B,高 5 位 = 10000

ICW2 = 80H

验证:IR0 → 80H, IR1 → 81H, ..., IR7 → 87H ✓

ICW3(奇地址端口,仅级联时需要)

  • 主片:某位=1 表示对应 IR 引脚连接了从片
  • 从片:低 3 位表示从片的 INT 输出接到主片的哪个 IR 引脚

ICW4(奇地址端口,按需)

D7 D6 D5  D4        D3 D2    D1      D0
 0  0  0  [SFNM]   [BUF]  [M/S]   [uPM]
           0=普通    0=非缓冲 0=从片   0=8080/8085
           1=特殊全嵌套 1=缓冲 1=主片   1=8086/8088

[!warning] 8086 系统中 ICW4 必须写 8086/8088 系统下,ICW4 的 D0=1(uPM=1,表示 8086 模式)是必须的。考试中常见最小初始化序列为:ICW1 → ICW2 → ICW4。

3. 操作命令字(OCW)

8259A 有 3 个操作命令字,在初始化完成后的工作过程中写入:

OCW 端口 功能
OCW1 奇地址 (A0=1) 设置中断屏蔽字(直接写入 IMR)
OCW2 偶地址 (A0=0) 控制中断结束方式和优先级轮换
OCW3 偶地址 (A0=0) 设置特殊屏蔽、读寄存器命令

[!info] EOI 命令 OCW2 中的 EOI(End of Interrupt) 命令用于在中断服务程序结束时清除 ISR 中对应的位:

  • 普通 EOI:OCW2 = 20H(非自动 EOI 模式下必须手动发送)
  • 特殊 EOI:指定要清除的 ISR 位

4. 中断响应过程

sequenceDiagram
    participant P as "外设"
    participant I as "8259A"
    participant C as "CPU"
    P->>I: "IRi 引脚产生中断请求"
    Note over I: "IRR 对应位置 1"
    Note over I: "PR 判别优先级"
    I->>C: "INT = 1"
    C->>I: "第一个 INTA 脉冲"
    Note over I: "ISR 对应位置 1, IRR 对应位清 0"
    C->>I: "第二个 INTA 脉冲"
    I->>C: "送出中断类型码 (D0~D7)"
    Note over C: "根据类型码查向量表, 跳转 ISR"

[!warning] 两个 INTA 脉冲的作用不同

  • 第一个 INTA:8259A 内部操作(置 ISR、清 IRR),CPU 此时还未获取类型码
  • 第二个 INTA:8259A 将中断类型码送上数据总线,CPU 读取后计算向量表地址

5. 中断向量表

8086 的中断向量表位于内存最低地址 00000H~003FFH(共 1KB),可存放 256 个中断向量。


中断向量地址 = 中断类型号 \times 4

每个向量占 4 字节:低 2 字节 = IP,高 2 字节 = CS。

graph LR
    A["类型号 N"] -- "x4" --> B["向量地址 N*4"]
    B --> C["IP 低字节"]
    B --> D["IP 高字节"]
    B --> E["CS 低字节"]
    B --> F["CS 高字节"]

6. 优先级管理方式

方式 特点 适用场景
全嵌套(默认) IR0 最高 → IR7 最低,固定不变 大多数应用
自动轮换 服务完的中断降为最低优先级 公平服务
特殊全嵌套 允许同级中断嵌套 级联系统的主片

[!question] 全嵌套方式下,IRQ5 正在服务,哪些中断可以打断它? 答:只有优先级更高的 IRQ0~IRQ4 可以打断。IRQ6 和 IRQ7 必须等待 IRQ5 服务完成后才能获得响应。

7. 级联扩展

配置 中断级数 说明
单片 8259A 8 级 IR0~IR7
一主一从级联 15 级 从片占用主片 1 个 IR 端口(8+8-1=15)

8. 典型初始化程序

; 8259A 初始化示例
; 端口地址:20H(偶地址,A0=0),21H(奇地址,A0=1)
; 中断类型码:80H~87H

; ICW1:边沿触发,单片,需要 ICW4
MOV AL, 13H
OUT 20H, AL

; ICW2:中断类型码基址 = 80H
MOV AL, 80H
OUT 21H, AL

; ICW4:8086 模式,非自动 EOI
MOV AL, 03H
OUT 21H, AL

; OCW1:设置中断屏蔽字(可选)
MOV AL, 00H          ; 允许所有中断
OUT 21H, AL

[!example] 中断服务程序模板

INT_ISR PROC FAR
    PUSH AX              ; 保护现场
    PUSH BX
    ; ... 中断处理逻辑 ...
    MOV AL, 20H          ; 普通 EOI 命令
    OUT 20H, AL          ; 发送到 8259A
    POP BX               ; 恢复现场
    POP AX
    IRET                 ; 中断返回
INT_ISR ENDP

关联笔记