C6678学习-EDMA

news2024/9/30 17:33:59

文章目录

        • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载滤波器组件焊锡开裂失效分析

案例背景 车载滤波器组件在可靠性试验后,主板上的插件引脚焊点发生开裂异常。 分析过程 焊点外观 说明:插件器件引脚呈现出明显的焊点开裂状态。 X-RAY检测 针对异常焊点的X-RAY检测: 说明:通孔(支撑孔)的透…

如何用ChatGPT做项目管理?

ChatGPT可以通过创建和维护跨团队项目协作计划,让员工更容易理解他们的角色和职责。这个协作计划里面会包括每个团队或个人要执行的具体任务,每个任务最后期限和任何事情之间的依赖关系。 该场景对应的关键词库:(24个&#xff09…

springboot框架开发医院云HIS 住院医生站、住院护士站功能实现

住院医生站主模块:包括医嘱管理、病案首页、分配入科、住院清单、我的质控等子模块 (1)医嘱管理功能简介 ①住院患者开立医嘱、支持医嘱复制、停止、作废等操作; ②医嘱类型含药品、项目、材料、嘱托; ③支持住院各…

(2022 IV) RCBEV

这篇是清华大学发表在IV(IEEE Transactions on Intelligent Vehicles)上的文章: Bridging the view disparity between radar and camera features for multi-modal fusion 3d object detection 文章信息讲得比较细致,非常值得一看&#xff…

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计

【人工智能】— 不确定性 不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联合概率分布公理完全联合分布概率演算独立性 贝叶斯法则例1例2 使用贝叶斯规则:合并证据朴素贝叶斯最大似然估计小结 不确定性 不确定性与…

osg::Drawable类通过setDrawCallback函数设置回调函数的说明

osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生,并重写drawImplementation函数,以实现自己特定的需求。这个回调函数每次在帧事件中都会被调用(如:在帧的…

SpringBoot定义优雅全局统一Restful API 响应框架二

这里解决之前留下来的问题,当程序没有正常返回时候 就是程序由于运行时异常导致的结果,有些异常我们可,能无法提前预知,不能正常走到我们return的R对象返回。这个时候该如何处理 在SpringBoot中,可以使用ControllerA…

AI 作画火了,如何用 Serverless 函数计算部署 Stable Diffusion?

作者:寒斜 立即体验基于函数计算部署 Stable Diffusion: https://developer.aliyun.com/topic/aigc AIGC 领域目前大火, 除了 Chatgpt,在文生图领域 Stable Diffusion 大放异彩,深刻的地影响着绘画、视频制作等相关…

古剑飞仙手游Linux系统服务器架设教程

安装宝塔直接运行命令即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 搭建环境: centos 7以上系统服务器 宝塔面板安装应用如下: Nginx1.14 mysql5.7 php5.6 1…

HNU-操作系统OS-实验Lab1

OS_Lab1_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 为了实现 lab1 的目标,lab1 提供了 6 个基本练习和 1 个扩展练习,要求完成实验报告。 对实验报告的要求: 基于 mark…

【CSS笔记】CSS动画效果(2d、3d)之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画

这篇文章,主要介绍CSS动画效果(2d、3d)之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画。 目录 一、2d动画 1.1、渐变色 (1)线性渐变色 (2)径向渐变色 (3&#xff0…

SpringBoot 基础

一、简介 SpringBoot用来简化Spring应用的初始搭建和开发过程, SpringBoot四大核心: 自动配置 起步依赖 Actuator 命令行界面 二、入门案例 1. 基于IDEA创建步骤 ① 创建新模块,选择Spring Initializr,并配置模块相关基础信息…

AI和GPT之间什么关系,GPT怎么推动AI发展

AI(人工智能)和GPT(Generative Pre-trained Transformer)都是与计算机技术相关的术语,但它们代表着不同层次的概念。以下是它们之间的区别: 定义: AI是指任何类型的计算机科学,如机…

【AWS入门】AWS Lamda

目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…

【前端】3.CSS基础知识

系列文章链接 1.背景知识与学习路线 2.HTML基础知识 3.CSS基础知识 4.JavaScript基础知识 文章目录 1. 基本概念1.1 CSS 定义1.2 CSS 用途1.3 CSS 支持的属性举例 2. CSS 基础语法2.1 demo2.2 选择器2.3 CSS创建2.3.1 外部样式表2.3.2 内部样式表2.3.3 内联样式 3. 总结3.1 CSS…

Linux线程:信号量

1. 信号量 &#xff08;1&#xff09;概念 信号量是非负整数计数器&#xff0c;表示当前可使用的公共资源的个数&#xff1b;主要用于进程或线程的同步或互斥。 信号量 > 0&#xff0c;则可访问公共资源&#xff0c;信号量&#xff1b;信号量 < 0&#xff0c;则阻塞。…

dreamer的创作纪念日

先来看看这张图&#xff1a; 创作者dreamer来到CSDN的第1024天 机缘 提示&#xff1a;可以和大家分享最初成为创作者的初心 最初开始写CSDN博客&#xff0c;初衷是为了记录&#xff1a;自己工作或学习中遇到的一些问题&#xff08;就像我的第一篇博客&#xff0c;就是刷Lee…

Windows powershell添加自定义快捷指令(Linux下也有)

Windows Powershell 1.创建并修改Windows Powershell 启动执行文件 echo $PROFILE编辑C:\Users\hongyang.jia\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 2.按照以下格式输入命令 function 别名 { 需要替代的命令 }例如我的Git简写命令 function gs {git sta…

dm5爬虫(selenium)

因为纯requests请求获取不到图片链接,所以用了selenium import requests import os from lxml import etree import re from selenium import webdriverurl https://www.dm5.com/manhua-qiangweishaonv/ # 漫画的url response requests.get(url) # 获取响应 print(response)…

PowerJob客户端连接

本文来说下PowerJob客户端连接 文章目录 启动服务端编写示例代码编写自己的处理器启动示例程序任务配置与运行配置任务创建任务执行结果运行结果问题及解决 本文小结 启动服务端 启动服务端&#xff1a;http://127.0.0.1:7700/#/oms/home 编写示例代码 进入示例工程&#xff08…