vault backup: 2026-06-28 14:53:55
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 8259A
|
||||
- 中断结束
|
||||
- EOI
|
||||
- 重点复习
|
||||
create time: 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 服务的中断源:
|
||||
|
||||
```mermaid
|
||||
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 中指定位 |
|
||||
|
||||
```asm
|
||||
; 普通 EOI 示例(中断服务程序末尾)
|
||||
MOV AL, 20H ; 非特定 EOI 命令
|
||||
OUT 20H, AL ; 发送到 82C59A(偶地址端口)
|
||||
IRET ; 中断返回
|
||||
```
|
||||
|
||||
### 4. 自动结束 vs 非自动结束
|
||||
|
||||
```mermaid
|
||||
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 工作于\_\_\_\_\_\_方式时,需要在中断服务完成后发中断结束命令。
|
||||
>
|
||||
> **答案**:非自动结束方式
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[8259A中断管理基础]]
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口与通讯技术/复习文档/8259A中断控制器]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
Reference in New Issue
Block a user