Files

3.7 KiB
Raw Permalink Blame History

tags, create time
tags create time
接口与通讯技术
8259A
中断结束
EOI
重点复习
2026-06-28 15:00

82C59A 中断结束方式

概述

82C59A 的中断结束方式(EOI,End of Interrupt)是中断管理的重要环节。在非自动结束方式下,必须在中断服务程序完成前手动发送 EOI 命令,否则中断级别将被永久屏蔽。本专题聚焦 EOI 命令的发送机制和工作方式的区别。

正文

1. 三种 EOI 方式对比

EOI 方式 说明 是否需要软件发 EOI
自动结束方式(AEOI) 第二个 INTA 脉冲后自动清除 ISR 中对应位 ✗ 不需要
非特定结束方式 软件发 EOI 命令,清除 ISR 中最高优先级的位 ✓ 需要
特定结束方式 软件发 EOI 命令并指定中断级别,清除 ISR 中指定位 ✓ 需要

[!important] 考试关键点 当 82C59A 工作于非自动结束方式时,需要在中断服务完成后发中断结束命令(EOI)。

后两种方式(非特定 EOI 和特定 EOI)统称为非自动结束方式。

2. 为什么需要 EOI?

82C59A 的 ISR(中断服务寄存器) 记录当前正在被 CPU 服务的中断源:

sequenceDiagram
    participant CPU as "CPU"
    participant PIC as "82C59A"
    participant ISR as "ISR 寄存器"
    CPU->>PIC: "响应中断"
    Note over ISR: "ISR[i] = 1<br/>(标记中断正在服务)"
    Note over CPU: "执行中断服务程序"
    CPU->>PIC: "发送 EOI 命令<br/>(OCW2 = 20H)"
    Note over ISR: "ISR[i] = 0<br/>(清除服务标记)"
    Note over PIC: "可以响应新的中断"

[!warning] 不发送 EOI 的后果 如果忘记发送 EOI 命令:

  1. ISR 中对应位不会被清除
  2. 82C59A 认为该中断仍在服务中
  3. 同优先级及更低优先级的中断将永远无法被响应
  4. 只有更高优先级的中断可以打断(全嵌套模式下)

3. EOI 命令的发送

EOI 命令通过 OCW2 写入偶地址端口(最小系统 = 20H):

EOI 类型 OCW2 值 二进制 说明
普通 EOI 20H 0010 0000 清除 ISR 中优先级最高的位
特定 EOI C0H + 级别 11xx x000 清除 ISR 中指定位
; 普通 EOI 示例(中断服务程序末尾)
MOV AL, 20H        ; 非特定 EOI 命令
OUT 20H, AL        ; 发送到 82C59A(偶地址端口)
IRET               ; 中断返回

4. 自动结束 vs 非自动结束

graph TD
    A["82C59A 中断结束"] --> B{"ICW4 的 AEOI 位"}
    B -- "AEOI=1<br/>自动结束" --> C["第二个 INTA 脉冲后<br/>自动清除 ISR 位<br/>无需软件干预"]
    B -- "AEOI=0<br/>非自动结束" --> D["需要软件发送<br/>EOI 命令清除 ISR"]
    D --> E["OCW2=20H → 20H端口"]
    style C fill:#dfd,stroke:#333,color:#000
    style D fill:#fdd,stroke:#333,color:#000

[!question] 思考题 自动结束方式既然如此方便,为什么还要用非自动结束方式?

答:自动结束方式在第二个 INTA 脉冲后立即清除 ISR 位,此时中断服务程序尚未执行完毕。如果此时有同级中断到来,可能会造成 ISR 状态混乱。非自动结束方式允许程序员在服务程序真正完成时才清除 ISR,更加可控和安全。

5. 真题回顾

[!example] 【真题】当 82C59A 工作于______方式时,需要在中断服务完成后发中断结束命令。

答案:非自动结束方式

关联笔记