3.3 KiB
3.3 KiB
tags, create time
| tags | create time | |||||
|---|---|---|---|---|---|---|
|
2026-06-28 16:30 |
DMA 控制器 82C37A 选择题考点
概述
82C37A 是选择题中出现频率最高的芯片(3套试卷共考9题)。核心考点围绕状态周期、握手信号、传输方式、初始化方式字、字节计数器五个维度展开。
正文
1. DMA 状态周期(S1~S4)
graph LR
S1["S1<br/>输出地址高8位<br/>仅高8位变化时才插入"] --> S2["S2<br/>输出地址低8位<br/>读/写控制有效"] --> S3["S3<br/>数据传输"] --> S4["S4<br/>周期结束"]
style S1 fill:#ffd,stroke:#333,color:#000
[!important] 高频考点 S1 状态只有在存储器地址的高 8 位发生变化时才会出现。 地址高8位不变时可跳过 S1,提高传输效率。
2. DMA 握手信号(4个关键信号)
| 信号 | 方向 | 含义 | 考试角度 |
|---|---|---|---|
| DREQ | I/O → DMA | I/O 设备请求 DMA 传输 | 请求源 |
| HRQ | DMA → CPU | DMA 请求占用总线 | 尚未获得总线 |
| HLDA | CPU → DMA | CPU 确认交出总线 | 标志 DMA 已获得总线控制权 ✅ |
| DACK | DMA → I/O | DMA 确认选中该 I/O | 表示该 I/O 被选中 ✅ |
[!question] 思考题 HRQ 和 HLDA 有什么区别?为什么不能只靠 HRQ 判断 DMA 获得了总线?
答:HRQ 是 DMA 的"请求",HLDA 是 CPU 的"应答"。只有 CPU 发出 HLDA 后,DMA 才真正获得总线控制权。HRQ 有效只表示"我想要",HLDA 有效才表示"你得到了"。
3. DMA 四种传输方式
| 方式 | 释放总线条件 | 适用场景 |
|---|---|---|
| 单字节方式 | 每传完 1 个字节立即释放 | CPU 需频繁介入 |
| 请求方式 | DREQ 无效时释放(DREQ 有效则连续传) | I/O 速度不确定 |
| 块方式 | 整个数据块传完才释放 | 大批量连续传输 |
| 级联方式 | 用于多片级联 | 扩展 DMA 通道 |
[!tip] 解题口诀
- 题干出现"每操作一个数据就释放"→ 单字节方式
- 题干出现"DREQ 是否维持有效决定是否释放"→ 请求方式
4. 初始化方式字:DMA 读 vs DMA 写
判断依据:以存储器的视角决定读/写。
graph TD
A["数据采集<br/>外设→存储器"] --> B["对存储器是写操作<br/>→ DMA 写"]
C["数据输出<br/>存储器→外设"] --> D["对存储器是读操作<br/>→ DMA 读"]
style B fill:#dfd,stroke:#333,color:#000
style D fill:#dfd,stroke:#333,color:#000
[!example] 真题 采用 DMA 方式进行数据采集(外设→存储器),对 82C37A 初始化时应按照 DMA 写 写入方式字。
5. 字节计数器
82C37A 的字节计数器为 8 位,范围 0~255:
\text{实际传输字节数} = \text{装载值} + 1
- 传 256 个数据 → 装载值 = 256 − 1 = 0FFH
- 传 1 个数据 → 装载值 = 00H
[!warning] 易错点 计数器是"减1计数器",从装载值递减到 0 时传输结束,共传输 N+1 个字节。不是装载 N 就传 N 个!