STM32G4系列MCU的Direct memory access controller (DMA)功能介绍之二

目录

概述

1  DMA通道

1.1 可编程数据大小

1.2 指针增量

2 通道配置

2.1 配置步骤

2.2 通道状态和禁用通道

3 模式应用

3.1 循环模式(内存到外设/外设到内存的传输)

3.2 内存到内存模式

3.3 Peripheral-to-peripheral模式

3.4 编程转移方向,分配源/目的

3.5 DMA数据宽度、对齐方式和端序

3.6 寻址不支持字节/半字写入传输的AHB外设 

4 DMA错误和中断

4.1 DMA错误管理

4.2 DMA中断


概述

本文主要介绍STM32G4系列MCU的DMA的通道,配置参数,模式应用,以及DMA的的错误和中断参数。

1  DMA通道

每个通道可以处理位于固定地址的外设寄存器和存储器地址之间的DMA传输。传输的数据项的数量是可编程的。包含要传输的数据项数量的寄存器在每次传输后递减。

DMA通道是在块传输级编程的。

1.1 可编程数据大小

单个数据(字节、半字或字)传输到外设和内存的大小分别通过PSIZE[1:0]和MSIZE[1:0]字段可编程DMA_CCRx登记。

1.2 指针增量

根据DMA_CCRx寄存器的PINC和MINC位,外设和内存指针可以在每次传输后自动增加。

如果启用增量模式(PINC或MINC设置为1),则下一次传输的地址是前一次传输的地址,根据PSIZE[1:0]或MSIZE[1:0]中定义的数据大小增加1、2或4。第一个转移地址是在DMA_CPARx或DMA_CMARx寄存器中编程的地址。在传输过程中,这些寄存器保持初始编程值。当前的传输地址(在当前内部外设/存储器地址寄存器中)不能被软件访问。

如果通道x配置为非循环模式,则在最后一次数据传输之后(一旦要传输的单个数据数量达到零)不提供DMA请求。为了将新数量的数据项重新加载到DMA_CNDTRx寄存器中,必须禁用DMA通道。

注意点:

如果通道x被禁用,DMA寄存器不会重置。DMA通道寄存器(DMA_CCRx, DMA_CPARx和DMA_CMARx)保留在通道配置阶段编程的初始值。

-

在循环模式下,在最后一次数据传输之后,DMA_CNDTRx寄存器会自动重新加载初始编程值。当前的内部地址寄存器用来自DMA_CPARx和DMA_CMARx寄存器的基址值重新加载。

2 通道配置

2.1 配置步骤

配置DMA通道x需要遵循以下顺序:

1) 在DMA_CPARx寄存器中设置外设寄存器地址。在外设事件之后,或者在内存到内存模式下启用通道之后,数据从这个地址移动到内存。

-

2)在DMA_CMARx寄存器中设置内存地址。数据在外设事件之后或通道在内存到内存模式下启用之后写入/读取内存。

-

3)配置要在DMA_CNDTRx寄存器中传输的数据总数。每次数据传输后,该值将递减。

-

4)在DMA_CCRx寄存器中配置以下参数:

   -通道优先级
   -数据传输方向
   -圆形模式
   -外设和内存增量模式
  -外设和内存数据大小
   -中断使能在一半和/或全部传输和/或传输错误

-

5)通过在DMA_CCRx寄存器中设置EN位来激活通道。

 通道一旦启用,就可以为连接到该通道的外设发出的任何DMA请求提供服务,也可以启动内存到内存的块传输。

注意点:

通道配置过程的最后两个步骤可以合并为对DMA_CCRx寄存器的单个访问,以配置和启用通道。

2.2 通道状态和禁用通道

处于活动状态的通道x是已启用的通道(读作DMA_CCRx)。EN = 1)。活动通道x是必须由软件(DMA_CCRx)启用的通道。EN设置为1),之后没有发生传输错误(DMA_ISR。如果有传输错误,则由硬件自动禁用通道(DMA_CCRx. 0)。En = 0)。

以下三种用例可能会发生:

1)挂起和恢复通道


这对应于以下两个动作:
—通过软件(写入DMA_CCRx)禁用主用通道。EN = 0而
DMA_CCRx。En = 1)。
—软件重新使能通道(DMA_CCRx)。EN设置为1),无需重新配置其他通道寄存器(如DMA_CNDTRx, DMA_CPARx和DMA_CMARx)。
DMA硬件不支持这种情况,这不能保证正确执行剩余的数据传输

-

2)停止并中止一个通道

如果应用程序不再需要该通道,则可以通过软件禁用此活动通道。通道被停止和中止,但是DMA_CNDTRx寄存器内容可能不能正确反映剩余的数据传输与中止的源和目标缓冲区/寄存器。

-

3)中止并重新启动信道

这对应于软件顺序:禁用活动通道,然后重新配置通道并再次启用它。

如果满足以下条件,则硬件支持此操作:

 --- 1)

应用程序保证,当软件禁用通道时,一个DMA数据传输不是在它的主端口上同时发生的。例如,应用程序可以首先禁用DMA模式下的外设,以确保没有来自该外设的未决硬件DMA请求。

---2)

软件必须对同一个DMA_CCRx寄存器进行单独的写访问:首先禁用通道。其次,如果需要更改配置,则重新配置通道以进行下一个块传输,包括DMA_CCRx。当DMA_CCRx. en =1时,存在只读的DMA_CCRx寄存器字段。最后再次启用通道。

当发生通道传输错误时,硬件清除DMA_CCRx寄存器的EN位。这个EN位不能通过软件再次设置来重新激活通道x,直到设置DMA_ISR寄存器的TEIFx位。

3 模式应用

3.1 循环模式(内存到外设/外设到内存的传输)

循环模式可用于处理循环缓冲区和连续数据流(例如ADC扫描模式)。该特性使用DMA_CCRx寄存器中的CIRC位启用。

注意点:

循环模式不能在内存到内存模式中使用。在启用通道处于圆形模式(CIRC = 1)时,软件必须清除MEM2MEM位DMA_CCRx登记。当循环模式被激活时,要传输的数据量将自动重新加载在通道配置期间编程的初始值阶段,DMA请求继续得到服务。

 为了停止循环传输,软件需要停止外设的生成DMA请求(如退出ADC扫描模式),在禁用DMA通道之前。软件必须在开始/启用传输之前,以及在停止循环传输之后显式地编程DMA_CNDTRx值。

3.2 内存到内存模式

DMA通道可以在没有外设请求触发的情况下运行。这种模式称为内存对内存模式,由软件发起。

如果设置了DMA_CCRx寄存器中的MEM2MEM位,则通道(如果启用)将启动传输。一旦DMA_CNDTRx寄存器达到零,传输就会停止。

注意点:

不能在循环模式中使用内存到内存模式。在启用内存对内存模式(MEM2MEM = 1)的通道之前,软件必须清除DMA_CCRx寄存器的CIRC位。

3.3 Peripheral-to-peripheral模式

 任何DMA通道都可以在外设到外设模式下工作:

•当外设的硬件请求被选择触发DMA通道时这个外设是DMA启动器,将数据从这个外设传输到一个属于另一个内存映射外设(这个外设没有配置在DMA模式下)的寄存器。

-
•当没有外设请求被选择并连接到DMA通道时软件通过设置DMA_CCRx寄存器的MEM2MEM位来配置寄存器到寄存器的传输。

3.4 编程转移方向,分配源/目的

DMA_CCRx寄存器的DIR位的值设置了传输的方向,因此,它标识源和目标,而不管源/目标类型(外设或内存):

DIR =  1通常定义内存到外设的传输。更一般地说,如果DIR = 1:

--- 1)源属性由DMA_MARx寄存器、MSIZE[1:0]字段和DMA_CCRx寄存器的MINC位定义。
不管它们通常的命名是什么,这些“内存”寄存器、字段和位都用于在外设到外设模式下定义源外设。

-

--- 2)目标属性由DMA_PARx寄存器、PSIZE[1:0]字段和DMA_CCRx寄存器的pin位定义。
不管它们通常的命名是什么,这些“外设”寄存器、字段和位被用来在内存对内存模式下定义目标内存。

DIR = 0通常定义一个外设到内存的传输。更一般地,如果DIR = 0:

 -- 1) 源属性由DMA_PARx寄存器、PSIZE[1:0]字段和DMA_CCRx寄存器的pin位定义。
不管它们通常的命名是什么,这些“外设”寄存器、字段和位被用来在内存对内存模式下定义源内存

-

-- 2) 目标属性是由DMA_MARx寄存器定义的MSIZE[1:0]字段和DMA_CCRx寄存器的MINC位。不管它们通常的命名是什么,这些“内存”寄存器、字段和位被用来在外设到外设模式下定义目标外设。

3.5 DMA数据宽度、对齐方式和端序

 当PSIZE[1:0]和MSIZE[1:0]不相等时,DMA控制器执行一些数据对齐,如下表所示。

3.6 寻址不支持字节/半字写入传输的AHB外设 

当DMA控制器发起AHB字节或半字写传输时,数据在AHB主32位数据总线(HWDATA[31:0])的未使用的通道上复制。


当AHB从外设不支持字节或半字写传输并且不产生任何错误时,DMA控制器写入32个HWDATA位,如下面的两个示例所示:

1) 要写半字0xABCD, DMA控制器将HWDATA总线设置为具有半字数据大小的0xABCDABCD (AHB主总线中的HSIZE = HalfWord)。

-

2)为了写字节0xAB, DMA控制器将HWDATA总线设置为0xABABABAB,并设置字节数据大小(HSIZE = AHB主总线中的字节)。

假设AHB/APB网桥是AHB 32位从外设,不考虑HSIZE数据,任何AHB字节或半字传输都将更改为32位APB传输,如下所述:

1) 从0xB0到0x0、0x1、0x2或0x3地址之一的AHB字节写传输被转换为从0xB0B0B0B0到0x0地址的APB字写传输。

-

2)从0xB1B0到0x0或0x2地址的AHB半字写传输被转换为从0xB1B0B1B0到0x0地址的APB字写传输。 

4 DMA错误和中断

4.1 DMA错误管理

当读取或写入保留的地址空间时,会产生DMA传输错误。当DMA读或写访问期间发生DMA传输错误时,通过硬件清除相应DMA_CCRx寄存器中的EN位,自动禁用故障通道x。

设置DMA_ISR寄存器的TEIFx位。如果设置了DMA_CCRx寄存器的TEIE位,则会产生中断。
DMA_CCRx寄存器的EN位不能通过软件再次设置(通道x重新激活),直到DMA_ISR寄存器的TEIFx位被清除(通过设置DMA_IFCR寄存器的CTEIFx位)。
当软件在一个涉及外设的通道上收到传输错误通知时,软件必须首先在DMA模式下停止这个外设,以便禁用任何挂起的或将来的DMA请求。然后软件通常可以重新配置DMA和DMA

4.2 DMA中断

中断可以对传输的一半、传输完成或传输错误分别产生单独的中断使能位可用于灵活性

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

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

相关文章

【一文读懂】大语言模型

学习参考 项目教程:中文教程 代码仓库:代码地址 仓库代码目录说明: requirements.txt:官方环境下的安装依赖 notebook:Notebook 源代码文件 docs:Markdown 文档文件 figures:图片 data_base&…

大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

鸿蒙进阶篇-Stage模型、UIAbility

“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…

学习threejs,使用specularMap设置高光贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…

一个简洁的ajax注册登录找回密码切换的前端页面

成功和失败不同颜色显示&#xff0c;纯原生代码不需要jq等第三方插件 <% Language"VBScript" CodePage"65001"%> <% Response.Charset "UTF-8" Session.CodePage "65001" Response.Addheader "Content-Type",&q…

uniapp首页样式,实现菜单导航结构

实现菜单导航结构 1.导入字体图标库需要的文件 2.修改引用路径iconfont.css 3.导入到App.vue中 <style>import url(./static/font/iconfont.css); </style>导航区域代码 VUE代码 <template><view class"home"><!-- 导航区域 --><…

解析客服知识库搭建的五个必要性

在当今竞争激烈的商业环境中&#xff0c;客服知识库的搭建已成为企业提升服务质量、优化客户体验的重要手段。一个完善的客服知识库不仅能帮助企业高效管理客户服务流程&#xff0c;还能显著提升客户满意度和忠诚度。以下是搭建客服知识库的五个必要性&#xff1a; 1. 提升服务…

淘宝Vision Pro:革新购物体验的沉浸式未来

引言 简要介绍淘宝Vision Pro版的背景,包括它在美区AppStore的发布及WWDC上的展示。阐述本文的目的:为读者提供一个全面的功能概览与设计背后的思考。设计原则 列出并简要解释5条设计原则(熟悉、直观、真实、实用、易用)。说明这些原则如何指导整个产品设计过程。核心功能详…

【CSS in Depth 2 精译_062】第 10 章 CSS 中的容器查询(@container)概述 + 10.1 容器查询的一个简单示例

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 ✔️ 10.1.1 容器尺寸查询的用法 ✔️ 10.2 深入理解容器10.3 与容器相关的单位10.4 容器样式查询的用法10.5 本章小结 文章目录 第 10…

HCIE:详解OSPF,从基础到高级特性再到深入研究

目录 前言 一、OSPF协议基本原理 简介 基本原理 OSPF路由器类型 OSPF网络类型 OSPF报文类型和封装 OSPF邻居的建立的维护 DR和BDR的选举 伪节点 LSDB的更新 OSPF的配置 二、OSPF的高级特性 虚连接&#xff08;Virtual-Link&#xff09; OSPF的LSA和路由选择 OSPF…

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐&#xff0c;生成mp3文件的时候需要等待&#xff0c;需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址&#xff1a;https://unity.com/download 安装打开后如图所示&#xff1a; 2.下载 VRChat 官方推荐版本的 Unity 跳转界面&#xff08;VRChat 官方推荐页面&#xff09;&#xff1a;https://creators.vrchat.com/sdk/upgrade/…

ollama部署bge-m3,并实现与dify平台对接

概述 这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。 (看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。) 这不,为了实验在windows上docker里运行pytorch,把docker重装了。 dify也得重装: Dify基…

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…

Lesson 10 GNN

听课&#xff08;李宏毅老师的&#xff09;笔记&#xff0c;方便梳理框架&#xff0c;以作复习之用。本节课主要讲了生成式对抗网络&#xff08;GNN&#xff09;。 目录 Generation Network as Generator 到目前为止&#xff0c;我们学习到的是类似于函数的network&#xf…

Scala入门基础(20)数据集复习拓展

一.Stack栈二.Queue 队列 一.Stack栈 Stack:栈&#xff0c;特殊的结构。它对元素的操作是在头部&#xff1a;栈顶 先进后出的队列。pop表示取出&#xff0c;push表示在栈中添加元素 二.Queue 队列 Queue 队列;先进先出.enqueue入队&#xff0c;dequeue出队。

Ubuntu20.04运行DM-VIO

目录 环境配置非ROS环境运行编译运行结果图 ROS环境参考 环境配置 Ubuntu20.04 将项目中Cmakelists.txt中C 和 opencv版本修改下 C 使用 14 opencv使用4 非ROS环境运行 编译 按照官网即可 cd dm-vio mkdir build cd build cmake .. make -j运行 DM-VIO给的命令是 bin/d…

TDengine 签约深圳综合粒子,赋能粒子研究新突破

在高能物理和粒子研究领域&#xff0c;实验装置的不断升级伴随着海量数据的产生与处理。尤其是随着大湾区综合性国家科学中心的建设步伐加快&#xff0c;深圳综合粒子设施研究院&#xff08;以下简称“研究院”&#xff09;作为承载“双区驱动”战略的重要科研机构&#xff0c;…

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网&#xff0c;根据自己的操作系统下载对应的Apifox安装包&#xff0c;我是windows系统所以下载的是windows版。 下载 默认仅为我安装&#xff0c;点击下一…

(C语言) 8大翻译阶段

(C语言) 8大翻译阶段 文章目录 (C语言) 8大翻译阶段⭐前言&#x1f5c3;️8大阶段&#x1f5c2;️1. 字符映射&#x1f5c2;️2. 行分割&#x1f5c2;️3. 标记化&#x1f5c2;️4. 预处理&#x1f5c2;️5. 字符集映射&#x1f5c2;️6. 字符串拼接&#x1f5c2;️7. 翻译&…