如何用C语言对DMA控制器编程.doc

上传人:白大夫 文档编号:3428264 上传时间:2019-08-24 格式:DOC 页数:2 大小:14KB
返回 下载 相关 举报
如何用C语言对DMA控制器编程.doc_第1页
第1页 / 共2页
亲,该文档总共2页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《如何用C语言对DMA控制器编程.doc》由会员分享,可在线阅读,更多相关《如何用C语言对DMA控制器编程.doc(2页珍藏版)》请在三一文库上搜索。

1、如何用C语言对DMA控制器编程摘要:详细地分析了PC/AT机系统的DMA(直接存储器存取)控制器结构及其传输方式,并给出了C语言编程实例。DMA是英文DiretMemorAccess的缩写,即直接存储器存取,DMA传输是PC机与外设高速数据交换的重要方法,其一个典型应用是应用于声卡的录放音过程中,录音时,CPU首先设置好声卡和DMA的传输参数。当启动DMA数据传输(即开始录音)后,即由DMA控制器DMAC)按管PC总线进行数据传输,每次传输结束后,DMA控制器便归还总线控制权,并申请CPU中断,告之数据传输完毕,然后由中断服务程序将DMA数据缓冲区中数据取走并准备下次数据传输(即录音),由于在

2、传输过程中无需CPU干沙,因此在录音期间CPU可以执行其它程序,这样既极大地提高了数据传输速度又提高了CPU的执行效率,正是由于DMA的这些优点,所以目前在工业控制领域的数据采集过程中都大量地采用了DMA数据传输方法。但是,由于DMA编程的资料较少,因此DMA编程一直是硬件编程方面的一个难点,本文将以C语言为例详细介绍DMA编程方法。1、PC/AT的DMA系统特点PC/AT使用两片8237A-5芯片组成级连结构,每片8237A-5芯片内部有4个独立的通道,分别以通道O-通道7表示。但由于通道4被用作第0片和第1片的级连,因此PC/AT系统-一共能提供7个通道的DMA数据传输,在这7个通道中,除

3、通道2作为软盘DMA传输服务,通道0留给SDIC通信透配器外,其余通道0,1,3,5.6和7均留作扩充使用,在这7个DMA通道中,通道03按8位数据最大传输64KB设计;面通道5-7按16位数据最大传输64K字(128KB)设计,它们都支持寻址16MB空间的能力。2、DMA通道地址产生方式8237A-5只能管理16位地址(AI5-A0),但为了寻址PC/AT机的24位地址空间寻址,在DMA系统中将PCAT机的16M空间分为多个物理页面,从面保证了在DMA周期内只需16位地址寻址,因此DMA系统中为每个通道设置了一个DMA页面寄存器,用以存放此物理页面号。对于8位传输通道03,由于芯片的地址使用

4、字节边界,即A15-A0为16位长的字节地址,因此每页64KB,而对于16位传输通道5-7,由于芯片的地址使用字边界,即A16-AI(A0固定为0)为16位长的字地址,因此每页可达128KB,计算地址偏移和计数个数时尤其应该性意两者区别,对于DOS管理下的1M常规内存,页面分布图1所示:从DMA通道地址产生方式,我们可以看出DMA控制器仅能在-个物理页面内传输数据,因此当数据跨页面存放时,我们必须分多次对其进行数据传输,从面保证每次传输时数据都在同一页面内。3、DMAI/O地址DMA控制器(DMAC)共有16个端口地址和4个页面寄存器地址,共分为两大类:控制DMA状态及设置数据地址。在设置DMA传输数据时,要用到3个端口,分别是:页面寄存器,地址(偏移)寄存器和数据计数器,表1给出了每个通道及其相应1/O口地址。在控制DMAC的状态时,要用到另外3个端口,分别是:方式寄存器,屏蔽寄存器和清除寄存器。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1