C6678学习-EDMA

文章目录

        • 1、简介
          • 1. EDMA3概述
          • 2、EDMA3的组成
          • 3、EDMA3的工作流程
          • 4、EDMA3通道控制器(EDMA3CC)
          • 5、触发方式
        • 2、EDMA3的传输
          • 1、传输数据块的定义
          • 2、传输类型
          • 3、参数PaRAM
          • 4、通道
          • 5、OPT参数
        • 3、补充
          • 1、EDMA3通道控制器区域

1、简介

1. EDMA3概述

基于C66x的内核处理器主要具有两种DMA传输:IDMA、EDMA3。

IDMA:只提供核内部(L1P、L1D、L2、CFG)的数据移动服务。C6678处理器中,IDMA具有两个通道。

EDMA3:服务外部内存(比如DDR)、服务芯片内的内存(比如:L2 SRAM)、服务外设,比如:串口

2、EDMA3的组成

EDMA3控制器主要由两部分构成:EDMA3通道控制器(EDMA3CC)和EDMA3传输控制器(EDMA3TC)

EDMA3通道控制器(EDMA3CC),充当EDMA3控制器的用户接口,EDMA3CC包括:参数RAM(PaRAM)通道控制寄存器、中断控制寄存器。EDMA3CC负责软件请求或外设事件的优先级管理,向传输控制器发布传输请求(TRs)。

EDMA3传输控制器(EDMA3TC),依附于EDMA3通道控制器,负责数据传输,EDMA3TC向编程传输的源和目的地址发布读写请求。

EDMA3TC的大多数寄存器是只读的,用户一般不会对这些寄存器进行编程。EDMA3CC有高度的可编程性,用户可以设置各种传输方式。

EDMA具有三个通道控制器(CC0、CC1、CC2)和10个传输控制器(CC0TC0、CC0TC1,CC1TC0、CC1TC1、CC1TC2、CC1TC3,CC2TC0、CC2TC1、CC2TC2、CC2TC3)。

CC0有16个DMA通道,8个QDMA通道,16个中断通道,2个事件队列,队列深度为16,2个传输控制TC,一个事件队列对应一个TC;CC1有64个DMA通道,8个QDMA通道,64个中断通道,4个事件队列,队列深度为16,4个传输控制TC,一个事件队列对应一个TC;CC2有64个DMA通道,8个QDMA通道,64个中断通道,4个事件队列,队列深度为16,4个传输控制TC,一个事件队列对应一个TC。如下图所示

在这里插入图片描述

3、EDMA3的工作流程

在这里插入图片描述

首先编程者先配置DMA/QDMA通道逻辑参数,然后参数传送给事件队列,事件队列获取PaRAM参数,探后提交传输请求到传输控制器。传输控制器来完成传输。传输完成后通道控制器的传输完成检测会收到传输控制器的请求,通道控制器向CPU提交传输完成中断。

4、EDMA3通道控制器(EDMA3CC)

在这里插入图片描述

EDMA3有3中触发方式,事件触发、手动触发、链接触发,它们由寄存器配置。事件触发后会通过优先级编码器仲裁,将高优先级送往队列,经过队列后,通道映射根据事件所对应的通道来选择参数集(在此之前通道和参数集已经做了映射了),然后提交传输请求。传输完成后通道控制器的传输完成检测会收到传输控制器的请求,通道控制器向CPU提交传输完成中断。

5、触发方式

1、DMA通道有3种触发方式:

事件触发:当一个触发事件锁存到ER寄存器就会启动相应通道的EDMA3(CPU必须先通过EER使能该事件)

手动触发:CPU可以通过写ESR启动一个EDMA3通道
链接触发:由一个EDMA3通道的结束来触发,启动另一个EDMA3

2、QDMA通道有触发方式:

自动触发:PaRAM里设置为触发字的域被写入值后,触发传输(通过QCHMAPn寄存器设置PaRAM的哪个域作为触发域)。
QDMA与DAM的主要的不同就是触发方式的不同

2、EDMA3的传输

1、传输数据块的定义

在这里插入图片描述

每一个EDMA3传输数据都是可以看做一个三维的数据,这个数据的大小
由ACNT,BCNT,CCNT来描述。

第1维或阵列(A):一个传输的第1维是由ACNT个连续字节。

第2维或帧(B):一个传输的第2维是由BCNT个ACNT字节的阵列。第2维里的每个阵列传输通过一个索引彼此分开,这个索引使用SRCBIDX和DSTBIDX来配置。

第3维或块(C):一个传输的第3维是由CCNT个帧,每个帧由BCNT个阵列,而每个阵列有ACNT个连续字节。第2维里的每个传输由以一个索引同前一个分开,这个索引使用SRCCIDX或DSTCIDX来配置。

2、传输类型

A传输类型:每次传输一个阵列,也就是ACNT个字节。传输一个ACNT x BCNT x CCNT的数据块总共需要传输BCNT x CCNT次。

如果EDMA3搬运的是一片连续的内存,则SRCBIDX=DSTBIDX=ACNT,SRCCIDX=DSTCIDX=ACNT。

AB传输类型:每次传输一帧,也就是ACNTxBCNT个字节。传输一个ACNT x BCNT x CCNT的数据块总共需要传输 CCNT次。

如果EDMA3搬运的是一片连续的内存,则SRCBIDX=DSTBIDX=ACNT,SRCCIDX=ACNTxBCNT。

3、参数PaRAM

在这里插入图片描述

参数RAM存放每个EDMA3通道需要的传输控制参数。每个EDMA3事件对应一个参数组,每组包括8个字(32字节),在C6678中总共有512个参数组。

OPT 传输配置选项

SRC 数据来源端的字节地址

ACNT 一个array中的连续字节数

BCNT 一帧中的array数

DST 数据目的端的字节地址

SRCBIDX 源BCNT索引值,用于指示传输帧中,数据源的阵列array的间隔

DSTBIDX 目的BCNT索引值,用于指示传输帧中,数据目的端的阵列array的间隔

LINK 用于链式传输,一个通道的DMA3传输完成后,下一个EDMA3传输的PaRAM参数的地址

BCNTRLD A同步传输时,BCNT减到0时的重载值

SRCCIDX 源CCNT索引值,用于指示传输帧中,数据源的帧间的间隔

DSTCIDX 目的CCNT索引值,用于指示传输帧中,数据目的端的帧间的间隔

CCNT 一个传输块中的帧数

4、通道

EDMA通道编号:控制器0是16个DMA通道加8个QDMA通道,编号顺序是0-23; 控制器1/2是64个DMA通道加8个QDMA通道,编号顺序是0-71;QDMA的通道编号在最后8个。

通道需要和参数集做映射,这样传输通道才可以根据通道映射来选择参数集。

/*函数名称: int edma3Transfer(const tEdmaTransCfg *cfg);中的部分代码*/
/* 打开指定的QDMA 通道*/ 
    chParam.regionNum = regionNum;
    chParam.chaNum = cfg->chanNo;
    hChannel = CSL_edma3ChannelOpen(&chObj0, cfg->edmaNo, &chParam, &edmaStat);

    /* 将QDMA 通道 映射到指定的参数入口*/
    chSetup.paramNum = chParam.chaNum;
    CSL_edma3HwChannelSetupParam(hChannel, chSetup.paramNum);

    /* 获取指定的参数入口句柄 */
    paramHandle = CSL_edma3GetParamHandle(hChannel, chSetup.paramNum, &edmaStat);
         
    /* 使用paramSetup信息来配置参数入口 */
    CSL_edma3ParamSetup(paramHandle, &paramSetup);

    /* 使能指定通道 */
    CSL_edma3HwChannelControl(hChannel, CSL_EDMA3_CMD_CHANNEL_ENABLE, NULL);
5、OPT参数

在这里插入图片描述

FWID:FIFO 宽度,应用于SAM 或者DAM 至少有一个设置成固定地址模式

DAM:目的地址模式。

置0:递增(INCR)模式。目的地址在一个数列里是递增的。目的不是一个FIFO。

置1:固定地址(CONST)模式。目的地址在一个FIFO 中循环。

SAM:源地址模式。

置0:递增(INCR)模式。源地址在一个数列里是递增的。源不是一个FIFO。

置1:固定地址(CONST)模式。源地址在一个FIFO 中循环。

SYNCDIM:同步传输模式。

置0:A-同步传输。每个触发事件传输一个数列(ACNT 字节)。

置1:AB-同步传输。每个触发事件传输BCNT个数列(ACNT x BCNT字节)。

STATIC:静态PaRAM集。
置0:RAM 参数集非静态:TR 被提交后RAM 参数集将更新或链接。0 值用于DMA 通道或QDMA 传输连接列表中的非最终的传输。

置1:RAM 参数集为静态:TR 被提交后RAM 参数集不发生更新或链接。1 值用于单独的QDMA 传输或者QDMA传输连接列表中的最终的传输。

如果数据块可以一次性传输玩,则不需要更新,如果数据块需要多次传输才能传输完,则需要更新。例如:一个数据块的大小如果只有一个阵列,那么A同步传输一次就传输完了,那么RAM就不需要更新了,但是如果是一个帧,那么用A传输模式就需要传输BCNT次,并且每次传输完成后,下一次传输的源地址和目的地址都会相应的改变,并且BCNT会减1,所以RAM中的参数需要更新。

TCC:传输完成编码,这6 位用于设置链接使能寄存器的相应位(CER[TCC])用于链接或者中断挂起寄存器相应位(IPR[TCC])用于中断.

TCCMOD:传输完成编码模式。:

置0:正常完成模式。在数据完全被传输后,才算一个传输完成

置1:提前完成模式。当EDMA3CC 提交一个传输请求给EDMA3TC 时就算一个传输完成.触发中断或者链接时传输请求可能仍然在传输数据。

ITCINTEN:内部传输完成中断使能,当使能,每当完成PaRAM集里的一个TR(PaRAM集里最后一个TR除外),就会产生一次传输完成中断。

置0:禁止内部传输完成中断

置1:使能内部传输完成中断

TCINTEN:传输完成中断使能。当使能,当完成PaRAM集里最后一个TR才产生一次
完成中断。

置0:禁止传输完成中断

置1:使能传输完成中断

ITCCHEN:内部传输完成链接使能。当使能,每当完成PaRAM集里的一个TR(PaRAM集
里最后一个TR除外),就会产生一次链接。

置0:禁止内存传输完成链接

置 1:使能内部传输完成链接

TCCHEN:传输完成链接使能。当使能,当完成PaRAM集里最后一个TR才产生一次
链接。

禁止传输完成级联

使能传输完成级联

链接(Link)传输的配置:STATIC必须为0;LINK地址设置;TCCHEN置1(一般不会用到ITCCHEN置1);

Chain链接模式和Link连接模式是完全不同的模式,Chain模式中没有PaRAM set 的参数的更新,而是一个通道的传输完成直接触发了另一个通道,实现连续的数据的搬运的效果,但是Link模式就是同一个通道上的参数的不断的更新,从而达到连续的数据搬运的效果。

/***EDMA传输中配置项结构体****/
typedef struct T_EDMA_TRANS_CFG
{
    /**@brief 数据传输的源地址模式 INCR/CONST */
    unsigned short srcAddrMode;
    /**@brief  数据传输的目的地址模式 INCR/CONST */
    unsigned short dstAddrMode;
    /**@brief  FIFO宽度,仅在CONST地址模式下有效*/
    unsigned short fifoWidth;
    /**@brief 数据的超时等待时间,ms为单位 */
    unsigned short timeOut;
    /**@brief EDMA控制器编号,0-2 */
    unsigned short edmaNo;
    /**@brief EDMA通道编号*/
    unsigned short chanNo;
    /**@brief  EDMA传输的源地址 */
    unsigned int srcAdrs;
    /**@brief  EDMA传输的目的地址 */
    unsigned int dstAdrs;
    /**@brief  EDMA传输的一维数据长度参数 */
    unsigned short aCnt;
    /**@brief  EDMA传输的二维ARRAY数量参数 */
    unsigned short bCnt;
    /**@brief  EDMA传输的二维FRAME数量参数 */
    unsigned short cCnt;
    /**@brief  二维EDMA传输的源地址的修改参量 */
    short srcBIndex;
    /**@brief  二维EDMA传输的端地址的修改参量 */
    short dstBIndex;
    /**@brief  三维EDMA传输的源地址的修改参量 */
    short srcCIndex;
    /**@brief  三维EDMA传输的端地址的修改参量 */
    short dstCIndex;
    /**@brief 1:阻塞模式,0:中断模式,非阻塞 */
    unsigned char isBlocking;
}tEdmaTransCfg;

3、补充

1、EDMA3通道控制器区域

EDMA3CC 内存映射寄存器可以被分为三个主要类型:

  1. 全局寄存器
  2. 全局区域通道寄存器
  3. 影子区域通道寄存器

全局寄存器的地址是唯一固定的,这些寄存器控制着EDMA3的资源映射。

通道寄存器是通道控制相关的寄存器,可以通过全局通道区域访问,也可以通过影子通道访问。影子通道寄存器就是全局通道区域寄存器的备份,配置影子通道寄存器的数据,最终还是会被写入到全局区域寄存器中。

EDMA3 通道控制器(EDMA3CC)将地址空间分为多个影子区域(region)。在多核设备中可以减少资源冲突

DRAEm:寄存器的每一个位对应一个DMA通道。

QRAEm:寄存器的每一个位对应一个QDMA通道。

参考:http://www.digoboy.com/video/id_4438.html

https://blog.csdn.net/u012384044/article/details/51939829

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea使用git遇到的小问题

idea使用git遇到的小问题 前置说明颜色含义中文插件修改提交的用户名 前置说明 idea版本为2022专业版 github需要自己会科学上网 颜色含义 在idea中使用github后,会发现项目中会有各种各样的颜色,如图所示文件全为绿色 这颜色含义分别为:…

亚马逊、Lazada、阿里国际、eBay、Temu、Ozon好消息不断,机会来了

1. 亚马逊第一季度营收1273.58亿美元 同比扭亏为盈 亚马逊2023财年第一季度财报。亚马逊第一季度净销售额为1273.58亿美元,与上年同期的1164.44亿美元相比增长9%,不计入汇率变动的影响为同比增长11%;净利润为31.72亿美元,上年同期…

牛客网---CM11 链表分割 代码详解+哨兵位的比较

文章目录 前言CM11 链表分割链接:方法一:尾插(带哨兵位)1.1 思路:1.2 代码:1.3 流程图1.4 注意点 方法二:尾插(不带哨兵位)2.1代码: 对比: 总结 前言 独处未必孤独喜欢就是自由 本章的内容是牛…

xawtv涉及的vivid系统调用分析

xawtv涉及的vivid系统调用分析 文章目录 xawtv涉及的vivid系统调用分析调用过程分析摄像头驱动程序必需的11个ioctl非必须必须 分析数据的获取过程1.请求分配缓冲区: ioctl(4, VIDIOC_REQBUFS // 请求系统分配缓冲区2.查询映射缓冲区:3.把缓冲区放入队列:4.启动摄像头5.用selec…

Shell+VCS学习2

Shell脚本常见问题 rm -f $2~ while read line 【最佳】形如while read line;do echo $line;done <test使用输入重定向的方式则每次只占用一行数据的内存&#xff0c;而且是在当前shell环境下执行的&#xff0c;while内的变量赋值、数组赋值在退出while后仍然有效。 nam…

Jetson Nano emmc版本系统镜像备份和烧录

一、镜像备份 1&#xff0e;将待复制的jetson设备进入恢复模式&#xff0c;用数据线连接jetson设备和主机。 对于原厂开发板将FC_REC引脚与GND短接&#xff0c;通过micro-usb到usb数据线连接到电脑。 在电脑的ubuntu通过lsusb命令查看需要备份的设备是否已经接入&#xff0c…

【VAR | 时间序列】以美国 GDP 和通货膨胀数据为例的VAR模型简单实战(含Python源代码)

以美国 GDP 和通货膨胀数据为例&#xff1a; 1. 数据集 下载数据我们需要从 FRED 数据库下载美国 GDP 和通货膨胀数据&#xff0c;并将它们存储在 CSV 文件中。可以在 FRED 网站&#xff08;https://fred.stlouisfed.org/&#xff09;搜索并下载需要的数据。在这里&#xff0…

Transformer结构细节

一、结构 Transformer 从大的看由 编码器输入、编码器、解码器、解码器输入和解码器输出构成。 编码器中包含了词嵌入信息编码、位置编码、多头注意力、Add&Norm层以及一个全连接层&#xff1b; 解码器中比编码器多了掩码的多头注意力层。 二、模块 2.1 Input Embeddi…

测试从业第 3 年,我看到了终点......

先说明&#xff0c;今天的内容&#xff0c;是写给想成为高级测试开发、自动化测试专家的人看的&#xff0c;因为&#xff0c;它可能颠覆你的认知。 众所周知&#xff0c;如今无论是大厂还是中小厂&#xff0c;自动化测试基本是标配了&#xff0c;毕竟像双11、618 这种活动中庞…

基于AT89C51单片机的电子密码锁设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87760996?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; &#xff08;1&#xff09;本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。 &a…

基于web的课程重难点掌握情况分析系统

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

链表(数据结构)

目录 链表 链表的分类 1、单向或者双向 2、带头或者不带头 3、循环或者非循环 总结&#xff1a; 单链表 创建链式结构 创建新节点 尾插 尾删 头插 头删 查找节点 在pos位置后插入 删除pos位置后的节点 销毁 总代码 链表 概念&#xff1a; 链表是一种物理结构上非连续的、非顺序…

用于无线传感器网络路由的改进leach协议(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 当前&#xff0c;无线传感器由于技术的发展得到更加广泛的应用&#xff0c;针对无线传感器网络&#xff08;WSN&#xff09;的…

CCED2000后,中文编程软件再次脱颖而出,系出金山

WPS抗衡微软&#xff0c;CCEDE却被淹没&#xff1f; DOS代&#xff0c;我们用WPS来进行文字编辑&#xff0c;CCED来做表格&#xff0c;两者在那个时代可以称得上是国产办公领域的“必装软件”。 如今&#xff0c;30年过去了&#xff0c;WPS一步一步成长为抗衡微软office的国产…

魔兽服务端编译部署NPCBots和 Al机器人模块教程

魔兽服务端编译部署NPCBots和 Al机器人模块教程 大家好,我是艾西。在平时自己一个人玩魔兽的时候是不是会比较无聊,因为游戏机制或副本难度自己一个人无法进行快乐的玩耍。今天艾西教大家编译部署NPCBots和 Al机器人模块,直接一个人玩魔兽也不孤单 首先到GIT去下载ai机器…

类与对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成。…

法规标准-UN R152标准解读

UN R152是做什么的&#xff1f; UN R152 全名为关于M1和N1型机动车高级紧急制动系统&#xff08;AEBS&#xff09;型式认证的统一规定&#xff0c;是联合国对于M1和N1型车辆AEBS系统认证的要求说明&#xff0c;当满足其要求内容时&#xff0c;才可通过联合国的认证&#xff0c…

Node【Node.js 20】新特性

文章目录 &#x1f31f;前言&#x1f31f;Node.js 20: 一次重要的升级和改进&#x1f31f;Internationalization API Update&#x1f31f;端口管理器&#x1f31f;字符串处理&#x1f31f; 更好的调试工具&#x1f31f; Crypto模块的更新&#x1f31f;总结&#x1f31f;写在最后…

MPSOC(ZU9EG/ZU15EG)PCIE架构高性能数据预处理 FMC载板设计资料

板卡概述 PCIE707 是一款基于 PCIE 总线架构的高性能数据预处理 FMC载板&#xff0c;板卡具有 1 个 FMC&#xff08;HPC&#xff09;接口&#xff0c;1 路 PCIe x4 主机接口、 1 个 RJ45 千兆以太网口、2 个 QSFP 40G 光纤接口。板卡采用 Xilinx 的高性能 UltraScale MPSOC 系…

linux用户管理指令

这里写自定义目录标题 一 增加新用户及密码二 切换用户三 userdel 删除用户四 查看用户登录信息五 让普通用户成为管理员1. 修改环境配置文件2.设置用户和密码 六 查看创建哪些用户 一 增加新用户及密码 useradd:加用户名 passwd&#xff1a;加用户密码 [rootlocalhost ~]# u…