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。

转载于:https://www.cnblogs.com/kwg123/p/3889432.html

eDMA结构及工作机理的简单介绍相关推荐

  1. Web前端工作笔记004---js--webSocket简单介绍和使用方法

    JAVA技术交流QQ群:170933152 Websocket 1.websocket是什么? WebSocket是为解决客户端与服务端实时通信而产生的技术.其本质是先通过HTTP/HTTPS协议进行 ...

  2. [硬件] 简单介绍磁盘结构及工作原理

    一.前言 最近学习DOS下的汇编语言用到了很多与硬件相关的指令,比如上一期写的int 13h(直接磁盘服务),其中接口参数中就有驱动器号,磁头,磁道,扇区的概念,对于一个计算机组成原理丢了一年的人来说 ...

  3. 【3Dprinter】3D打印机机型结构 UM、I3、Hbot等的简单介绍

    3D打印机机型结构 UM.I3.Hbot等的简单介绍 2016-6-14 15:18| 发布者: TumiZhou| 查看: 2103| 评论: 2|原作者: TumiZhou 摘要: 这两年随着3D ...

  4. Git 底层数据存储结构与工作原理介绍

    前言 通过对 Git 底层 API 的使用来了解其存储结构与工作原理,通过了解工作原理可以帮助我们更好地解决各类 Git 代码版本管理操作上的问题. 介绍 Git 是一个内容寻址(content-ad ...

  5. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  6. Ubuntu目录结构简单介绍笔记

    一.Ubuntu目录结构简单介绍 Ubuntu目录结构简单介绍  /根目录   1.boot/启动文件.所有与启动有关的文件都保存在这里 ·grub/ Grub引导器相关的文件 2.dev/设备文件 ...

  7. python行与缩进_Python行结构与缩进的简单介绍

    本篇文章给大家带来的内容是关于Python行结构与缩进的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 行结构 Python程序中的每一条语句都以换行符结束.使用续行符()可 ...

  8. 图像处理方向就业前景(转我根据《浅谈图像处理方向的就业前景》和自己找工作的一些经验简单介绍一下图像处理方向就业前景, 希望能对后来者有所帮助! 1、请学好图像基本理论知识,笔试会遇到很多基础的题)

    我根据<浅谈图像处理方向的就业前景>和自己找工作的一些经验简单介绍一下图像处理方向就业前景, 希望能对后来者有所帮助! 转载自:https://blog.csdn.net/xujx09/a ...

  9. 【学习记录】Inception结构的简单介绍及Filter Concatenation的理解

    文章目录 [学习记录]Inception结构的简单介绍及Filter Concatenation的理解 Inception Filter Concatenation [学习记录]Inception结构 ...

最新文章

  1. 真正的 AI 内行盛会!智源大会带你刷新“世界第一”记录!
  2. 何恺明最新一作论文:无监督胜有监督,迁移学习无压力,刷新7项检测分割任务...
  3. ie浏览器 杂项样式错乱
  4. 测试JTable添加数据
  5. React Native之通过createStackNavigator实现携带参数的页面与页面之间的跳转
  6. oracle consistent gets,oracle构建一致性读
  7. if else if else语句格式_你还在用if/else吗?
  8. mysql基础之四:int(M)中M的含义
  9. DateTimeFormatter获取时间戳
  10. ET6.0服务器框架学习笔记(一、启动配置)
  11. 小学教师计算机国培培训总结,小学教师国培计划研修总结
  12. 圣杯布局和双飞翼布局
  13. JVM性能调优(一)(JVM参数详解、内存分析等)
  14. 为什么祖传代码被称为「屎山」?这个回答简直太形象了
  15. winform 两个区域保持固定距离_【麻辣烫】川渝区域零担十强分析:余氏东风、力展、宇鑫、金泓达快运、长吉、西部风、海风快运、绍平、迪丰、健隆......
  16. 可执行文件信息查看工具代码示例
  17. TC Games教你如何在电脑上玩手游梦幻西游,无需模拟器
  18. 使用Tensorflow 2进行猫狗分类识别
  19. L1-079 天梯赛的善良 (20 分) java
  20. Mysql基础到进阶精品视频教程附讲义文档 91课

热门文章

  1. 在 Java CAPS 中使用 LDAP
  2. PowerDesigner pdm生成Access的方法
  3. String和enum的互相转换
  4. 写给准备找工作的同志们!!!!(转载)
  5. (53)zabbix模板
  6. Python 的字符串转int
  7. spring14-----AOP之通知参数
  8. CentOS 7下安装Python3.6.4
  9. window安装swagger editor
  10. linux查看文件和文件夹大小