462 lines
24 KiB
Markdown
462 lines
24 KiB
Markdown
# 第6章 输入输出 — 期末复习总结
|
||
|
||
---
|
||
|
||
## 一、详细内容分析
|
||
|
||
### 6.1 输入输出与接口概述
|
||
|
||
#### 6.1.1 接口与端口
|
||
|
||
- **输入输出(I/O)**:CPU(计算机主机)与外部设备之间的信息交换。
|
||
- **输入输出技术**:CPU 与外部设备之间的连接与信息交换技术。
|
||
- **接口(Interface)**:CPU 与外部设备之间的硬件连接逻辑及相应的控制软件。
|
||
- **接口技术**:完成 CPU 与外部设备之间连接及信息交换有关的软、硬件技术方法。
|
||
- **端口(Port)**:接口电路中那些完成信息传送、**可由程序寻址并进行读写操作的逻辑单元**(往往是寄存器)。
|
||
- 接口与端口不同:**接口是物理/逻辑的整体,端口是接口内可寻址的寄存器单元**。
|
||
- 同一个接口中通常包含三类端口:数据端口、状态端口、控制端口。
|
||
|
||
**为什么要使用接口(4 个原因)**:
|
||
1. 外设种类繁多,与 CPU 不能直接互联及信息交互;
|
||
2. 外部设备工作速度变化范围大,与 CPU 之间不匹配;
|
||
3. 外设信号类型不同(数字、模拟等),与 CPU 使用的数据类型不同;
|
||
4. 外设信息格式复杂(并行、串行等),与 CPU 使用的数据格式不一致。
|
||
|
||
#### 6.1.2 接口的功能
|
||
|
||
1. **地址译码或设备选择**:接口进行地址译码,产生设备选择信号,使微处理器与指定外设交换信息。
|
||
2. **数据缓冲和锁存**:数据总线是公共双向总线,所有设备分时复用,只允许被选中的设备在读/写周期内占用。
|
||
3. **信息格式与电平的转换**:转换外设与 CPU 之间在格式、信号类型、电平范围上的差异。
|
||
4. **数据传送的协调控制**:协调 CPU 与外设的传输通路逻辑及时间关系。
|
||
|
||
#### 6.1.3 接口的一般编程结构
|
||
|
||
I/O 接口的编程结构(即“从编程角度看到的接口”)由三类寄存器构成:
|
||
|
||
| 端口类型 | 作用 |
|
||
| --- | --- |
|
||
| 数据端口 | 存储输入/输出数据的寄存器 |
|
||
| 状态端口 | 存储设备或接口状态寄存器 |
|
||
| 控制端口 | 存放设备或接口控制信号的寄存器 |
|
||
|
||
**接口与 CPU 的连接信号**:
|
||
- 数据线:传输对各端口访问的信息;
|
||
- 地址线:对接口/端口寻址;
|
||
- 控制线:对接口/端口进行读写等控制。
|
||
|
||
**接口与外设的连接信号**:
|
||
- 数据线:传输数字量、模拟量、开关量;
|
||
- 状态线:传输外设的状态信号;
|
||
- 控制线:传输控制外设的令信号。
|
||
|
||
### 6.2 I/O 端口编址方式(标准知识补充)
|
||
|
||
8086/8088 CPU 采用 **独立编址(I/O 独立编址 / 端口编址)** 方式:
|
||
|
||
- **I/O 地址空间大小**:8086 提供 **16 位 I/O 地址**,共 **64K(65536)个 8 位端口**,可组成 32K 个 16 位端口。
|
||
- 地址范围:`0000H ~ FFFFH`。
|
||
- 使用专门的 I/O 指令 **IN/OUT** 与外设通信,与访问存储器的指令 **MOV** 等不通用。
|
||
- 引脚 `M/IO`(在 8088 上为 `M/IO`)区分访问对象:`=1` 访问存储器,`=0` 访问 I/O 端口。
|
||
|
||
**IN 指令格式**:
|
||
|
||
| 形式 | 语法 | 含义 |
|
||
| --- | --- | --- |
|
||
| 直接端口寻址 | `IN AL, n` 或 `IN AX, n` | 从端口 n 读 8/16 位数据 |
|
||
| 间接端口寻址 | `IN AL, DX` 或 `IN AX, DX` | 从 DX 所指端口读 8/16 位数据 |
|
||
|
||
**OUT 指令格式**:
|
||
|
||
| 形式 | 语法 | 含义 |
|
||
| --- | --- | --- |
|
||
| 直接端口寻址 | `OUT n, AL` 或 `OUT n, AX` | 将 AL/AX 写入端口 n |
|
||
| 间接端口寻址 | `OUT DX, AL` 或 `OUT DX, AX` | 将 AL/AX 写入 DX 所指端口 |
|
||
|
||
> 注:直接端口寻址时 n 为 8 位立即数,范围 0~255;DX 间接寻址时范围为 0~65535。
|
||
|
||
**两种编址方式对比**:
|
||
|
||
| 项目 | 独立编址(I/O 映射 / Port-mapped I/O) | 统一编址(内存映射 / Memory-mapped I/O) |
|
||
| --- | --- | --- |
|
||
| 地址空间 | I/O 端口与存储器各自独立编址 | I/O 端口占用存储器地址空间的一部分 |
|
||
| 访问指令 | 必须使用专用 IN/OUT 指令 | 可使用全部访存指令(MOV 等) |
|
||
| 优点 | 不占用存储器地址空间;I/O 程序与用户程序清晰分开;译码简单、速度快 | 寻址灵活;可用丰富指令;总线结构统一 |
|
||
| 缺点 | 需要专用 I/O 引脚与控制信号;指令少、功能弱 | 占用存储器地址空间;译码复杂;I/O 操作可能影响存储层次 |
|
||
| 典型代表 | 80x86(8086/8088)、MCS-51 | 6800/68000、MIPS、ARM(部分) |
|
||
|
||
### 6.3 输入输出控制方式(四种基本方式)
|
||
|
||
课件明确给出 **四种基本控制方式**:
|
||
1. **程序查询方式**(Polled I/O)
|
||
2. **程序中断方式**(Interrupt I/O)
|
||
3. **DMA 方式**(直接存储器存取)
|
||
4. **I/O 处理机方式**(IOP,I/O Processor)
|
||
|
||
#### 6.3.1 程序查询方式
|
||
|
||
程序查询方式又分为 **无条件传送方式** 和 **条件(查询)传送方式**。
|
||
|
||
**(1)无条件传送方式**
|
||
- 程序需要通过接口进行输入/输出时,**直接使用 IN/OUT 指令访问端口**,无需查询外设状态。
|
||
- 适用:始终处于就绪状态的外设(如开关、LED、简单机械)。
|
||
- 示例:
|
||
```asm
|
||
MOV AL, 12H ; 准备数据 12H
|
||
OUT 80H, AL ; AL 内容输出到端口 80H
|
||
```
|
||
- 端口 80H 中输出锁存器和输入缓冲器共用地址,由 RD/WR 信号区分访问哪个寄存器。
|
||
|
||
**(2)查询输入传送方式**
|
||
|
||
文字描述工作流程:
|
||
1. CPU 读状态端口(地址 E0H),取出状态字(D0 = 1 表示输入数据准备好);
|
||
2. 测试状态位 D0:若 D0 = 0(未就绪),继续返回步骤 1 循环查询;
|
||
3. 若 D0 = 1(就绪),CPU 读数据端口(地址 E2H),同时清除状态触发器(输入锁存器空);
|
||
4. 处理读到的数据,返回步骤 1,继续输入下一个数据。
|
||
|
||
典型查询输入程序段:
|
||
```asm
|
||
A1: IN AL, 0E0H ; 取状态字(状态在 D0 位)
|
||
TEST AL, 01H ; 测试状态位
|
||
JZ A1 ; D0=0 未准备好,继续查询
|
||
IN AL, 0E2H ; 读输入数据
|
||
; …… ; 数据处理
|
||
JMP A1 ; 返回继续查询,输入下一个数据
|
||
```
|
||
|
||
**(3)查询输出传送方式**
|
||
|
||
文字描述工作流程:
|
||
1. CPU 写数据端口(地址 E4H),输出数据并使状态触发器置 1(设备“忙”);
|
||
2. CPU 读状态端口(地址 E4H)取状态字;
|
||
3. 测试状态位 D0:若 D0 = 1(设备忙),继续查询等待;
|
||
4. 外设取走数据后回送 ACK,清状态触发器使 D0 = 0;
|
||
5. CPU 准备下一个数据,重复以上过程。
|
||
|
||
典型查询输出程序段:
|
||
```asm
|
||
MOV AL, 41H ; 数据 41H 送 AL
|
||
OUT 0E4H, AL ; 数据写入数据锁存器,状态触发器置 1
|
||
A1: IN AL, 0E4H ; 取状态字
|
||
TEST AL, 01H ; 测试状态位
|
||
JNZ A1 ; D0=1 设备忙,继续查询
|
||
MOV AL, 42H ; 下一个数据 42H 送 AL
|
||
OUT 0E4H, AL ; 下一个数据存入锁存器
|
||
; ……
|
||
```
|
||
|
||
**程序查询方式特点**:
|
||
- 适合外设速度慢、请求响应实时性要求不高、一次传输数据量不大、对 CPU 工作效率要求不高的场合;
|
||
- **CPU 与外设只能串行工作**,各外设之间也只能串行工作,CPU 利用率低。
|
||
|
||
#### 6.3.2 中断方式
|
||
|
||
**基本思想**:外设就绪时向 CPU 发中断请求 INTR,CPU 响应后转去执行 ISR(中断服务程序),完成一次数据交换后返回原程序。
|
||
|
||
**工作流程**:
|
||
1. 初始化:设置外设及接口,使其在就绪时能向 CPU 发中断请求;准备 ISR(含中断矢量表入口);设置相关状态标志;
|
||
2. CPU 执行主程序(不等待外设就绪,可并行工作);
|
||
3. 外设就绪时向 CPU 发中断请求(INTR);
|
||
4. CPU 响应中断(INTA 中断响应),保护现场,转入 ISR;
|
||
5. 在 ISR 中完成一次数据传送;
|
||
6. 如已完成全部传送,则关闭该中断;否则恢复现场、返回主程序继续运行;
|
||
7. 后续外设再次就绪,可再次触发中断。
|
||
|
||
**优点**:CPU 与外设可并行工作,提高系统效率;适合外设速度较慢、请求随机性、响应实时性要求较高、一次传输数据量不大的场合。
|
||
|
||
#### 6.3.3 DMA 方式
|
||
|
||
**为何引入 DMA**:中断方式仍需 CPU 执行 ISR(保护断点、切换上下文)来逐字节传送,对于高速大量数据效率仍低。
|
||
|
||
**DMA 操作**:DMA 控制器(DMAC)直接接管总线,**外设与存储器之间直接交换数据**,无需 CPU 介入。
|
||
|
||
**DMA 操作的三种基本方法**:
|
||
|
||
| 方法 | 含义 | 特点 |
|
||
| --- | --- | --- |
|
||
| CPU 停机方式 | DMAC 发 HRQ,CPU 让出地址、数据、部分控制总线 | DMAC 控制总线;CPU 暂停 |
|
||
| 周期扩展 | 由 DMAC 发出请求给时钟电路,加宽 CPU 时钟周期 | 一次只能传送一个字节 |
|
||
| 周期挪用 | 利用 CPU 不访问内存的周期进行 DMA 操作 | 不打断 CPU,CPU 与 DMA 并行 |
|
||
|
||
**DMA 控制器基本功能**(6 项):
|
||
1. 接收外设 DMA 请求,向 CPU 发总线请求 HRQ;
|
||
2. CPU 响应后(HLDA),DMAC 接管总线控制权;
|
||
3. 接管总线后向地址总线发送地址信号,并自动修改地址指针;
|
||
4. 在 DMA 传送期间,发出存储器或 I/O 接口的读/写控制信号;
|
||
5. 统计传送字节数,判断 DMA 传送是否结束;
|
||
6. 传送结束时向 CPU 发结束信号,将总线控制权交还给 CPU。
|
||
|
||
**DMA 传送的一般工作过程**(以存储器 → 外设为例,10 步):
|
||
1. 初始化外设接口与 DMAC,设置存储器起始地址、传送字节数等参数;
|
||
2. 外设就绪 → 接口向 DMAC 发 DMA 请求(DREQ);
|
||
3. DMAC 向 CPU 发总线请求(HRQ);
|
||
4. CPU 响应并发总线应答(HLDA),CPU 让出总线;
|
||
5. DMAC 向外设接口发 DMA 响应(DACK);
|
||
6. DMAC 把要读取的存储单元地址送到地址线;
|
||
7. DMAC 发读存储器信号(MEMR);
|
||
8. 存储器把数据送上数据线;
|
||
9. DMAC 发 I/O 写信号(IOW),将数据写入 I/O 接口;
|
||
10. DMAC 自动修改地址、字节计数器,判断是否传送结束;结束时撤销 HRQ,CPU 收回总线。
|
||
|
||
**适用场景**:外设速度快、一次传输数据量大(磁盘、网卡、声卡等高速外设)。
|
||
|
||
#### 6.3.4 I/O 处理机方式
|
||
|
||
- 为使 CPU 完全摆脱 I/O 管理,引入了 **I/O 处理机(IOP)** 概念。
|
||
- IOP 拥有自己的指令系统,可独立执行程序,承担全部 I/O 操作(如 Intel 8089,配合 8086/8088 使用)。
|
||
- IOP 与 CPU 程序并行执行,可独立形成外设所需控制命令与定时信号。
|
||
|
||
### 6.4 四种传送方式对比表(必背)
|
||
|
||
| 对比项 | 程序查询方式 | 程序中断方式 | DMA 方式 | I/O 处理机方式 |
|
||
| --- | --- | --- | --- | --- |
|
||
| 数据传送控制者 | CPU | CPU | DMAC | IOP |
|
||
| CPU 是否介入 | 完全介入 | 每次传送介入 | 不介入 | 不介入 |
|
||
| CPU 工作效率 | 最低(忙等) | 较高(可并行) | 最高 | 最高 |
|
||
| 数据传送单位 | 字(节) | 字(节) | 数据块 | 数据块/复杂 I/O |
|
||
| 传送速度 | 慢 | 中 | 快 | 快 |
|
||
| 适用场景 | 简单低速、外设始终就绪 | 中低速、随机请求 | 高速、大数据量 | 复杂系统、多外设 |
|
||
| 硬件代价 | 低(简单接口) | 中(中断控制器) | 高(DMAC) | 最高(IOP) |
|
||
| 并行性 | 无(CPU 与外设串行) | 高(CPU 与外设并行) | 高(CPU 仍工作) | 高(CPU/IOP 并行) |
|
||
|
||
### 6.5 可编程中断控制器 8259A
|
||
|
||
#### 6.5.1 8259A 的主要功能
|
||
|
||
1. 每片管理 **8 级优先权中断源**,通过级联最多管理 **64 级** 优先权中断源;
|
||
2. 每级中断可单独屏蔽(通过 IMR);
|
||
3. 向 CPU 提供可编程的中断类型码(对 8086~Pentium 即中断向量号);
|
||
4. 有多种工作方式,可通过编程选择;
|
||
5. 可与 8086~Pentium CPU 直接连接,不需外加硬件电路。
|
||
|
||
#### 6.5.2 内部结构
|
||
|
||
- **IRR**(Interrupt Request Register):保存 8 位中断请求信号;
|
||
- **ISR**(In-Service Register):保存正在被 CPU 处理的中断请求;
|
||
- **PR**(Priority Resolver):优先级分辨器,确定 IRR 中各位优先级,决定是否向 CPU 发 INT;
|
||
- **IMR**(Interrupt Mask Register / OCW1):中断屏蔽寄存器;
|
||
- 控制逻辑:发出 INT 与接收 INTA;
|
||
- 数据总线缓冲器、读/写逻辑、级联控制(CAS0~CAS2,SP/EN)。
|
||
|
||
**优先级(默认)**:**IR0 最高 → IR7 最低**。
|
||
|
||
**响应过程(两个 INTA 负脉冲)**:
|
||
- 第一个 INTA:IRR 锁存失效;ISR 对应位置 1;IRR 中对应位清 0。
|
||
- 第二个 INTA:将 ICW2 内容送 D7~D0,CPU 读取作为中断类型码;若 ICW4 的 AEOI = 1,则 ISR 对应位自动清 0。
|
||
|
||
#### 6.5.3 端口及读写控制
|
||
|
||
通过 CS、A0、RD、WR 组合区分读/写命令、读/写状态。
|
||
|
||
| CS | A0 | RD | WR | 功能 | 标志位 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 0 | 0 | 1 | 0 | 数据总线 → ICW1 | D4 = 1 |
|
||
| 0 | 0 | 1 | 0 | 数据总线 → OCW2 | D4D3 = 00 |
|
||
| 0 | 0 | 1 | 0 | 数据总线 → OCW3 | D4D3 = 01 |
|
||
| 0 | 1 | 1 | 0 | → OCW1 / ICW2 / ICW3 / ICW4 | — |
|
||
| 0 | 0 | 0 | 1 | 数据总线 ← IRR | OCW3:RR=1,RIS=0 |
|
||
| 0 | 0 | 0 | 1 | 数据总线 ← ISR | OCW3:RR=1,RIS=1 |
|
||
| 0 | 0 | 0 | 1 | 数据总线 ← 查询字 | 查询方式 |
|
||
| 0 | 1 | 0 | 1 | 数据总线 ← IMR | 直接读 |
|
||
|
||
> A0 = 0 偶地址,A0 = 1 奇地址。
|
||
|
||
#### 6.5.4 8259A 的工作方式(10 种)
|
||
|
||
| 序号 | 工作方式 | 含义 |
|
||
| --- | --- | --- |
|
||
| 1 | 全嵌套方式 | IR0 最高、IR7 最低的固定优先级;ISR 置位期间屏蔽同/低级;如 IF 开放可响应高级中断 |
|
||
| 2 | 循环优先级方式 | 自动循环:被服务的中断源自动降为最低;特殊循环:由编程指定某一中断源为最低 |
|
||
| 3 | 特殊屏蔽方式 | 仅屏蔽本级,其他全部开放(无论高低级均可中断) |
|
||
| 4 | 程序查询方式 | CPU 发查询命令(OCW3 中 P=1),8259A 回送查询字(I + W2W1W0) |
|
||
| 5 | 中断结束方式 | 自动 EOI(AEOI)或命令 EOI(普通 EOI / 特殊 SEOI) |
|
||
| 6 | 读 8259A 状态 | 读 IRR(OCW3:RR=1,RIS=0)/ ISR(RR=1,RIS=1)/ IMR(直接读) |
|
||
| 7 | 中断请求触发方式 | 边沿触发(LTIM=0)/ 电平触发(LTIM=1) |
|
||
| 8 | 缓冲器方式 | 8259A 与数据总线之间加驱动器;SP/EN 作输出 |
|
||
| 9 | 特殊的全嵌套方式 | 用于多片级连,从片的高级中断仍可申请中断 |
|
||
| 10 | 多片级联方式 | 1 个主片至多带 8 个从片,扩展至 64 级 |
|
||
|
||
**多片级联要点**:
|
||
- 主/从由 ICW4 的 M/S 位(缓冲方式下)或 SP/EN 引脚(非缓冲方式下 SP=1 主,SP=0 从)确定;
|
||
- 主片的 CAS0~CAS2 输出被响应的从片编号,从片接收并比对。
|
||
|
||
#### 6.5.5 8259A 的编程(命令字体系)
|
||
|
||
8259A 的命令字分两部分:
|
||
|
||
| 类别 | 数量 | 是否按序写入 | 用途 |
|
||
| --- | --- | --- | --- |
|
||
| 初始化命令字 ICW1~ICW4 | 4 | 按固定顺序写入 | 系统复位后设置基本工作方式 |
|
||
| 操作命令字 OCW1~OCW3 | 3 | 不按顺序 | 工作中可随时写入,动态控制 |
|
||
|
||
**(1)初始化命令字 ICW1(A0=0,写入偶地址)**
|
||
|
||
| D7 D6 D5 | D4=1 | D3=LTIM | D2 | D1=SNGL | D0=IC4 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| × × × | 1(标志) | 1=电平触发 / 0=边沿触发 | × | 1=单片 / 0=级联 | 1=需 ICW4 / 0=不要 |
|
||
|
||
**写入 ICW1 后 8259A 自动复位**:清 IMR、ISR;IRR 状态可读;优先级排队为 IR0 最高 IR7 最低;特殊屏蔽方式复位;自动 EOI 循环方式复位。
|
||
|
||
**(2)ICW2(A0=1)** — 设置中断类型码
|
||
- 高 5 位(T7~T3)由程序设定;
|
||
- 低 3 位(D2~D0)由 8259A 按引入中断请求的引脚 IR0~IR7 三位编码自动填入。
|
||
|
||
举例(课件原例):
|
||
- ICW2 = 80H = 1000 0000B → IR3 的类型码 = 1000 0011B = 83H;
|
||
- 若要使 IR5 的类型码 = 95H,则 ICW2 = 90H(90H~97H 均可)。
|
||
|
||
**(3)ICW3(A0=1)**
|
||
- 主片格式:S0~S7 表示 IR0~IR7 是否接从片(1=接,0=未接);
|
||
- 从片格式:高 5 位为 0,低 3 位 ID2~ID0 表示该从片连到主片的哪条 IRx 上。
|
||
|
||
**(4)ICW4(A0=1)**
|
||
|
||
| D7 D6 D5 | D4 | D3 | D2 | D1 | D0 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 0 0 0 | SFNM | BUF | M/S | AEOI | μPM |
|
||
|
||
| 位 | 含义 |
|
||
| --- | --- |
|
||
| SFNM | 1=特殊全嵌套 / 0=全嵌套 |
|
||
| BUF | 1=缓冲方式 / 0=非缓冲 |
|
||
| M/S | 缓冲方式下:1=主片 / 0=从片 |
|
||
| AEOI | 1=自动 EOI / 0=正常 EOI |
|
||
| μPM | 1=8086~Pentium / 0=MCS-80/85 |
|
||
|
||
**(5)OCW1(A0=1)** — 屏蔽字 M7~M0 对应 IR7~IR0(1=屏蔽,0=允许)。
|
||
|
||
**(6)OCW2(A0=0)** — 控制中断循环与结束命令,含 R、SL、EOI、L2~L0 等位。组合实现:
|
||
- 正常 EOI(001 00000)+ L2-L0;
|
||
- 特殊 EOI(011 + L2L1L0);
|
||
- 自动 EOI(010 + L2L1L0 自动循环下);
|
||
- 设置特殊循环最低优先级(110 + L2L1L0)等。
|
||
|
||
**(7)OCW3(A0=0)** — 设置查询方式、特殊屏蔽方式、寄存器读取方式(RR/RIS 用于读 IRR/ISR,P 用于查询命令)。
|
||
|
||
**ICW 写入顺序**(图 6.5.3):
|
||
1. 写 ICW1(设置是否级联、触发方式、是否使用 ICW4);
|
||
2. 写 ICW2(设置中断类型码高 5 位);
|
||
3. 若 ICW1 中 SNGL=0(级联方式)→ 写 ICW3(主片/从片分别写入);
|
||
4. 若 ICW1 中 IC4=1 → 写 ICW4(特殊全嵌套/缓冲方式/自动结束/CPU 类型)。
|
||
|
||
### 6.6 DMA 控制器 8237A
|
||
|
||
#### 6.6.1 8237A 主要功能
|
||
|
||
1. 每片有 **4 个独立 DMA 通道**;
|
||
2. 每个通道的 DMA 请求可分别编程允许/禁止;
|
||
3. 优先级两种:**固定优先级(DREQ0 最高,DREQ3 最低)**、**循环优先级**;
|
||
4. 支持 3 种传送类型:**DMA 读、DMA 写、DMA 校验**;
|
||
5. 可编程改变 DMA 读/写周期;
|
||
6. 4 种工作方式:**单字节传送、数据块传送、请求传送、级联方式**;
|
||
7. 多片级联可扩展通道数(主片 4 通道 + 从片扩展);
|
||
8. DMA 结束方式两种:①字节计数器减 1 由 0 变 FFFFH;②外界输入 EOP 负脉冲强制结束;
|
||
9. DMA 启动方式两种:①外设 DREQ;②软件编程内部启动。
|
||
|
||
#### 6.6.2 内部组成
|
||
|
||
- 缓冲器组(A3~A0、A7~A4、D7~D0);
|
||
- 时序和控制逻辑(含 EOP、RESET、CS、READY、CLOCK、AEN、ADSTB、MEMR、MEMW、IOR、IOW);
|
||
- 优先权编码逻辑(DREQ0~3、DACK0~3、HRQ、HLDA);
|
||
- 寄存器组:基地址寄存器、当前地址寄存器(各 16 位)、基字节计数器、当前字节计数器(各 16 位)、方式寄存器、命令寄存器、屏蔽寄存器、请求寄存器、状态寄存器、暂存寄存器;
|
||
- 命令控制逻辑、先/后触发器(控制 8 位/16 位数据总线复用)。
|
||
|
||
#### 6.6.3 端口地址分配(表 6.6.1 摘要)
|
||
|
||
每个通道占 2 个端口地址:A3~A0 的低 2 位选通道(第 0 通道对应 0000/0001,依此类推),低 3 位选寄存器(基地址/当前地址 vs 基字节数/当前字节数)。高 4 位(A7~A4)由地址总线驱动。表后部为公共寄存器:命令、状态、请求、屏蔽、方式、暂存、清先/后触发器、复位、四位屏蔽字等。
|
||
|
||
#### 6.6.4 8237A 工作方式(6 类)
|
||
|
||
**(1) 主从模态**
|
||
- **主态方式**:DMAC 作为总线主控者(如同 CPU),可对外设/存储器读写;
|
||
- **从态方式**:CPU 是总线主控者,DMAC 同普通 I/O 接口(被 CPU 通过端口读写)。
|
||
|
||
**(2) 4 种传送方式**
|
||
|
||
| 方式 | 含义 |
|
||
| --- | --- |
|
||
| 单字节传送 | 每次只传 1 个字节后释放总线,下一字节再 HRQ 重新申请 |
|
||
| 数据块传送 | 一次 DMA 请求完成整个数据块的全部传送,结束自动交还总线(TC 或 EOP 终止)|
|
||
| 请求传送 | 类似数据块,但每传 1 个字节检测 DREQ:DREQ 无效停止,有效继续 |
|
||
| 级联方式 | 用于连接多个 8237A 扩展通道;从片 HRQ、HLDA → 主片某通道的 DREQ、DACK |
|
||
|
||
**(3) 3 种传送类型**
|
||
- DMA 读:MEMR + IOW,把存储器数据读入 I/O 设备;
|
||
- DMA 写:IOR + MEMW,把 I/O 设备数据写入存储器;
|
||
- DMA 校验:伪传输,地址仍产生但 MEMR/IOW/MEMW/IOR 全无效。
|
||
|
||
**(4) 优先级编码**
|
||
- 固定优先级:DREQ0 最高,DREQ3 最低;
|
||
- 循环优先级:被响应的通道降为最低,其下一级升为最高;
|
||
- **8237A 不支持嵌套**:一个通道请求被响应后,其它 3 个通道请求被禁止,优先级排队只在 DMA 响应前有效。
|
||
|
||
**(5) 自动初始化方式**
|
||
- 通道完成数据块传送并产生 EOP(TC 或外部)时,**自动把基地址/基字节数的内容装入当前地址/当前字节计数器**,使通道恢复初值,准备下一次 DMA。
|
||
|
||
**(6) 存储器到存储器传送**
|
||
- 占用通道 0、1;0 通道作源(地址),1 通道作目的(地址与计数);
|
||
- 0 通道用软件 DREQ 启动。
|
||
|
||
---
|
||
|
||
## 二、考点总结
|
||
|
||
### 高频考点
|
||
|
||
- **【高频】I/O 端口两种编址方式对比**(独立 vs 统一) —— 必考选择题/简答题
|
||
- **【高频】四种数据传送方式对比**(程序查询 / 中断 / DMA / IOP) —— 选择题必考
|
||
- **【高频】中断传送与 DMA 传送的区别**:是否介入、传送单位、适用场合、硬件代价
|
||
- **【高频】8259A**:单片 8 级中断;级联可扩展至 **64 级**(1 主 + 8 从);初始化命令字 **ICW1~ICW4**(按固定顺序写入);操作命令字 **OCW1~OCW3**(随时写入)
|
||
- **【高频】8237A**:单片 **4 通道**;级联可扩展;4 种传送方式;3 种传送类型;2 种优先级
|
||
- **【高频】程序查询传送流程**(无条件 / 条件输入 / 条件输出) —— 简答题
|
||
|
||
### 其他常考点
|
||
|
||
- **接口与端口的区别**:接口是整体,端口是接口内可寻址的寄存器
|
||
- **接口的 4 大功能**:地址译码、数据缓冲锁存、电平与格式转换、协调控制
|
||
- **DMA 控制器基本功能(6 条)**:掌握送地址、计数、判断结束等
|
||
- **DMA 传送一般过程(10 步)**:以存储器→外设为例,DREQ/HRQ/HLDA/DACK/MEMR/IOW 信号流程
|
||
- **8259A 内部结构 4 大件**:IRR、ISR、PR、控制逻辑(+IMR、级联)
|
||
- **8259A 的两个 INTA 负脉冲** 完成动作:置 ISR、清 IRR、送 ICW2 内容
|
||
- **8259A 10 种工作方式** 中需重点掌握的:全嵌套、特殊屏蔽、循环优先级、查询方式、中断结束、自动 EOI、级联
|
||
- **8259A ICW2 中断类型码**:高 5 位程序设定,低 3 位由 IRx 自动填入(IR0~IR7 → 000~111)
|
||
- **8237A 工作方式 6 大类**:主从模态、传送方式(单字节/数据块/请求/级联)、传送类型(读/写/校验)、优先级、自动初始化、存储器到存储器
|
||
- **CPU 三种 DMA 操作方法**:CPU 停机、周期扩展、周期挪用
|
||
|
||
### 常见题型
|
||
|
||
- **选择 / 填空题**:
|
||
- 四种传送方式对比(哪些 CPU 不介入、谁控制总线、传送单位、适用场景)
|
||
- 8259A 单片多少级、级联最多多少级
|
||
- 8237A 单片多少通道、级联方式如何连接
|
||
- 8259A 初始化命令字的个数与写入顺序
|
||
- OCW1 中断屏蔽字中 0/1 的含义
|
||
- ICW2 中断类型码的高/低 3 位的来源
|
||
- DMA 控制器三种操作方法的区别
|
||
- 8237A 的 DREQ0~DREQ3 优先级高低(固定优先级时)
|
||
- 程序查询方式中状态触发器 D0 位 0/1 的意义
|
||
|
||
- **简答题 / 问答题**:
|
||
- 简述 DMA 传送过程(外设 → 存储器 或 存储器 → 外设)
|
||
- 简述中断传送过程(请求 → 响应 → ISR → 返回)
|
||
- 简述 8259A 初始化的命令字顺序
|
||
- 比较独立编址与统一编址的优缺点
|
||
- 8259A 两个 INTA 负脉冲期间各完成什么动作
|
||
- 8237A 单字节/数据块/请求三种传送方式的区别
|
||
- 8259A 全嵌套方式与特殊屏蔽方式的区别
|
||
- 解释查询输入/输出过程并画出流程
|
||
|
||
- **分析 / 设计题**:
|
||
- 给定外设(速度、数据量、响应要求),选择合适的传送方式并给出理由
|
||
- 给定 8259A 级联结构,判断主/从、识别 ICW3 写法
|
||
- 给定中断类型码基准值,求某 IRx 的类型码(或反求 ICW2)
|
||
- 写一个简单查询输入或查询输出的程序段
|
||
- 设计 8259A 初始化程序段(含 ICW1、ICW2、ICW3、ICW4 与 OCW1)
|
||
- 设计一个 DMA 传送过程,给出初始化参数(基地址、字节数)
|
||
|
||
### 答题套路提示
|
||
|
||
- 回答 8259A/DMA 类简答题时,**先点明控制器特性**(级数/通道数),**再列出命令字/工作方式**,**最后给出步骤或程序框架**。
|
||
- 回答传送方式对比时,使用表格 4 列(控制方式、CPU 介入、传送单位、适用场景),简洁明了。
|
||
- 涉及“过程”类简答时,**按时间顺序列出步骤**,并在关键信号处标出(如 DREQ、HRQ、HLDA、INTA 等)。
|