Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1365938
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: LINUX

2015-03-14 15:27:19

原文地址:AM335X DMA 驱动设计一 作者:Enders_Hu

AM335X DMA 驱动设计

AM335XEDMA与以往的处理器的DMA有所不同,而我手头上只有AM335XTechnical Reference Manual以及PSP User's Guide,还有PPCDMA驱动源码,可用的资料不多,自己一个人摸索,一路走来,遇到不少困难,甚至产生了想要放弃的念头。然而为了工作,为了生活,不得不咬紧牙关,迎难而上。皇天不负有心人,经过整整三周的艰苦奋斗,终于把问题给解决了。经此一役,深感技术交流与讨论的重要,为了后来的同学们能少走些弯路,特此将自己的开发经历书写成文,以供参考,希望能对大家有益。

做驱动开发的,如果对硬件不了解,根本做不出来,即使一不小心做出来了,也未必能够尽量使用硬件的特性,做到最好的优化,代码写得再好看也不高效。所以,首先对AM335X EDMA进行一个简单的介绍,如果要详细了解,则建议参阅AM335XTechnical Reference Manual,虽然是全英文版的,但是原汁原味的,更能理解芯片设计者的本意,比国内翻译版本的要好多了。

 

一、AM335X EDMA简介

1EDMA(Enhanced Direct Memory Access)是增强型的DMA控制器,用于控制存储器与存储器、存储器与外设、外设与外设之间的数据传输。其结构主要包含TPCC(Third-Party Channel Controller)与TPTC(Third-Party Transfer Controller)两大部分,即通道控制器与传输控制器,如图1所示。

                                    1

2、通道控制器(Channel Controller)

主要功能:通道选择,事件(event)管理,向传输控制器递交传输请求(transfer request),向CPU发出完成中断(transfer completion);EDMA中有64DMA通道,8个快速DMA通道,95个事件。其结构框图如图2所示:


                                    2

 

DMA传输参数(源地址、目的地址、数据长度/宽度等)由一组parameter RAM set(在Linux 3.2.0系统中称之为slot)决定,启动DMA之前须配置这些参数。如图3所示:

                                 3

       PaRAM set中,OPT字段很重要,其含义参看11.3.3.2.1 Channel Options Parameter (OPT)部分,这里讲讲我在自己驱动所用到的几个选项(options):

(1)ITCINTEN:中间传输完成中断,用于一次传输请求(TR)完成后,产生一个chained event,触发下一个TR。如果你的外设不能触发TR,并且在驱动中用到了三维传输(3D transfer),而你又想在启动DMA之后让他自动完成传输,则要设置这个标志;

       (2)TCINTEN:传输完成中断,用于完成DMA传输之后,向CPU发出中断请求,把总线控制权交还CPU;

(3)TCCHEN:传输完成链接(chaining,暂且翻译为链接吧),用于在耗尽(exhausted)一个PaRAM set(Linux中称之为slot)之后,链接到下一个你指定的下一个PaRAM set;

(4)TCC:传输完成码,用于链接或者中断;

(5)FWID:FIFO宽度,最小8bit,最大256bit,当你的外设有一个数据移位寄存器,支持分页读写时,可设置这一标志,FIFO宽度既是你的外设的宽度。此时,地址编址模式必须设置为常地址模式(Constant addressing mode);

(6)SAM/DAM:源/目的地址编址模式,有两种,一是INR模式,表示传输一个array进行一次编址(addressing),编址之后才能把数据写进目的地址;另一种是FIFO,表示达到FIFO宽度之后进行一次编址,与(5)同时使用;当选择FIFO模式时,地址必须扩展对齐到256bit,即源/目的地址以256bit为单位对齐,前后两个地址之间相差256bit;

(7)STATIC:静止位,设为1时,完成一次TR不更新(update)PaRAM set,设为0时,完成一次TR更新PaRAM set;在3D transfer中,须把这一位设置为0;

(8)SYNCDIM:传输类型选择,A同步(synchronization)或AB同步,设为A同步时,一次TR传输一个array的字节,设为AB同步时,一次TR传输一个frame的字节。

OPT字段设置完成后,还须设置源地址,目的地址,ACNT,BCNT,CCNT,SRCBIDX, SRCCIDX,DESTBIDX,DESTCIDX等,这些会在后面提到。

 

3、传输控制器(Transfer Controller)

主要功能:接收TPCC的传输请求,产生读写命令,负责数据传送,传输完成回交TPCC。其结构框图如图4所示:

                                                 4

 

4、传输类型(Types of EDMA3 Transfers)

与以往的DMA控制器不同,EDMA传输被定义为一个三维传输(3D transfer),如图5所示。

 

                                 5

第一维:array,一个array里有acnt个字节,acnt是一个16位无符号数,取值可在1~65535之间,取0值时DMA传输变为null transfer或者dummy transfer

第二维:frame,一个frame里有bcntarraybcnt是一个16位无符号数,取值可在1~65535之间,取0值时DMA传输变为null transfer或者dummy transfer

第三维:block,一个block里包含ccntframeccnt是一个16位无符号数,取值可在1~65535之间,取0值时DMA传输变为null transfer或者dummy transfer

与此对应的,EDMA传输类型分成A同步传输(A-synchronized transfer)与AB同步传输(AB-synchronized transfer)两种。A同步即一次传输请求(TR)传输一个array的数据,完成整个DMA传输须触发bcnt*ccnt次TR;AB同步即一次TR传输一个frame的数据,完成整个DMA传输须触发ccnt次TR。

5DMA工作流程

DMA工作流程主要包括:向CPU发出DMA请求àDMA控制器获得总线控制权,CPU继续执行内部操作àDMA控制器负责数据传输à数据传输完成向CPU发出完成中断,将总线控制权交还CPU

阅读(1722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~