PCIe之DMA (一)
2016-07-06 21:15
246 查看
DMA概念
DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问。内存与内存(外设)交换数据不经过CPU。
使用DMA的好处就是它不需要CPU的干预而直接服务外设,这样CPU就可以去处理别的事务,从而提高系统的效率,对于慢速设备,如UART,其作用只是降低CPU的使用率,但对于高速设备,如硬盘,它不只是降低CPU的使用率,而且能大大提高硬件设备的吞吐量。因为对于这种设备,CPU直接供应数据的速度太低。 因CPU只能一个总线周期最多存取一次总线,而且对于ARM,它不能把内存中A地址的值直接搬到B地址。它只能先把A地址的值搬到一个寄存器,然后再从这个寄存器搬到B地址。也就是说,对于ARM,要花费两个总线周期才能将A地址的值送到B地址。而DMA就不同了,一般系统中的DMA都有突发(Burst)传输的能力,在这种模式下,DMA能一次传输几个甚至几十个字节的数据,所以使用DMA能使设备的吞吐能力大为增强。
//不使用DMA的情况 char *src; char *dst; char len = 256; for(int i=0;i<256;i++) { *dst++=*src++; //需要cpu参与 } ..... //如果使用DMA char *src; char *dst; char *len; dma_src_regadr = src; dma_dst_regadr = dst; dma_trans_len = 8; dma_addr_inc = 1; //1bit dmaenable = 1; ...... //总结 使用DMA只是在初始化阶段配置DMAC的寄存器,之后内存到内存(外设)数据的传输和CPU无关了
对于任何类型的DMA传输,我们都需要规定数据的起始源和目标地址。对于外设DMA的情况来说,外设的FIFO可以作为数据源或者目标端。当外设作为源端时,某个存储器的位置(内部或外部)则成为目标端地址。当外设作为目标端,存储的位置(内部或者外部)则成为源端地址
相关文章推荐
- PCIe之DMA (三)
- PCIe之DMA (二)
- Linux上安装织梦DEDE时 提示GD不支持和mysql不支持 问题解决
- Linux first try
- Linux vim Java
- 主机之间ping命令互通设置及解决方案
- CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
- linux系统用户登陆时脚本执行顺序
- CentOS 7运维管理笔记(11)----PHP安装与配置
- Linux基础知识[1]【ACL权限】
- linux pmap命令
- 【LINUX 学习】Ext3 的三种日志记录方式
- gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化
- GCC的浅层理解
- Linux vmstat命令详解
- linux top 命令分析
- CentOS上配置rsyslog客户端用以远程记录日志
- Linux结束线程的方法,深度好文
- MySql5.6Linux安装后my.cnf配置文件位置
- 认识Linux