第 27卷 第 5期 大庆师范学院学报 Vol. 27 No. 5
2007年 10月 JOURNAL OF DAQ ING NORMAL UN IVERSITY October, 2007
DMA传送的 C语言实现
吕 桂 琴
(
大庆师范学院 物理与电气信息工程系 ,黑龙江 大庆 163712
)
摘 要 :计算机采用直接存储器存取 DMA传送数据时 ,是在设备之间直接开辟高速的数据通道 ,不需要 CPU介入 ,
而是由 DMA控制器直接控制。因此 ,编程合理与否 ,直接影响计算机的运行效率和正确性 ,这里以实验为例 ,利用
C语言给出 DMA控制器的编程步骤及其技巧。
关键词 :存储 ; 端口 ; 指令 ; 总线
作者简介 :吕桂琴
(
1957 -
)
,女 ,黑龙江大庆人 ,大庆师范学院物理与电气信息工程系教师 ,从事 C语言研究。
中图分类号 : TP312 文件标识码 : A 文章编号 : 1006 - 2165
(
2007
)
05 - 0024 - 02 收稿日期 : 2007 - 03 - 27
0引言
直接存储器存取简称 DMA
(
DirectMemory Access
)
,是一种不需要 CPU干预 ,用硬件实现存储器与存
储器之间或存储器与外设之间进行的高速数据传送 ,主要用来传送数据块和大批量的数据。DMA传送包
括 : RAM→I/O端口的 DMA读传送 ; I/O端口 →RAM的 DMA写传送 ; RAM→RAM的存储单元传送。系统
总线分别受到 CPU和 DMAC这两个器件的控制 ,即 CPU可以向地址总线、数据总线和控制总线发送信
息 ,DMAC也可以向地址、数据和控制总线发送信息。但是 ,在同一时间 ,系统总线只能受一个器件控制。
当 CPU控制总线时 ,DMAC必须与总线脱离 ;而当 DMAC控制总线时 , CPU 必须与总线脱离。因此 ,
CPU与 DMAC之间必须有联络信号。
1 DMA传送的工作过程
[ 1 ]
①I/O端口向 DMA控制器发出 DMA请求 ,请求数据传送。
②DMA在接到 I/O端口的 DMA请求后 ,向 CPU发出请求信号 ,请求 CPU交出系统总线控制权。
③CPU在执行完当前指令周期后 ,向 DMA控制器发出总线允许信号 ,表示同意让出总线控制权。
④CPU与系统的控制、地址及数据总线脱离关系 ,处于等待状态 ,由 DMA接管它们的控制权。
⑤DMA控制器向 I/O端口发出 DMA应答信号 ,表示接受 I/O请求 ,可以进行 DMA操作。
⑥DMA控制器把进行 DMA传送涉及到的 RAM地址送到地址总线上。如果进行 I/O端口 →RAM 传
送 , DMA控制器向 I/O端口发出 I/O读命令 ,向 RAM发出存储器写命令 ;如果进行 RAM→I/O端口传送 ,
DMA控制器向 RAM发出存储器读命令 ,向 I/O端口发出 I/O写命令 ,从而完成一个字节的传送。
⑦当设定的字节数传送完毕 , DMA传输过程结束 ,也可以由来自外部的终止信号迫使传输过程结束。
DMA控制器就将总线请求信号变成无效 ,并放弃对总线的控制 , CPU检测到总线请求信号无效后 ,也将响
应信号变成无效 ,于是 , CPU重新控制三总线 ,继续执行被中断的当前指令的其它总线周期。
2 DMA控制器 8237A的基本功能
[ 2 ]
①一个芯片中有 4个独立的 DMA通道。
②每一个通道的 DMA请求都可以被允许或禁止。
③每一个通道的 DMA请求有不同的优先级 ,既可以是固定优先级 ,也可以是循环优先级。
④每一个通道一次传送的最大字节数为 64KB。
⑤8237A提供 4种传送方式 :单字节传送方式、数据块传送方式、请求传送方式和级连传送方式。
42