首页 > 其他分享 >EDMA3学习笔记1

EDMA3学习笔记1

时间:2025-01-21 11:31:46浏览次数:1  
标签:触发 PaRAM 学习 传输 笔记 寄存器 EDMA3 通道

1.1   EDMA3简介

EDMA3(Enhanced Direct Memory Access 3):增强型直接存储器访问的控制器。它是DSP中一个高级数据传输引擎,其结构适合数据的高速传输,可以在没有CPU主要参与的情况下,由控制器完成数据转移,主要服务外部内存(DDR)、片上内存(L2 SRAM)以及串口外设等。EDMA3控制器主要由两个模块组成:

EDMA3通道控制器(EDMA3CC),作为EDMA3控制器的用户接口,其参数主要包括:参数RAM(PaRAM)、通道控制寄存器、中断控制寄存器等。EDMA3CC负责软件请求或外设事件的优先级管理,向传输控制器发送传输请求(TR)。

EDMA3传输控制器(EDMA3TC),接受CC的TR,向传输的源和目的地址发出读写请求并执行数据传输。

1.2   EDMA3特征

① 提供三个维度完全正交的传输方式(三个维度之间不存在相互干扰);

EDMA3支持1D传输(A同步传输:一次触发值搬移ACNT个字节的数据,BCNT=1、CCNT=1)和2D传输(AB同步传输:一次触发只搬运ACNT*BCNT个字节数据,CCNT=1)这两种方式,不支持同步3D传输,但可以通过配置EDMA3为周期性事件触发模式,同时配置好CCNT的值,就可以实现ABC的3D传输,如下图。

NOTE:

A同步传输:以阵列为单位进行1D阵列传输(每个event/TR包只传输一个阵列的数据,因此为了完整服务PaRAM set 需要BCNT*CCNT个event),阵列中字节个数由ACNT决定,相邻阵列间隔由BIDX决定,相邻帧的间隔由CIDX决定(尾->首)。

AB同步传输:以帧为单位进行2D帧传输(每个event/TR包只传输一帧的数据,需要CCNT个event)帧中阵列间隔仍是BIDX决定,但CIDX是指帧之间的首地址间隔(首->首)。

A模式和AB模式详细关系如下:

 

② 可变的独立源地址和目的地址;

EDMA3在初始化时会设定源地址和目的地址,在EDMA3的传输过程中,其源地址和目的地址会不断往后偏移。

③ 支持事件同步传输、手动同步传输以及链接同步传输方式;

事件同步传输:外设、系统或者外部产生的事件触发请求

手动同步传输:CPU通过在对应的寄存器位(ESR/ESRH)上写1来进行主动触发产生发送请求

链接同步传输:一个发送的完成触发(当EDMA3CC提交了与当前传输相关的全部PaRAM set后,表示事件参数耗尽,通过重新加载参数集指针)另一次的发送(要终止发送,可以通过null传输来阻塞)

 NOTE:

Linking传输:当event对应的通道传输完成后,通过update(预设)PaRAM set中的LINK值且OPT中的STATIC位为0时,实现linking传输。其特点是不需要CPU中断的情况下实现循环传输的场景或ping-pong buffer。

Chaining传输:event在对应通道中完成传输或TR后对应的PaRAM无需update即可链接另一个event对应另一通道进行传输。

 EDMA3CC对待null和dummy传输时不同。

(当ACNT、BCNT、CCNT全0时)null传输是一次非法传输,事件缺失寄存器(EMR/QEMR)会置1,并且相关次要事件寄存器(SER/QSER)也会保持为1,这样会阻塞通道。

(当ACNT、BCNT、CCNT至少一个为0以及至少一个不为0时)dummy传输实现一次0字节的合法传输,EMR/QEMR不会置0,并且SER/QSER会被清0,保证通道不会阻塞后续传输。

④ EDMA3具有64个DMA通道,8个QDMA通道。256个PaRAM参数集。每一个通道都可以与给定的事件队列和PaRAM相关联。

⑤ EDMA3主要包括EDMA3CC(通道控制器)和EDMA3TC(传输控制器),EDMA3CC是用户控制EDMA控制器的接口,是EDMA3中用户编程的一部分。DEMA3CC包括PaRAM参数、通道控制寄存器以及中断控制寄存器。传输控制器EDMA3TC负责数据的搬移并分别向源地址和目的地址发出读写命令,源地址和目的地址是在EDMA3CC中设定的。

1.3   EDMA3CC

 

 

 

  1. DMA/QDMA channel logic:主要包括对外部事件的捕获,配置DMA/QMDA通道的寄存器以及配置不同触发类型的使能和状态寄存器。
  2. EDMA3 event和interruption处理寄存器:映射事件的参数设置,事件使能/去使能,中断使能/去使能,清除中断等。
  3. Event queues:事件检测逻辑和发送请求提交逻辑之间的接口。
  4. PaRAM:设置了数据传输的一些信息,例如源地址、目的地址、传输的数据大小,以及传输方式等信息。
  5. TR submission logic:将基于事件的PaRAM set向TC提交TR。
  6. Completion detection:可用作链接触发新传输或向DSP断言完成中断。
  7. Error detection:检测触发执行后产生的错误并向DSP断言错误中断。
  8. Memory protection:定义了主动存储保护和代理存储保护。

NOTE:队列深度为16,队列数量对应于TC数量。如果队列和TC都处于empty,new event可以绕过队列直接到PaRAM处理逻辑后向TC进行TR。这种情况下,event不会被event队列状态寄存器记录。

1.4   EDMA3TC

 

  1. DMA program register set:存储来自CC的TR。
  2. SRC active register set:为正在进行的读控制器存储TR中源端的传输上下文。
  3. Read controller:用于向源端发出数据读命令。
  4. DST FIFO register set:为正在进行的写控制器存储TR中目的端的传输上下文。
  5. Write controller:用于向目的端发出数据写命令。
  6. Data FIFO:临时存放读取来的in-flight数据。
  7. Completion interface:主要用于传输完成时向CC返回completion code,用于产生中断和链接event。

NOTE:

Q:为何SRC的寄存器集设置为普通的存储形式,而DST寄存器集设置为FIFO的存储形式?

 A:发出读请求后,可能需要等待较长周期来接受

 

1.5   PaRAM

EDMA3共有256个PaRAM参数集,DMA和QDMA的通道传输内容(源/目的地址、数量、索引值等)都是在PaRAM中设置的。用户可以将256个PaRAM映射到任意DMA通道或QDMA通道上,来控制传输控制器进行一定数据量的搬运。

 

 

PaRAM各字段含义

字段

含义

OPT

传输配置选项

SRC

数据源端地址

ACNT

一个array中的连续字节数

BCNT

一帧中的array数

DST

数据目的端地址

SRCBIDX

源BCNT索引值,数据源端提取时的array间隔

DSTBIDX

目的BCNT索引值,数据目的端排布时的array间隔

LINK

当前PaRAM耗尽时,用于LINK的PaRAM的地址

BCNTRLD

A同步传输时,BCNT耗尽时的重载值

SRCCIDX

源端CCNT索引值,数据源端提取时的帧间隔

DSTCIDX

目的端CCNT索引值,数据目的端排布时的帧间隔

CCNT

一个传输块中的帧数

 

1.6   DMA和QDMA的区别

DMA和QDMA通道的不同之处在于使用的触发条件不同。DMA的触发方式有三种:主动触发、事件触发以及链接触发。而QDMA的触发方式是通过配置PaRAM参数中的触发字后就会自动触发,链接触发与DMA比较类似。QDMA只能发送1D array的数据格式,而DMA可以发送1D、2D和3D的数据格式;DMA通道比QDMA通道优先级更高。

1.7   配置EDMA3发送的主要步骤

 

  1. DMA通道的初始化:

a.通道选择,包括通道类型选择以及通道号选择,特别是事件触发时,不同的事件绑定了不同的通道号(在主动触发方式下,可以任意选择通道号,但不可冲突。如果是事件触发模式,必须使用触发事件对应的通道号)。

b.通道映射,QDMA通道:用QCHMAP寄存器将PaRAM参数地址映射到使用的通道;

                     DMA通道:用DCHMAP寄存器对PaRAM参数地址映射到使用的通道;

c.通道分区配置,EDMA3CC寄存器分为全局寄存器、全局区域通道寄存器和shadow区域通道寄存器,若将某个通道配置为shadow区域,那么后续操作必须使用shadow区域的寄存器。

d.确定触发类型,选择DMA/QDMA通道并配置对应通道的使能寄存器。

e.根据DMA/QDMA通道来分配不同的事件队列上。

NOTE:

全局寄存器:位于EDMA3CC唯一且固定的内存映射处,其主要控制EDMA3资源映射、提供相应通道的可视化debug以及error tracking信息。

通道寄存器:包括DMA、QDMA以及中断寄存器

   2. PaRAM参数配置

将搬移的上下文信息配置到绑定通道的PaRAM中。

  3. 中断配置

PaRAM中的OPT字段中配置使能相应的中断,通过设置IESR/IESRH使能中断响应。

  4. 触发传输

a.事件触发,每当外部事件发生后,EDMA3自动传输一次数据。

b.手动传输,通过CPU手动配置ESR寄存器触发。

c.链接触发,根据linking或chaining的方式进行链接触发。

  5. 等待完成

a. 在中断复位函数中等待,按照3的中断配置,当传输完成后,EDMA3会通过设置IPR/IPRH(中断待处理寄存器)给DSP产生中断,完成后由ICR/ICRH(中断清除寄存器)进行清零。

b. 轮询寄存器,若未产生使能中断响应,要等待相应的IPR/IPRH置1,表示传输完成。

1.8   传输实例

外部存储向L2 SRAM进行data block copy

整块作为一个1D传输阵列的参数,并且OPT中的STATIC位置1禁止linking传输。

子帧提取

每个pixel是16bit半字=2 Byte 一共16*12-pixel子帧,作为一个frame进行AB传输,ACNT=2*16=32,BCNT=12

 

作为一个frame 2D传输的参数,其中OPT中的STATIC设置为1。

NOTE:AB的3D模式传输时,STATIC必须为0,即允许update parameter set(ACNT、BCNT、CCNT)或者允许linking传输,而2D传输时,STATIC位只对于是否进行linking传输有作用(预设Link Address)。

 

数据分类

对于多帧数据,可能会需要对其中的对应位置阵列进行重排列

每帧由1024个阵列组成,每个阵列由4个bytes组成,一共4帧。

ACNT=4、BCNT=1024、CCNT=4,SRCBIDX=1,SRCCIDX=1024*4=4096=1000h,DSTBIDX=4*4=16=10h,DSTCIDX=1

NOTE:SRCBIDX=1以及DSTCIDX=1时,数据存取时出现数据交叠,可能应用为滑窗数据取样?应用于神经网络卷积?

 

 

 

 

标签:触发,PaRAM,学习,传输,笔记,寄存器,EDMA3,通道
From: https://www.cnblogs.com/zeddchu/p/17604149.html

相关文章

  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
    ......
  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
    ......
  • 2025年最新AI大模型学习全攻略,学到就是赚到!
    AI大模型学习全攻略本文详细介绍了AI大模型的学习路线,包括基础数学与编程、机器学习入门、深度学习深入、实战应用与持续学习等阶段,并推荐了相关学习资源和实战项目,最后强调了持续学习与实践的重要性。前排提示,文末有大模型AGI-CSDN独家资料包哦!在人工智能领域,大模型以其......
  • 从零开始学习黑客技术,看这一篇就够了
    ......
  • 关于Web开发中vue的介绍以及发送异步请求的学习
    昨天,我再一次打开了黑马程序员中的Web开发教程,对于之前学习遗漏的进行了补充,了解了Vue其实是一个简化之后的JavaScript框架,主要利用了MVVM模型,在使用时需要引用Vue.js文件newVue({el:'#app',data:{message:'HelloVue!'}});在以上简单代码中,如果message中的数据发生变......
  • 深度学习实战花卉图像识别
      本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的特征提取能力,在多个图像分类任务中展现出卓越性能。本研究针对5种花卉数据集进行训练和优化,该数据集包含丰富的花卉图像样本,为模型的准确性和泛化能力提供了有力保障。通......
  • 折腾笔记[8]-使用rust去除灰度图的畸变
    摘要使用rust的image库,实现去畸变算法从而去除灰度图的畸变.UsetheimagelibraryofRust;manuallyimplementthedistortionremovalmethodtoremovethedistortionofthegrayscaleimage.关键词rust;image;关键信息[package]name="exp65-rust-ziglang-slambo......
  • [2025.1.20 JavaSE学习]类加载
    类加载基本说明反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载静态加载:编译时加载相关的类,如果没有则报错,依赖性太强动态加载:运行时加载需要的类,如果运行时不用该类,则不报错,降低了依赖性静态加载例子:Scannerscanner=newScanner(System.in);Stringke......
  • 高等代数笔记:线性相关与线性无关向量组
    目录什么是线性相关、线性无关?常用性质线性表出问题参考什么是线性相关、线性无关?定义1\(K^n\)中,向量组\(\bm{α_1,α_2,...,α_s}(s\ge1)\)是线性相关的,即\(K\)中有不全为0的数\(k_1,k_2,...,k_s\)使得\(k_1\bm{α_1}+k_2\bm{α_2}+...+k_s\bm{α_s}\)成立定义2\(K^n\)......
  • numpy学习记录
    一、库的导入importnumpyasnp二、python原生列表与numpy中的n维数组(ndarray)1、一维列表与ndarray的转换list1=[1,2,3,4,5]print(list1)print(type(list1))#列表转ndarrayoneArrary=np.array(list1)print(oneArrary)print(type(oneArrary))输出结果:......