半个小时搞懂STM32面经知识——DMA

1.DMA

1.1 什么是DMA?

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输
CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?
在这里插入图片描述
比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理

1.2 DMA的传输的四种情况?

外设到内存
内存到外设
内存到内存
外设到外设

在这里插入图片描述

1.3 DMA的传输参数

数据传输,首先需要的是
1.数据的源地址
2.数据传输位置的目标地址
3.传递数据多少的数据传输量
4.进行多少次传输的传输模式

当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输,也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。

1.4 STM32多少个DMA资源?

对于大容量的STM32芯片有2个DMA控制器 两个DMA控制器,DMA1有7个通道,DMA2有5个通道。

1.5 DMA的工作流程图

如果没有DMA,CPU传输数据还要以内核作为中转站,比如要将ADC采集的数据转移到到SRAM中,这个过程是这样的:
①内核通过DCode经过总线矩阵协调,从获取AHB存储的外设ADC采集的数据。
②然后内核再通过DCode经过总线矩阵协调把数据存放到内存SRAM中。
在这里插入图片描述
如果有DMA,
①DMA传输时外设对DMA控制器发出请求。
②DMA控制器收到请求,触发DMA工作。
③DMA控制器从AHB外设获取ADC采集的数据,存储到DMA通道中
④DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC采集的数据经由DMA通道存放到SRAM中,这个数据的传输过程中,完全不需要内核的参与,也就是不需要CPU的参与。
在这里插入图片描述
在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。DMA传输结束,如果有更多的请求时,外设可以启动下一个周期。
总之,每次DMA传送由3个操作组成:

从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;
存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;
执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。

1.6 DMA传输方式

①正常模式。
②循环传输模式。

1.7 仲裁器

在这里插入图片描述
先权管理分2个阶段:

软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:最高优先级,高优先级,中等优先级,低优先级;
DMA 控制器驱动程序的大概实现,进行 DMA 传输的时候如何解决缓存一致性问题?
中断和DMA在嵌入式系统中的应用场景有何不同?
dma接收软件部分的操作
ADC采集方式,为什么使用DMA+中断,如何配置的?
从机发送时怎么用DMA,什么时候起作用
DMA为什么能提高效率?
无须CPU干预,节省了CPU的资源

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

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

相关文章

LLM实战:LLM微调加速神器-Unsloth + LLama3

1. 背景 五一结束后,本qiang~又投入了LLM的技术海洋中,本期将给大家带来LLM微调神器:Unsloth。 正如Unsloth官方的对外宣贯:Easily finetune & train LLMs; Get faster with unsloth。微调训练LLM,可以显著提升速…

kafka 图形化

介绍 idea 中的一个插件 kafkalytic,kafka 图形化 简单又强大 安装 使用界面 总体信息 数据查看

JDK的串行收集器介绍与优化指南-02

对象的生命周期 对象的生命周期 在Java中,对象的生命周期通常包括以下几个阶段,这些阶段与JVM的内存管理和垃圾收集机制密切相关。 创建阶段 (1)为对象分配存储空间:当使用new关键字或其他方式(如反射、克隆、反序列化等)创建一个对象时,JVM首先会在堆内存中为其分配…

004.可观察对象与观察者

Rx非常适合事件驱动的应用程序。这是有意义的,因为事件(作为)(如前所述)是创建时变值的命令式方法。从历史上看,事件驱动编程主要出现在客户端技术中,因为作为事件实现的用户交互。例如,你可能工作过使用OnMouseMove或OnKeyPressed事件。正因…

“智慧食堂”|基于Springboot+vue的“智慧食堂”系统(源码+数据库+文档)

“智慧食堂”系统 目录 基于Springbootvue的“智慧食堂”系统 一、前言 二、系统设计 三、系统功能设计 1功能页面实现 2系统功能模块 3管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…

缩短项目周期:SOLIDWORKS Electrical简化了电气设计过程

在现代工业设计领域,电气系统设计的复杂性日益增加,然而,达索系统SOLIDWORKS Electrical软件的出现为这一挑战提供了高效的解决方案。该软件支持工程师通过选配的方式快速设计原理图,这极大地简化了电气设计过程,并有效…

形位公差Overview of GDT

零件公差产生于十九世纪后期,其初衷是为了保证零件的互换性。起初只有尺寸公差。由于 当时的设计部门和制造部门通常都在一起或就在隔壁,因此交流起来非常方便。在当时,给 定的公差一般都很大,因此当时的设备刀具的能力对于保证产…

Flutter 中的 Container 小部件:全面指南

Flutter 中的 Container 小部件:全面指南 在 Flutter 中,Container 是一个非常基础且功能丰富的小部件,用于定义一个矩形区域,它可以包含其他小部件。Container 提供了多种定制化选项,如颜色、边距、边框、尺寸等&…

python基础——列表

目录 列表操作 增加 修改 删除 统计 排序 小结 for遍历列表 拆包 列表推导式 列表中不同数据类型处理 公共方法 统计 成员运算符 小结 在python中,所有的非数字型变量都支持以下特点: 都是一个序列通过 变量名[索引] 的方式取值通过 for…

PyCharm中切换Python包的源

在PyCharm中切换Python包的源,通常是指更换pip的安装源,以加快包的下载速度。以下是如何在PyCharm中切换源的步骤: 打开PyCharm,点击右下角的 "Terminal" 选项卡。 在终端中输入以下命令来清除现有的pip源配置&#xf…

Spring:@Async注解使用注意事项及九大失效场景

前言 原文作者:微信公众号:苏三说技术 场景举例 代码案例 点击此处可观看:Async注解使用注意事项及九大失效场景

Python修改exe之类的游戏文件中的数值

文章目录 场景查找修改 补充字节to_bytes 场景 某些游戏数值(攻击力、射程、速度…)被写在exe之类的文件里 要先查找游戏数值,然后修改 查找 首先,要查找数值,大数重复较少,建议从大数找起 F 游戏原件…

OPT系列极速版远距离光数据传输器|光通讯传感器安装与调试方法

OPT系列极速版远距离光数据传输器|光通讯传感器使用红外激光通信,满足全双工 100M 带宽,通讯距离可达 300 米。能够快速,稳地传送数据,支持主流的工业控制总线(Profinet,Ethercat 等)&#xff1…

【JVM】从可达性分析,到JVM垃圾回收算法,再到垃圾收集器

《深入理解Java虚拟机》[1]中,有下面这么一段话: 在JVM的各个区域中,如虚拟机栈中,栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在…

【RAG 论文】BGM:为 LLM 和 Retriever 的偏好 gap 搭建一个 Bridge

论文:Bridging the Preference Gap between Retrievers and LLMs ⭐⭐⭐ Google Research, arXiv:2401.06954 论文速读 LLM 与 Retriever 之间存在一个 preference gap:大多数 retriever 被设计为 human-friendly,但是 LLM 的偏好与人类的却…

长难句打卡 5.13

And in Europe, some are up in arms over a proposal to drop a specific funding category for social-science research and to integrate it within cross-cutting topics of sustainable development. 在欧洲,有些人正竭力反对一项“终止专用于社会科学研究的…

网络安全防护:抵御DDoS和CC攻击

在当今数字化时代,网络安全已成为任何组织或个人不可忽视的重要议题。DDoS(分布式拒绝服务)攻击和CC(命令与控制)攻击作为两种最为常见的网络攻击方式,给网络运营者和用户带来了巨大的威胁和影响。本文将介…

函数memcpy的实现及详解

前言 今天我们来了解一下memcpy函数和它的作用吧,咋们之前已经熟悉了strcpy的使用,它的作用是字符串的拷贝,那么当我们要拷贝其他类型的数据时,应该使用什么函数呢,我们今天给大家介绍的就是memcpy函数,他可…

C++语言的字符数组

存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。 1. 声明一个字符数组 char c[5]; 2. 字符数组赋值方式 (1)为数组元素逐一赋值 c[0]H c[1]E c[2]L c[3]L c[4]O (2&…

微信小程序开发,构建NPM报错解决

报错信息如下: message: NPM packages not found. Please confirm npm packages which need to build are belong to miniprogramRoot directory. Or you may edit project.config.jsons packNpmManually and packNpmRelationList appid: wx7144a5d5411…