--- tags: - 接口与通讯技术 - 82C37A - DMA - 选择题 - 重点复习 create time: 2026-06-28 16:30 --- # DMA 控制器 82C37A 选择题考点 ## 概述 82C37A 是选择题中出现频率最高的芯片(3套试卷共考9题)。核心考点围绕**状态周期、握手信号、传输方式、初始化方式字、字节计数器**五个维度展开。 ## 正文 ### 1. DMA 状态周期(S1~S4) ```mermaid graph LR S1["S1
输出地址高8位
仅高8位变化时才插入"] --> S2["S2
输出地址低8位
读/写控制有效"] --> S3["S3
数据传输"] --> S4["S4
周期结束"] 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["数据采集
外设→存储器"] --> B["对存储器是写操作
→ DMA 写"] C["数据输出
存储器→外设"] --> D["对存储器是读操作
→ 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 选择题考点]]