89 lines
3.3 KiB
Markdown
89 lines
3.3 KiB
Markdown
---
|
||
tags:
|
||
- 接口与通讯技术
|
||
- 82C37A
|
||
- DMA
|
||
- 选择题
|
||
- 重点复习
|
||
create time: 2026-06-28 16:30
|
||
---
|
||
|
||
# DMA 控制器 82C37A 选择题考点
|
||
|
||
## 概述
|
||
|
||
82C37A 是选择题中出现频率最高的芯片(3套试卷共考9题)。核心考点围绕**状态周期、握手信号、传输方式、初始化方式字、字节计数器**五个维度展开。
|
||
|
||
## 正文
|
||
|
||
### 1. DMA 状态周期(S1~S4)
|
||
|
||
```mermaid
|
||
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 写
|
||
|
||
判断依据:**以存储器的视角**决定读/写。
|
||
|
||
```mermaid
|
||
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 个!
|
||
|
||
## 关联笔记
|
||
|
||
- [[接口与通讯技术/复习文档/82C37A DMA控制器]]
|
||
- [[DMA控制器82C37A|填空题专题:82C37A DMA控制器]]
|
||
- [[中断控制器82C59A 选择题考点]]
|