码迷,mamicode.com
首页 > 系统相关 > 详细

Linux驱动开发(二)—DMA的使用(一)

时间:2016-05-13 03:20:49      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

1 DMA概念

DMA顾名思义就是指设备和内存之间、内存和外部存储设备之间进行直接的数据读写操作,而不需要CPU的参与。

2 DMA原理

       DMA传输需要由DMA控制器DMAC进行,当需要进行DMA传输的时候,DMA控制器会发出占用总线的请求,当CPU响应DMA的请求时,暂时放弃对总线的控制权,当DMA传输结束的时候,DMAC会向I/O接口发出结束命令,并将总线控制权交还给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
技术分享

3 DMA传输过程

技术分享

4 DMA硬件控制管脚

在Linux驱动开发中,使用DMA可能要操作DMAC(DMA控制器)的几个管脚介绍如下:

1.数据总线:用于传输数据;

2.地址总线:用于选择存储器地址;

3.数据传送信号:MEMR为存储器读操作信号,MEMW为存储器写操作信号,IOR为外设读操作信号,IOW为外设写操作信号;

4.DRQ:DMA请求信号,外设向DMA控制器提出要求操作DMA操作的申请信号;

5.DACK:DMA应答信号,DMAC响应外设提出的DMA请求操作;

6.HOLD:总线请求信号,DMAC向CPU发出的临时占用总线的信号;

7.HLDA:总线响应信号,CPU向DMAC发出的允许临时让出总线控制权的信号;

5 驱动开发中DMA使用—代码编写框架

1.DMA初始化:DMA通道申请、DMA传输方向设置(MEM->MEM、MEM->DEV、DEV->MEM)、DMA数据传输设置(每次传输一个字节或者多个字节);

2.DMA源地址和目的地址设置:DMA源地址为内存的物理地址,DMA目的地址为外设的数据寄存器的物理地址;

3.DMA传输开始函数调用;

4.DMA传输结束函数调用;

 OK,这个章节就简单介绍DMA的概念,接下来的章节,将通过实际项目代码阐述驱动开发中DMA的使用。

Linux驱动开发(二)—DMA的使用(一)

标签:

原文地址:http://blog.csdn.net/zengxianyang/article/details/51337751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!