vault backup: 2026-06-28 14:53:55
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
---
|
||||
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|试题册索引]]
|
||||
Reference in New Issue
Block a user