eDMA结构及工作机理的简单介绍

eDMA是enhanced Direct Memory Access的简称,即增强型直接内存存取。它是用于快速数据交换的重要技术,具有独立于CPU的后台批量数据传输能力,能够满足实时处理中高速数据传输的要求。在ColdFire系列MCU中的MCF5329EVB平台上实现的音频系统,为了满足系统的实时性要求,采用eDMA来完成音频数据的传输。MCF5329EVB提供了一个eDMA控制器,可以满足大量数据的实时传送需求。

1 eDMA介绍

1.1 eDMA的结构

eDMA模块框图如图1所示。

从eDMA的模块结构图可以看出,eDMA模块包括两个主要模块:eDMA引擎和传输控制描述符TCD单元。其中,eDMA引擎的功能主要包括源地址和目的地址的计算和实际的数据搬移操作;TCD单元的功能是为每个通道定义传输的源地址和目的地址、次循环的大小、单次传输的字节量及传输方式等信息。

eDMA引擎由如下4个子模块组成:

①地址路径模块。执行传输控制描述符的2个通道(通道X和通道Y)的注册,并处理所有的总线地址计算。被注册的通道用于装载从传输控制描述符区域读取的传输控制描述符内容。

②数据路径模块。执行数据的读写,包括16字节的寄存器存储区域,并支持多种数据排列方式。

③编程模型/通道仲裁模块。执行eDMA编程模型和通道仲裁。eDMA外部请求输入和中断输出都连接到该模块。

④控制模块。提供所有针对eDMA引擎的控制功能,包括对数据读和写的匹配。如需要读取的源数据大小为16位,而目标数据大小为32位,则每2次读取只需要1次写入。

传输控制描述符区域由如下两部分组成:

①内存控制器。该逻辑执行必需的双向端口控制,处理eDMA引擎和内部外围总线的通道。

②内存阵列。TCD存储区是一个单端口同步的RAM阵列。每个通道都有1个TCD单元,每个TCD有32字节,由11个寄存器组成。

1.2 eDMA的操作

MCF5329的eDMA有16个数据传输通道,每一个通道由一个传输控制描述符TCD进行描述。TCD不仅记录了数据传输的源和目的地址,还记录了当前传输地址相对于起始地址的偏移。该偏移由一个主循环(maior loop)和一个次循环(minor loop)来表示。当一个通道在传输时,次循环中的数据传输完成之后,eDMA引擎中的当前源地址、目的地址和外循环的大小会被写回TCD存储区域,并执行通道连接的其他通道传输。每一个次循环执行完,当前外循环计数器就会减1;当外循环计数器减为O时,eDMA会向处理器发起一次中断请求,请求下一次eDMA传输的源和目的地址。一次主循环所能传送的最大字节数由用户所分配的eDMA缓冲区大小决定。

1.3 eDMA基本数据流

eDMA基本数据流可被划分为三段。

第一段是通道激活。以外围硬件请求激活通道为例,eDMA请求输入信号首先经由控制子模块进入编程模型和通道仲裁模块,确定采用固定优先级还是联合通道仲裁(固定优先级仲裁是先给具有最高优先级的通道服务,联合通道优先级是先给通道编号最大的通道服务);确定通道后,被确定的通道号通过地址路径模块发送并转换成需要的地址,用于在当地存储区域中存取传输控制描述符TCD;相应的描述符读取出来后被装载到地址路径模块中的通道X或通道Y寄存器中。

第二段是真正的数据传输。源数据被读取出来临时,存储在数据路径块中,然后在时钟的驱动下将数据写入到目标地址。整个读写过程持续到次循环数据结束。

第三段是TCD的更新和中断请求的发生。一旦一个次循环数据传输完毕,数据流就进入第三段。在该段中,地址路径逻辑会更新相应TCD中的特定区域,如源地址、目标地址和外循环计数。如果外循环计数减为O,则要进行额外的设置,包括最终地址调节。如果在此时有中断请求发生,需要重新读取一个新的TCD。

eDMA结构及工作机理的简单介绍

时间: 2024-11-18 07:48:29

eDMA结构及工作机理的简单介绍的相关文章

(原创)cocos2d-x 3.0+ lua 学习和工作(2) : 单一继承简单介绍

-- 星月相随倾心贡献~~~ -- 本章简单介绍一下:单一继承 -- 多继承本人还没有用过,主要是lua多继承感觉不好用~~~个人感觉~~~大汗~! -- example: local Base = class( "Base" ) Base.__index = Base function Base:ctor(...) print( self.__cname ) -- 输出:类名字.class( "xxx" ), self._cname 就是 xxx end func

Zookeeper简单介绍

转自:ZooKeeper学习第一期---Zookeeper简单介绍 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解.如果这些进程全部是跑在一台机上的

couchbase的简单介绍

couchbase作为新兴的NOSQL数据库,可堪使用的资料少的可怜,更别提中文资料了,基本上就是在官网的手册和论坛上查询所需资料,所以这要求有一定的英语基础,词汇量不是问题,不认识的直接百度,关键是语法和耐心要过关,我从刚接触couchbase开始天天啃英文手册也是读得烦躁不安,所以耐心十分重要.现在使用的是couchbase 2.2 community版本的,所以手册是这个:http://docs.couchbase.com/couchbase-manual-2.2/.这个手册中,Best

MPI编程简单介绍

第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信.要使得消息传递方式可移植,就须要採用标准的消息传递库.这就促成的消息传递接口(Message Passing Interface, MPI)的面世,MPI是一种被广泛採用的消息传递标准[1]. 与OpenMP并行程序不

iOS开发拓展篇-XMPP简单介绍

iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已

xml简单介绍及libmxml编程

今天我们来简单介绍一下,关于xml的一些内容,包括自己编写一些程序进行生成和解析. 首先我们我们还是从xml的演化历史来了解一下它吧. 历史演化 GML: 在20世纪60年代为了促进数据交换和操作,通过IBM公司研究人员的杰出工作,得出了重要的结论:要提高系统的移植性,必须采用一种通用的文档格式,这种文档的格式必须遵守特定的规则.这也就是创建通用标记语言(外语全称:Generalized Markup Language.外语缩写:GML)的指导原则,从人们所产生的将文件结构化为标准的格式的动机出

C51端口结构和工作原理(转)

一.P0端口的结构及工作原理 P0端口8位中的一位结构图见下图:   由上图可见,P0端口由锁存器.输入缓冲器.切换开关.一个与非门.一个与门及场效应管驱动电路构成.再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成. 下面,我们先就组成P0口的每个单元部份跟大家介绍一下: 先看输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高电平.低电平,同时还有一种

dubbo学习过程、使用经验分享及实现原理简单介绍

一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不多花了两天半时间,请尊重劳动成果,如转载请注明出处http://blog.csdn.net/hzzhoushaoyu/article/details/43273099 二.什么是dubbo Dubbo是阿里巴巴提供的开源的SOA服务化治理的技术框架,据说只是剖出来的一部分开源的,但一些基本的需求已经

XMPP协议简单介绍

1为什么选择XMPP协议 在IETF 中,把IM协议划分为四种协议,即即时信息和出席协议(Instant Messaging and Presence Protocol, IMPP).出席和即时信息协议(Presence and Instant Messaging Protocol, PRIM).针对即时信息和出席扩展的会话发起协议(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensio