Files

146 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 接口与通讯技术
- 8259A
- 中断管理
- 重点复习
create time: 2026-06-28 15:00
---
# 8259A 中断管理基础
## 概述
82C59A(8259A)是 x86 系统中最核心的中断管理芯片,在 3 套试卷中出现了 **6 道填空题**,是最高频考点。本专题聚焦填空题常考的四个核心知识点:单片管理级数、级联扩展、中断类型号传递机制以及中断号取值范围。
## 正文
### 1. 单片管理级数
一片 82C59A 内部有 **8 个中断请求输入引脚**(IR0 ~ IR7),因此单片最多管理 **8 级**中断。
| 引脚 | 编号 | 说明 |
|------|------|------|
| IR0 | 最高优先级 | 默认优先级最高 |
| IR1 ~ IR6 | 中间优先级 | 依次递减 |
| IR7 | 最低优先级 | 默认优先级最低 |
> [!tip] 记忆口诀
> "一片 59A 八个脚,IR 零到 IR 七,管理八级中断源。"
### 2. 级联扩展
多片 82C59A 可以通过级联方式扩展中断管理能力:
```mermaid
graph TB
subgraph 单片
A1["IR0~IR7"] --> A2["8 级中断"]
end
subgraph 两级级联
B1["主片 IR0~IR7"] --> B2["从片 1~8"]
B2 --> B3["每片从片 8 级"]
B3 --> B4["最多 64 级"]
end
```
| 配置 | 中断级数 | 说明 |
|------|:--------:|------|
| 单片 | **8 级** | IR0~IR7 全部直接使用 |
| 一主一从 | 15 级 | 从片占用主片 1 个 IR(8+8-1=15) |
| 两级级联(最多) | **64 级** | 主片 8 个 IR 各接一片从片,8×8=64 |
> [!important] 考试关键点
> "两级级联最多可管理 **64 级**中断"——这是理论最大值(8×8=64),不是实际可用值。实际一主一从只有 15 级(因为主片要留一个 IR 给从片)。
>
> > [!question] 思考题
> > 为什么理论最大是 64 级,而不是 8×7=56 级?
> >
> > 答:64 级是理想情况——主片 8 个 IR 各接一片从片(8×8=64),此时主片的所有 IR 都被从片占用,没有留给外部设备的中断引脚。如果主片还要留引脚给外部设备,则实际可用级数 = 8 + 外部引脚数×0 + 从片数×8,例如一主一从 = 7 + 8 = 15 级。
### 3. 中断响应:两个 INTA 脉冲
当可屏蔽中断被响应时,CPU 发出两个 **INTA(中断应答)负脉冲**,82C59A 在第二个脉冲中向 CPU 提供中断源的**中断类型号(中断号)**:
```mermaid
sequenceDiagram
participant CPU as "CPU"
participant PIC as "82C59A"
participant IVT as "中断向量表"
CPU->>PIC: "第一个 INTA 负脉冲"
Note over PIC: "锁定最高优先级中断<br/>ISR 对应位置 1<br/>IRR 对应位清 0"
PIC->>CPU: "无数据"
CPU->>PIC: "第二个 INTA 负脉冲"
PIC->>CPU: "中断类型号(8 位)"
CPU->>IVT: "类型号 × 4 → 查向量表"
IVT->>CPU: "CS:IP 中断服务入口"
```
> [!important] 两个 INTA 脉冲的区别
>
> | 脉冲 | 82C59A 的操作 | CPU 获得的数据 |
> |------|-------------|--------------|
> | **第一个 INTA** | 锁定优先级、更新 ISR/IRR | 无 |
> | **第二个 INTA** | 将中断类型号送上数据总线 | **中断类型号**(8 位) |
### 4. 中断号取值范围
8086 微机的中断系统为每个中断源分配一个**中断号(中断类型号)**,中断号为 8 位,取值范围为:
$$00H \sim FFH \quad (0 \sim 255)$$
共 **256** 个中断向量,每个向量占 4 字节(CS:IP),中断向量表位于内存最低端:
| 项目 | 值 |
|------|-----|
| 中断号范围 | 00H ~ FFH(0 ~ 255) |
| 向量表起始地址 | 00000H |
| 向量表大小 | 256 × 4 = 1024 字节 = 1KB |
| 向量表结束地址 | 003FFH |
| 向量地址计算 | 中断号 × 4 |
```mermaid
graph LR
A["中断号 N"] --> B["N × 4"]
B --> C["向量地址"]
C --> D["00000H + N×4"]
D --> E["4 字节: IP低 IP高 CS低 CS高"]
```
> [!example] 计算示例
> 中断号 08H 的向量地址 = 08H × 4 = **20H**,存放在 00020H~00023H 四个字节。
### 5. 中断类型号分布
| 中断号范围 | 用途 |
|----------|------|
| 00H~07H | 内部中断(除法错误、单步等) |
| 08H~0FH | 主 82C59A 管理的外部中断(IRQ0~IRQ7) |
| 70H~77H | 从 82C59A 管理的外部中断(IRQ8~IRQ15) |
| 10H~FFH | 软中断(INT n)及系统保留 |
### 6. 真题回顾
> [!example] 【真题】一片 82C59A 能管理\_\_\_\_\_\_级中断。
>
> **答案**:8
> [!example] 【真题】一片 82C59A 能管理 8 级中断,若采用级联方式,两级级联最多可管理\_\_\_\_\_\_级中断。
>
> **答案**:64
> [!example] 【真题】当可屏蔽中断被响应时,82C59A 在第二个中断响应负脉冲中,向 CPU 提供中断源的\_\_\_\_\_\_。
>
> **答案**:中断类型号(中断号)
> [!example] 【真题】8086 微机的中断系统为每个中断源分配一个中断号,中断号的取值范围是\_\_\_\_\_\_。
>
> **答案**:00H~FFH(0~255)
## 关联笔记
- [[82C59A中断结束方式]]
- [[IO端口编址方式]]
- [[82C37A DMA控制器]]
- [[接口与通讯技术/试题册/index|试题册索引]]