Linux驱动开发(二)—DMA的使用(一)
2016-05-07 16:39
393 查看
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下的USB总线驱动
- 打开DMA传输方式
- DMA timeout error
- 浅析μC/OS-Ⅱ设备驱动的设计与实现
- linux驱动开发之key
- 零基础Android手机嵌入式开发实战课程(网吧计费系统、多功能播放器、驱动开发)
- STM32 SPI工作在主模式时用DMA方式接收数据
- STM32 UART DMA实现未知数据长度接收(转自amoBBs)
- stm32f4 DAC DMA 频率发生器+FreeRTOS
- 小白探访WINDOWS下的驱动(五) 第一个HELLO驱动(插曲-调试环境设置HOST&TARGET)
- Win7 环境下如何配置驱动开发环境
- aurix中DMA使用
- USB开发—自上而下(二)
- USB开发—自上而下(四)
- Server2012R2下安装intel 82579v网卡驱动
- Android 驱动开发系列
- FS_S5PC100平台上Linux Camera驱动开发详解(二)
- ubuntu 14.04 无线网卡驱动安装
- 在Linux内核中添加程序
- Linux设备驱动中的阻塞与非阻塞I/O 及 等待队列的使用说明