[本文首发于cnblogs,作者:byeyear,Email:east3@163.com]

这几天在弄am3358的DMA,简化应用环境如下:

am3358的FSMC接了一片FPGA;

FPGA上接ADC;

am3358通过FPGA以DMA方式读取ADC数据。

事先在网上查找过相关资料,发现关于这方面工作的文章极少,即使TI官网上也没什么可靠资料,心里还是有些忐忑的,结果在实现过程中发现意外的简单,所以把过程写下来,希望有相似需求的同行可以少走弯路。

注意:阅读本文要求具备一定的linux设备驱动开发经验,如果您从没有做过linux驱动开发,那么阅读本文时可能会有一定的困难。

文章基于TI提供的Linux SDK 3.0。

1. 引脚配置

引脚配置分两块:FSMC引脚配置和外部DMA请求引脚配置。这里建议大家到TI网站上下载它的pinmux工具,点点鼠标就可以生成devicetree,非常直观简单,所以就不展开讲了。

2. 外部DMA请求形式

在TI的处理器手册上没有找到外部DMA引脚请求形式,不过一般来说不外乎上升沿或下降沿两种,所以我偷了个懒,使用一个1us宽度的正脉冲来提交DMA请求。

3. crossbar配置

crossbar的配置可以参照Linux内核文档Documentation/devicetree/bindings/dma/ti-dma-crossbar.txt。我使用了DMA Channel 58和Transfer Controller 1,所以我的devicetree文件有如下内容:

dmas=<&edma_xbar 58 1 28>;

TI的EDMA Engine会根据上面这行内容为你配置好crossbar,几乎不需要在你自己的驱动里做任何工作。
4. linux下的DMA驱动程序框架

linux DMA驱动程序框架文档位于linux内核目录树下Documentation/dmaengine,主要看client.txt就可以了。在这篇文档里说明了该如何使用DMA Engine的API。原则上来说,只要根据这篇文档所述内容编程,就可以搞定了。另外我还参考了drivers/crypto/omap-aes.c,这个驱动也使用了DMA。不过针对具体的TI DMA控制器,这里还是有一些补充说明:

  • addr_width:这个根据你外设情况设置。我的是16位ADC,所以我设置为DMA_SLAVE_BUSWIDTH_2_BYTES。
  • maxburst:这个可设置为当你提交DMA请求时的可用数据量。我的FPGA里放了一个1k的FIFO,在累积到512数据点时提交DMA请求,所以将maxburst设置为512。maxburst的单位依据addr_width设定。比如addr_width是2bytes,那么一个burst就是512个数据点,或1024字节。
  • 不同的DMA控制器需要厂家实现自己的dmaengine底层,TI的底层实现在drivers/dma/edma.c。
  • 如果你将maxburst设置为1,TI的驱动将使用A Sync方式驱动EDMA;若maxburst大于1,就使用AB Sync方式。不管是哪种方式,acnt都等于addr_width所设定的数据量。

5. 嗯,就只有这么多了。

在linux下使用am335x的DMA的更多相关文章

  1. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  2. linux 下各文件夹的功能性介绍。(转载)

    原文来自:http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.html /opt   放置用户自己下载的软件  英文全称是op ...

  3. 【收集整理】Linux下的目录讲解

    Linux下的目录介绍:在Linux系统中,一切东西都是存放在一个唯一的“虚拟文件系统”中的,这个“虚拟文件系统”是树状的结构以一个根目录开始.以文件来表示所有逻辑实体和非逻辑实体,逻辑实体指文件和目 ...

  4. linux下各文件夹的结构说明及用途介绍

    linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件.   /etc:系统管理和配置文件.   /etc/rc.d:启动的配 置文件和脚本.   /ho ...

  5. C语言高级应用---操作linux下V4L2摄像头应用程序

    我们都知道,想要驱动linux下的摄像头,其实很简单,照着V4L2的手册一步步来写,很快就可以写出来,但是在写之前我们要注意改变系统的一些配置,使系统支持framebuffer,在dev下产生fb0这 ...

  6. Linux下Power Management开发总结

    本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 1. 前言 在 <开发流程>中介绍了PM开发的一般流程,重点是好的模型.简单有效的接口参数.可量化的测试环境以及可独性强的输出 ...

  7. Linux下,根据FHS定义出来的每个目录的作用

    (下表摘自<鸟哥的Linux的私房菜>) 在Linux下,根据FHS定义出来的每个目录应该放置的档案内容为: 目录 应放置档案内容 / 根目录 root (/),一般建议在根目录底下只接目 ...

  8. Linux 下各个目录的作用及内容

    在 Linux 下,我们看到的是文件夹(目录): 在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱.Linux 面世不久后,对文件目录进行了标准化,于1994年对 ...

  9. Linux下dmesg命令处理故障和收集系统信息的7种用法

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

随机推荐

  1. JAVA基础部分复习(六、常用关键字说明)

    /** * JAVA中常用关键字复习 * final * finalize * finally * * @author dyq * */ public class KeyWordReview exte ...

  2. urllib.request中Handler处理器

    1.定义 自定义的urlopen()方法,urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,通过Handler处理器对象来自定义opener对象 2.常用方法 1.bu ...

  3. Bi-shoe and Phi-shoe

    欧拉函数中的性质 Φ(p)=p-1,p为素数.所以这个题算是贪心+数论吧.每个Φ(p)=p-1:只要从p开始,找素数,那么一定有Φ(k)>=p-1;只有当p=k时,等号成立. #include ...

  4. 两道不错的递推dp

    hdoj-4055 #include <cstdio> #include <cstring> #include <iostream> #include <al ...

  5. 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)

    链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  6. ZOJ 1002:Fire Net(DFS+回溯)

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...

  7. 启动服务报错:nested exception is java.lang.NoSuchMethodError: org.apache.cxf.common.jaxb.JAXBUtils.closeUnmarshaller(Ljavax/xml/bind/Unmarshaller;)V

    1.启动tomcat时报错:Error creating bean with name 'payInfService': Invocation of init method failed; neste ...

  8. shutil模块(高级的文件、文件夹、压缩包处理模块)

    shutil 模块 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import shutil s ...

  9. mysql中不直接通过密码连接 还要指定ip地址进行连接----------DCL数据库控制语言

    线上如果用root超级用户连接数据库,非常容易造成隐私泄漏.一般线上不用root数据控制. 今天和大家分享的是  输入密码还不可以连接数据库,必须要输入ip地址以后,才可以连接. 正常的访问数据库都是 ...

  10. 每天进步一点点- 资源与URI(吐血精华总结)

    1.资源(Resources) 每一个URI代表一种资源这句话的理解 ***************************************************************** ...