DMA传送的C语言实现.pdf

DMA传送的C语言实现.pdf

ID:48011918

大小:123.04 KB

页数:2页

时间:2020-01-14

DMA传送的C语言实现.pdf_第1页
DMA传送的C语言实现.pdf_第2页
资源描述:

《DMA传送的C语言实现.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第27卷第5期大庆师范学院学报Vol.27No.52007年10月JOURNALOFDAQINGNORMALUNIVERSITYOctober,2007DMA传送的C语言实现吕桂琴(大庆师范学院物理与电气信息工程系,黑龙江大庆163712)摘要:计算机采用直接存储器存取DMA传送数据时,是在设备之间直接开辟高速的数据通道,不需要CPU介入,而是由DMA控制器直接控制。因此,编程合理与否,直接影响计算机的运行效率和正确性,这里以实验为例,利用C语言给出DMA控制器的编程步骤及其技巧。关键词:存储;端口;指令;总线作者简介:吕桂琴(1957-),女,

2、黑龙江大庆人,大庆师范学院物理与电气信息工程系教师,从事C语言研究。中图分类号:TP312文件标识码:A文章编号:1006-2165(2007)05-0024-02收稿日期:2007-03-270引言直接存储器存取简称DMA(DirectMemoryAccess),是一种不需要CPU干预,用硬件实现存储器与存储器之间或存储器与外设之间进行的高速数据传送,主要用来传送数据块和大批量的数据。DMA传送包括:RAM→I/O端口的DMA读传送;I/O端口→RAM的DMA写传送;RAM→RAM的存储单元传送。系统总线分别受到CPU和DMAC这两个器件的控制

3、,即CPU可以向地址总线、数据总线和控制总线发送信息,DMAC也可以向地址、数据和控制总线发送信息。但是,在同一时间,系统总线只能受一个器件控制。当CPU控制总线时,DMAC必须与总线脱离;而当DMAC控制总线时,CPU必须与总线脱离。因此,CPU与DMAC之间必须有联络信号。[1]1DMA传送的工作过程①I/O端口向DMA控制器发出DMA请求,请求数据传送。②DMA在接到I/O端口的DMA请求后,向CPU发出请求信号,请求CPU交出系统总线控制权。③CPU在执行完当前指令周期后,向DMA控制器发出总线允许信号,表示同意让出总线控制权。④CPU与

4、系统的控制、地址及数据总线脱离关系,处于等待状态,由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控制器

5、就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将响应信号变成无效,于是,CPU重新控制三总线,继续执行被中断的当前指令的其它总线周期。[2]2DMA控制器8237A的基本功能①一个芯片中有4个独立的DMA通道。②每一个通道的DMA请求都可以被允许或禁止。③每一个通道的DMA请求有不同的优先级,既可以是固定优先级,也可以是循环优先级。④每一个通道一次传送的最大字节数为64KB。⑤8237A提供4种传送方式:单字节传送方式、数据块传送方式、请求传送方式和级连传送方式。24[3]38237A的初始化编程(1)命令字写入

6、控制寄存器。在初始化时必须设置控制寄存器,以确定其工作时序、优先级方式、请求信号DREQ和应答信号DACK的有效电平及是否允许工作等。(2)屏蔽字写入屏蔽寄存器。当某通道正在进行初始化编程时,接收到DMA请求,可能未初始化结束,8237A就开始进行DMA传送,导致出错。初始化编程时,必须先屏蔽要初始化的通道,在初始化结束后再解除该通道的屏蔽。(3)方式字写入方式寄存器。为通道规定传送类型及工作方式。(4)置0先/后触发器。对口地址DMA+0CH执行一条输出指令(写入任何数据均可),从而产生一个写命令,即可置“0”先/后触发器,为初始化基地址寄存器

7、和基本字节寄存器作准备。(5)写入基地址和基本字节寄存器。把DMA操作的存储区首址或末址写入地址寄存器,把要传送的字节数减1,写入基本字节寄存器。这几个寄存器都是16位的,写入要分两次进行:先写低8位(先/后触发器置1),后写高8位(先/后触发器自动清“0”)。(6)解除屏蔽。初始化之后向通道的屏蔽寄存器写入D2~D0=0××的命令字,置0相应通道的屏蔽触发器,准备响应DMA请求。(7)写入请求寄存器。如果采用软件DMA请求,在完成通道初始化之后,在程序的适当位置向请求寄存器写入D2~D0=1××的命令字,即可使相应通道进行DMA传送。[4]4D

8、MA控制器的编程举例实验流程如图2所示,来说明从存储器1000:0000H单元到I/O传送5个字节的过程。#include

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。