NXP EMDA学习(1):TCD寄存器详解

news2024/9/27 7:20:59

eDMA(Enhanced DMA)即增强型DMA,它是NXP芯片中独有的功能,其最重要的一个特性也是eDMA的核心就是TCD(Transfer Control Descriptor)即传输控制描述符。所以,我们就来看一下这个结构体中各个字段的内容的含义,对这些字段有一个基础印象,这样在后续代码中使用到的时候才不会摸不着头脑,到时候再回来看这些寄存器的定义也能理解地更加深刻。


每一个DMA通道都需要一个32字节的TCD来决定每次的数据传输操作,每个TCD都按DMA通道0~15的顺序保存在内存中。
在这里插入图片描述
图中出现的寄存器的含义如下:

1、SADDRSOFF

Field(DMA_TCDn_XXX)Description
SADDR(Souce address)源地址
SOFF(Source address signed offset)在读取完一次源地址中的数据后,源地址的偏移(有符号)

2、TCD Transfer Attributes

ATTR(TCD Transfer Attributes)TCD传输属性寄存器,包含以下4个字段
SMOD[15:11] (Source Address Modulo)源地址的模(顾名思义,可以用来实现循环缓冲区):该字段为0为disable,非0时该值可以理解为循环缓冲区的长度所占的位数,SOFF设置为循环缓冲区的长度
SSIZE[10:8] (Source data transfer size)源数据传输大小(8/16/32bit或16/32 byte burst),其中burst传输是防止使用DMA FIFO时最后合并数据时被打断
DMOD[7:3] (Destination Address Modulo)目标地址的模,同SMOD
DSIZE[2:0] (Destination data transfer size)目标数据传输大小,同SSIZE

3、TCD Minor Byte Count

该字段分为三种情况,分别为失能次循环映射、使能次循环映射但没有使用和使能次循环映射且使用,不同情况下寄存器中各个位的含义都不同

(1)失能minor loop mapping(CR[EMLM]=0)

DMA_TCDn_NBYTES_MLNODescription
NBYTES[31:0] (Minor Byte Transfer Count)每次请求DMA后传输的字节数,当该值减为0后,SADDR和DADDR的值会重新写入TCD中,主循环计数也减一并保存到TCD中,如果主循环计数减到0,则会执行其他操作

(2)使能minor loop mapping(CR[EMLM]=1)

此时有两种情况:使用和不使用次循环映射,使用与否是通过设置0008H的最高两位的两个字段SMLOEDMLOE来判断的。

FieldDescription
SMLOE[31] (Source Minor Loop Offset Enable)是否在每次次循环完成后将次循环的偏移量加到源地址SADDR上
DMLOE[30] (Destination Minor Loop Offset Enable)是否在每次次循环完成后将次循环的偏移量加到目标地址DADDR上

SMLOE=0DMLOE=0

DMA_TCDn_NBYTES_MLOFFNODescription
NBYTES[29:0] (Minor Byte Transfer Count)同前面NBYTES的描述

SMLOE=1DMLOE=1

DMA_TCDn_NBYTES_MLOFFYESDescription
MLOFF[29:10]在每次次循环完成后,源地址或目标地址的偏移量(有符号)
NBYTES[29:0] (Minor Byte Transfer Count)同前面NBYTES的描述

4、SLASTDADDRDOFF

Field(DMA_TCDn_XXX)Description
SLAST(Last Souce Address Adjustment)在每次主循环完成后,源地址的偏移量(该寄存器用补码来表示正负数)
DADDR(Destination Address)目标数据的地址
DOFF(Destination Address Signed Offset)每次目标写操作完成后,目标地址的偏移量(有符号)

5、TCD Current Minor Loop Link, Major Loop Count(TCDn_CITER寄存器)

该寄存器的最高位为ELINK

FieldDescription
ELINK[15] (Enable to-channel linking on minor-loop complete)当一个DMA通道完成了次循环,它可以链接到另一个通道。1为使能通道链接,0为失能。

(1)ELINK=1

此时TCDn_CITER寄存器也称为DMA_TCDn_CITER_ELINKYES寄存器,除了最高位ELINK外的字段如下:

DMA_TCDn_CITER_ELINKYESDescription
Reserved[14:13]保留
LINKCH[12:9] (Minor Loop Link Channel Number)在次循环完成后,eDMA引擎通过设置TCD_CSR的START位来初始化一个通道服务来请求链接通道,该通道号由此字段指定
CITER[8:0] (Current Major Iteration Count)表示当前DMA通道的主循环计数

(2)ELINK=0

此时TCDn_CITER寄存器也称为DMA_TCDn_CITER_ELINKNO寄存器,除了最高位ELINK外的字段如下:

DMA_TCDn_CITER_ELINKYESDescription
CITER[14:0] (Current Major Iteration Count)表示当前DMA通道的主循环计数

6、TCD Last Destination Address Adjustment/Scatter Gather Address

DMA_TCDn_DLASTSGADescription
DLASTSGA[31:0] (Destination last address adjustment or the memory address for the next transfer control descriptor to be loaded into this channel i.e. scatter/gather)当ESG位(下面介绍)为0时,该字段表示主循环完成后加到目标地址的值(改字段用补码来表示正负数);当ESG位为1时,该地址指向一个32位的TCD,用于每次主循环结束时重新加载此TCD到内存中(scatter/gather模式)

7、TCD Control and Status

DMA_TCDn_CSRDescription
BWC[15:14] (Bandwidth Control)控制eDMA消耗的总线带宽,通常在进行次循环时,会一直执行到计数值为0,而该字段可以在次循环的每一次读写完成后暂停
Reserved[13:12]保留
MAJORLINKCH[11:8] (Major Loop Link Channel Number)主循环链接通道号,0为不使用通道链接,否则在每次主循环计数器减为0时,eDMA引擎通过设置START位来初始化一个通道服务来请求链接通道
DONE[7] (Channel Done)指示eDMA完成了主循环,在CITER计数减为0时置位。向该位写0可以清除该位,或者在每次激活通道时由硬件清除
ACTIVE[6] (Channel Active)指示DMA通道是否正在执行数据搬运,在通道服务开始时置位,在次循环完成后或产生任意错误后清零
MAJORELINK[5] (Enable channel-to-channel linking on major loop complete)当主循环完成后,若该字段设为1则允许连接到另一个通道,通道号由MAJORLINKCH指定。目标通道会在START位置位后,初始化通道服务请求
ESG[4] (Enable Scatter/Gather Processing)使能Scatter/Gather特性,当主循环完成后,将加载DLASTSGA指向的TCD到实际通道的TCD内存中
DREQ[3] (Disable Request)当该位为1时,eDMA硬件会在主循环计数减为0时清除DMA_ERQ中对应通道的位来关闭DMA请求
INTHALF[2] (Enable an interrupt when major counter is half complete)当该位为1时,在主循环计数到一半时产生一个中断(需要打开相应中断掩码)
INTMAJOR[1] (Enable an interrupt when major iteration count completes)当该位为1时,在主循环计数到0时产生一个中断(需要打开相应中断掩码)
START[0] (Channel Start)当设置该位为1时,DMA通道开始请求服务,在DMA通道开始执行后,该位被硬件置1

8、TCD Beginning Minor Loop Link, Major Loop Count(TCDn_BITER寄存器)

该寄存器的最高位与TCDn_CITER一样为ELINK

FieldDescription
ELINK[15] (Enable to-channel linking on minor-loop complete)当一个DMA通道完成了次循环,它可以链接到另一个通道。1为使能通道链接,0为失能。注意:当软件更改TCD时,该字段必须等于CITER中对应的字段;当主循环计数完成后,该字段的值会加载到CITER中

(1)ELINK=1

此时TCDn_BITER寄存器也称为DMA_TCDn_BITER_ELINKYES寄存器,除了最高位ELINK外的字段如下:

DMA_TCDn_BITER_ELINKYESDescription
Reserved[14:13]保留
LINKCH[12:9] (Minor Loop Link Channel Number)在次循环完成后,eDMA引擎通过设置TCD_CSR的START位来初始化一个通道服务来请求链接通道,该通道号由此字段指定
BITER[8:0] (Starting Major Iteration Count)表示当前DMA通道的开启主循环计数。当软件更改TCD时,该字段必须与CITER中对应的字段相同;当主循环计数完成后,该字段的值会被加载到CITER中
  • BITER(初始主次循环计数寄存器)就是在每次主循环计数结束后加载到CITER(当前主次循环计数寄存器)中

(2)ELINK=0

此时TCDn_BITER寄存器也称为DMA_TCDn_BITER_ELINKNO寄存器,除了最高位ELINK外的字段如下:

DMA_TCDn_BITER_ELINKYESDescription
CITER[14:0] (Current Major Iteration Count)表示当前DMA通道的主循环计数,当软件更改TCD时,该字段必须与CITER中对应的字段相同;当主循环计数完成后,该字段的值会被加载到CITER中

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

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

相关文章

位置检测有哪些传感器可以用?(带磁编码器AS5600代码)

常见的有三种 编码器、霍尔传感器、磁传感器。 编码器一般指AB相正交脉冲的增量器件,有的还会有一个Z相信号,用来指示零位; 霍尔传感器一般是指ABC三个成120度角度间隔排列的器件,这种传感器一般集成在电机内部,电机…

[Amazon]人工智能入门学习笔记---AI-机器学习-深度学习

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &a…

基于模型预测控制的波浪能转换器(WEC)研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Flink简介

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 前言 流计算产品实时性有两个非常重要的实时性设计因素,一个是待计算…

基于 Docker 的 Neo4j 部署及数据备份与恢复

目录一、部署二、验证三、备份3.1 离线备份3.2 在线备份3.3 社区版备份一、部署 1、pull 镜像 docker pull neo4j:4.4.16-community2、创建目录 mkdir -p /home/data/neo4j/{data,logs,conf,import,db-backup}3、运行容器 docker run -itd \--name neo4j \--restart always…

openwrt-看门狗watchdog

一、硬件watchdog和软件watchdog Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动,软件watchdog基于内核的定时器实现,当内核或中断出现异常时,软件watchdog是无法复位系统…

二叉树17:路径总和

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:112. 路径总和 112. 路径总和 题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判…

判断图中有没有证件图片

整体解决思路: 前提:拍摄场景光线稳定,证件没有放在图像边缘;且图片使用的证件阅读器拍摄的红外图片,采用了开灯和关灯各拍摄一张图片,图像相减,进行了背景去除; 1)使用二值化和膨胀腐蚀以及sobel算子等进行图像的预处理; 2)进行凸包计算,通过角度,进行证件区域…

缓存穿透,缓存雪崩,缓存击穿的超详解

文章目录1、缓存穿透问题的解决思路2、缓存雪崩问题及解决思路3、缓存击穿问题及解决思路1、缓存穿透问题的解决思路 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,失去了缓存的意…

pytorch数据dataset的三种读取方式

文章目录1.自带的datasets2.ImageFolder3.自己创建的dataset(用的多)1.自带的datasets pytorch自带的数据集 具体数据集如下: 用法: 可以用的功能 2.ImageFolder 文件形式如下时用此:(一个文件下只…

MyBatis框架 入门案例

二刷复习简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Jav…

磨金石教育科技摄影技能干货分享|艺术摄影的本源是创作,核心是表达

艺术类的作品一直都有一个风格,那就是抽象。特别是摄影领域,一幅作品如果缺乏创意,只是展现现实的景物,那么很容易就变成了纪实摄影或者风光摄影。因此,要想让作品突出艺术性,就要再原有的画面上&#xff0…

Exynos_4412——中断处理(中断学习结尾篇)

目录 一、ARM的异常处理机制 1.1异常概念 1.2异常处理机制 1.3ARM异常源 1.4异常模式 1.5ARM异常响应 1.6异常向量表 1.7异常返回 1.8IRQ异常举例 二、工程模板代码结构 三、中断处理框架搭建 四、中断处理程序 五、用key3再试一试 前景提要: Exynos_…

利用Model Inspector的建模规则检查

利用Model Inspector的规则检查 Model Inspector是一种基于模型的软件静态验证自动化解决方案。通过对模型进行规则检查,开发人员的工作成本将减少,开发效率将会大大提高。 Model Inspector支持各种行业标准建模规范,对违反规范进行检查。 用户可通过dashboard获知模型质量指标…

滴滴前端一面常考手写面试题合集

使用Promise封装AJAX请求 // promise 封装实现: function getJSON(url) {// 创建一个 promise 对象let promise new Promise(function(resolve, reject) {let xhr new XMLHttpRequest();// 新建一个 http 请求xhr.open("GET", url, true);// 设置状态的…

磨金石教育摄影技能干货分享|优秀摄影作品欣赏——艺术的表达

艺术摄影是难以欣赏的,这是大部分人的共识。艺术作品的创作也自然具有较高的难度,很多时候画面的表达与思想不符。要么内容不足以反应思想,要么思想太浅,而内容太杂。想要真正理解作者要表达什么,就要从内容去逐个分解…

ZigBee案例笔记 -- 外部中断

文章目录1.中断概述2.中断屏蔽3.中断处理4.按键中断控制LED1.中断概述 CC2530有18个中断源,每个中断源都有它自己的位于一系列 SFR 寄存器中的中断请求标志。相应标志位请求的每个中断可以分别使能或禁用,中断分别组合为不同的、可以选择的优先级别&…

分布式ID之雪花算法

分布式ID常见生成策略 分布式ID生成策略常见的有如下几种: 数据库自增ID。UUID生成。Redis的原子自增方式。数据库水平拆分,设置初始值和相同的自增步长。批量申请自增ID。雪花算法。百度UidGenerator算法(基于雪花算法实现自定义时间戳)。美团Leaf算法(依赖于数据…

【ZooKeeper】第一章 快速入门

【ZooKeeper】第一章 快速入门 文章目录【ZooKeeper】第一章 快速入门一、概念二、安装1.环境准备2.安装3.配置二、命令操作1.数据模型2.服务端常用命令3.客户端常用命令一、概念 ZooKeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务ZooKeeper 翻译…

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

目录一、使用SchedulingConfigurer实现多个定时任务二、定时任务多机器部署解决方案三、基于redis实现的代码示例3.1、基于redis实现的概述3.2、基于redis实现的代码3.2.1、代码目录结构3.2.2、引入依赖包3.2.3、配置文件新增redis连接配置3.2.4、自定义redis锁注解类3.2.5、自…