DSP原理学习笔记--第七章--增强直接存储器访问(EDMA)

第七章 增强直接存储器访问(EDMA)

DMA 数据传输

在这里插入图片描述

  • 从 外部存储器 片内数据存储器
  • 到 片内数据存储器 片内程序存储器 外部存储器
  • 传输的实现: 由CPU控制实现数据传输,效率低 DMA直接存储器访问,效率高,不需CPU干预

EDMA的特点

  • C621x/C671x/C64x特有
  • EDMA控制器基于RAM结构
  • 比DMA的增强之处如下:
    • 提供了16个通道
    • 由事件触发相应通道的传输
    • 通道优先级可设置
    • 支持不同结构数据的传输链接 独特的快速DMA(QDMA)

EDMA控制器的结构

  • 参数RAM(PaRAM),设置通道入口和重新加载的参数
  • 事件和中断处理寄存器,使能或屏蔽事件、使能触发的类型、清除或处理中断
  • 传输完成检测,检测是否完成数据传输,并提交新的传输或产生CPU中断
    在这里插入图片描述

EDMA传输中的术语

  • 数据单元(element)的传输:单个数据单元从源地址向目的地址传输
  • 帧(frame):1组数据单元组成1帧,帧中的数据单元可以连续存放,也可以间隔存放,帧一般用于1维传输
  • 阵列(array): 1组连续的数据单元组成1个阵列,阵列一般用于2维传输
  • 块(block):多个帧或多个阵列的数据组成1个数据块
  • 1维传输:多个数据帧组成1个1维数据传输
  • 2维传输:多个数据阵列组成1个2维数据传输,第1维是阵列中的数据单元,第2维是阵列的个数。

EDMA传输方式

单元同步1维传输(FS=0)
在这里插入图片描述
帧同步1维传输(FS=1)
在这里插入图片描述
阵列同步2维传输(FS=0)
在这里插入图片描述
块同步2维传输(FS=1)
在这里插入图片描述

同步事件

  • 每个通道都与一个事件关联,由这些事件触发相应通道的传输,不能由多个事件触发
  • 事件寄存器(ER)负责捕获所有的事件,事件使能寄存器(EER)控制每一个事件的使能/禁止
  • 由事件信号的上升沿触发EDMA控制器
  • 如果有多个事件同时发生,则由事件编码器进行排序

EDMA通道与同步事件的对应关系

在这里插入图片描述

EDMA的参数RAM

  • 容量为2KB,总共可以存放85组EDMA传输控制参数,其内容包括三部分:
    • 16组EDMA通道入口参数,每组6个字
    • 用于重加载/链接的传输参数组,每组6个字
    • 空余“草稿区”,8个字节
  • 一旦事件发生器捕捉到某个事件,控制寄存器将从参数RAM的16组入口参数中读取事件对应的控制参数,送往地址发生器,发起传输

EDMA参数存储结构

选项参数(Options Parameter)
在这里插入图片描述

选项参数寄存器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

EDMA参数存储结构

  • 源地址(SRC)/目标地址(DST):32位,EDMA访问的起始源地址和目标地址,以字节为单位,通过OPT中的SUM/ DUM位设定对SRC/DST地址的修改方式。
  • 数据单元计数(ELECNT):存放1帧或1个阵列中的数据单元个数,有效范围1~65535。
  • 帧/阵列计数(FRMCNT):存放的是1-D数据传输中的帧计数,或是2-D数据传输中的阵列计数,最大值为65536。
  • 数据单元/帧/阵列索引(Element/Frame/Array Index):作为地址修改的索引值。数据单元索引只能应用于1-D传输,作为下一数据单元的地址偏移值(2-D传输不允许数据单元间隔存放)。帧/阵列索引用于控制下一帧/阵列的地址索引值。
  • 数据计数的重加载(Element Count Reload):用于在每帧最后一个数据元素传输之后,重新加载传输计数值。这一参数只应用于1-D传输中。
  • 连接地址(Link Address):当设定可选参数中LINK=1时,可以由连接地址确定下一个EDMA事件采用参数的装载/重装载地址,从而将多组EDMA传输参数形成EDMA传输链。

源地址参数的更新

在这里插入图片描述

目的地址参数的更新

在这里插入图片描述

EDMA的启动

两种方式启动EDMA:

  • CPU启动EDMA/非同步的EDMA,CPU通过写事件置位寄存器(ESR),强制触发对应事件,启动1个EDMA通道
  • 由事件触发的EDMA,事件锁存器一旦捕获到一个触发事件,并且事件本身已被使能,那么该事件将启动传输操作

多组EDMA传输参数的连接 (linking)

将不同的EDMA传输参数连接起来,组成一个参数链,为同一个通道服务
在这里插入图片描述

扫描二维码关注公众号,回复: 11187829 查看本文章

多个EDMA通道的链接(chaining)

  • 由一个EDMA通道的传输结束触发另一个EDMA通道的传输
  • 不同于EDMA连接(linking),EDMA连接是利用多组参数依次重加载某一个EDMA通道参数
  • 触发由当前通道的传输结束码对应的EDMA通道的传输

EDMA中断

  • 所有16个通道共用一个中断信号EDMA_INT,
  • 利用CIPR寄存器来判断发生了哪个事件
  • 通道的传输结束代码TCC值与CIPR位一一对应,不同的通道可以有相同的TCC,所以不同的通道可以产生完全相同的中断,处理相同的服务程序。
    在这里插入图片描述

EDMA中断

在这里插入图片描述
在这里插入图片描述
传输结束代码在TCC参数字段设置,允许的范围是0000b~1111b,直接与CIPR寄存器的低16 bit各个bit位对应。例如,TCC=1100b时,在传输结束后,CIPR12位被置1,此时如果CIER12=1,就会向CPU发出中断申请。

快速DMA(QDMA)

  • 几乎支持EDMA的所有传输模式,不支持参数连接
  • 两组寄存器,第二组是第一组的“伪映射”,每组包含5个寄存器,是C671x DSP搬移数据最有效的手段
    在这里插入图片描述
    在这里插入图片描述

QDMA的选项参数寄存器

在这里插入图片描述
QDMA传输要求采用帧同步(1-D)或块同步(2-D),1次搬移1帧(1-D)或1块(2-D)数据,因此选项参数寄存器中的FS字段无意义。
在这里插入图片描述
在这里插入图片描述

快速DMA(QDMA)

一个典型的QDMA操作如下:
QDMA_SRC = SRC_ADDRESS;//设置源地址
QDMA_DST = DST_ADDRESS; //设置目标地址
QDMA_CNT = NUM; //设置阵列的帧计数
QDMA_IDX = 0x00000000; //不采用索引
QDMA_S_OPT = 0x21B80001; //设定帧同步,1维源,2维目
// 标,启动传输

示例:0702

原创文章 10 获赞 4 访问量 1141

猜你喜欢

转载自blog.csdn.net/qq_40700822/article/details/106099088