嵌入式——直接存储器存取(DMA)补充

目录

一、认识 DMA

二、DMA结构

1. DMA请求

2. 通道DMA

补:通道配置过程。

3. 仲裁器

三、DMA数据配置

1. 从哪里来,到哪里去

(1)从外设到存储器

(2)从存储器到外设

(3)从存储器到存储器

2. 要传多少,单位是什么

补:指针增量。

3. 什么时候传输完成


一、认识 DMA

        DMA (Direct Memory Access,直接存储器访问)控制器独立于内核,属于一个单独的外设,它的主要功能是传输数据,但是不需要占用CPU,即在它传输数据的时候,CPU可以干其他的事情,就像多线程一样。

数据传输支持从外设到存储器或者从存储器到存储器,这里的存储器可以是SRAM或者Flash存储器。DMA控制器包含了DMA1和DMA2,其中DMA1有7个通道,DMA2有5个通道,这里的通道可以理解为传输数据的一种管道。

补:DMA2只存在于大容量的单片机中。

二、DMA结构

1. DMA请求

        外设要想通过DMA来传输数据,必须先向DMA控制器发送DMA请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答且DMA控制器收到应答信号之后,就会启动DMA的传输,直到传输完毕。

        DMA有DMA1和DMA2两个控制器,DMA1有7个通道,DMA2有5个通道,不同DMA控制器的通道对应不同的外设请求

2. 通道DMA

        有12个独立可编程的通道,DMA1有7个通道,DMA2有5个通道,每个通道对应不同外设的DMA请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个

补:通道配置过程。

      在 DMA_CPARx寄存器 中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标

     DMA_CMARx奇存器 中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入

     DMA_CNDTRx寄存器 中设置要传输的数据量。在每个数据传输后,这个数值递减

     DMA_CCRx寄存器的 PL[1:0]位 中设置通道的优先级

     DMA_CCRx寄存器 中设置数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断

      设置 DMA_CCRx寄存器的ENABLE位启动该通道

3. 仲裁器

        解决请求先后响应顺序的问题,由仲裁器管理。管理DMA请求分为两个阶段:第1阶段属于软件阶段,可以在DMA_CCRx寄存器中设置,有4个等级:非常高、高、中和低;第2阶段属于硬件阶段,如果两个或以上的DMA请求设置的优先级一样,则它们的优先级取决于通道编号编号越低越优先级越

补:大容量产品和互联型产品中,DMA1控制器拥有高于DMA2控制器的优先级。

三、DMA数据配置

1. 从哪里来,到哪里去

        DMA传输数据的方向有3个: 从外设到存储器,从存储器到外设,从存储器到存储器。具体的方向由DMA_CCR中第4位的DIR配置:0表示从外设到存储器,1表示从存储器到外设。里面涉及的外设地址由DMA_CPAR配置,存储器地址由DMA_CMAR配置。

(1)从外设到存储器

        以ADC采集为例。DMA外部寄存器的地址对应的就是ADC数据寄存器的地址DMA存储器的地址就是我们自定义的变量 ( 用来接收、存储ADC采集的数据 )的地址。方向设置外设为源地址

(2)从存储器到外设

        以串口向电脑端发送数据为例。DMA外部寄存器的地址对应的就是串口数据寄存器的地址DMA存储器的地址就是我们自定义的变量( 相当于一个缓冲区,用来存储通过串口发送到电脑的数据 )的地址。方向设置外设为目标地址

(3)从存储器到存储器

        以内部Flash存储器向内部SRAM复制数据为例。DMA外部寄存器的地址对应的就是内部Flash存储器(把内部Flash当作一个外设来看)的地址DMA存储器的地址就是我们自定义的变量( 相当于一个缓冲区,用来存储来自内部Flash存储器的数据 )的地址。方向设置外设(内部Flash存储器)为源地址。与上面两个不同的是,还要把DMA_CCR中的第14位(MEM2MEM)存储器到存储器模式配置为1,启动存储器到存储器模式

2. 要传多少,单位是什么

        以串口向电脑发送数据为例,可以一次性给电脑发送很多数据,具体多少由DMA_CNDTR配置。这是一个32位寄存器,一次最多只能传输65535个数据。要使数据正确传输,源和目标地址存储的数据宽度还必须一致,串口数据寄存器是8位,所以定义的待发送数据也必须是8位外设的数据宽度DMA_CCRx的PSIZE[1:0]配置,可以是8、16、32位,存储器的数据宽度DMA_CCRx的MSIZE[1:0]配置,可以是8、16、32位。

        在DMA控制器的控制下,数据要想有条不紊地传输,还必须正确设置两边数据指针的增量模式外设的地址指针DMA_CCRx的PINC配置,存储器的地址指针MINC配置。以串口向电脑发送数据为例,每发送完一个数据,存储器的地址指针就应该加1。而串口数据寄存器只有一个,那么外设的地址指针就固定不变。

补:指针增量。

        通过设置 DMA_CCRx寄存器中的PINC和MINC 标志位,外设和存储器的指针在每次传输后可以有选择地完成自动增量

     ① 通道配置为增量模式:下一个要传输的地址将是前一个地址加上增量值( 增量值取决与所选的数据宽度:1、2、4)。第一个传输的地址是存放在 DMA_CPARx / DMA_CMARx寄存器 中。在传输过程中,这些寄存器保持它们初始的数值软件不能改变和读出当前正在传输的地址(在内部的当前外设/存储器地址寄存器中)。

     ② 通道配置为非循环模式:传输结束后(即传输计数变为0)将不再产生DMA操作,要开始新的DMA传输,需要在关闭DMA通道的情况下,在 DMA_CNDTRx奇存器 重新写入传输数目

     ③ 循环模式:最后一次传输结束时,DMA_CNDTRx寄存器 的内容会自动地被重新加载为其初始数值,内部的当前外设 / 存储器地址寄存器也被重新加载为 DMA_CPARx / DMA_CMARx寄存器 设定的初始基地址。 

3. 什么时候传输完成

        可以通过查询标志位或者通过中断的方式来鉴别。每个DMA通道在DMA传输过半、传输完成和传输错误时都会有相应的标志位(DMA中断状态寄存器DMA_ISR),如果使能了该类型的中断后,则会产生中断

        传输的完成还分两种模式一次传输和循环传输一次传输,即传输一次之后就停止,要想再传输的话,必须关闭DMA使能后再重新配置,才能继续传输。循环传输则是一次传输完成之后又恢复第一次传输时的配置,循环传输不断重复。具体的模式由DMA_CCRx寄存器的CIRC循环模式位控制。


可以结合这篇文章:

     嵌入式一直接存储器存取(DMA)

http://t.csdnimg.cn/I3Abticon-default.png?t=N7T8http://t.csdnimg.cn/I3Abt

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

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

相关文章

【Python基础017】Python中如何进行异常判断(try...except...的使用)

1、异常判断 在python程序在运行的过程中可能会出现很多错误,比如语法、未定义变量、分母为0等错误;而我们通常使用try...except...语句来处理程序在运行中出现的这些异常,并显示出现错误的原因。此外,我们还可以用try...finally.…

全角色服务、全场景支撑、全业务应用的新一代智慧教室

新一代智慧教室以“数智化助力高质量人才培养”为核心目标,以AI赋能的智能硬件为基础构建多形态智慧教学环境,以中台为支撑实现数据、设备、系统、业务的互联互通、开放共享,以平台全面覆盖教学应用,采集、汇聚、挖掘、分析课前课…

AP5216 平均电流型LED降压恒流驱动IC 手电筒汽车摩托车灯芯片

产品描述 AP5216 是一款 PWM工作模式, 高效率、外围简单、内置功率管,适用于5V~100V输入的高精度降压 LED 恒流驱动芯片。输出最大功率可达9W,最大电流 1.0A。AP5216 可实现全亮/半亮功能切换,通过MODE 切换:全亮/半亮…

Pytorch线性代数

1、加法运算 A torch.arange(20, dtypetorch.float32).reshape(5, 4) B A.clone() # 通过分配新内存,将A的一个副本分配给B A, A B# tensor([[ 0., 1., 2., 3.], # [ 4., 5., 6., 7.], # [ 8., 9., 10., 11.], # [12., 13.,…

《幻兽帕鲁》多人联机教程:个人电脑搭建可远程访问服务器

《幻兽帕鲁》支持自建服务器实现多人联机,相比邀请码方式联机,自建服务器可突破4人限制,最多让32人同时游戏,而且如果在国内网络环境搭建服务器,在也可以避免官服网络原因导致的掉线、连接失败等问题。 搭建《幻兽帕鲁…

统一异常处理

统一异常处理 统一异常处理创建一个类定义方法ControllerAdvice和ExceptionHandler注意事项 统一异常处理 创建一个类 首先,我们来创建一个类,名字随意,这里我们取名ERHandler 定义方法 在ERHandler中,我们可以定义几个类,参数用来接收各种异常,这里的异常可以是任意的,返回…

从自卑到幸福:吴哲轩的成长故事

从自卑到幸福:吴哲轩的成长故事 吴哲轩,一个内向、孤独的青年,在中学时期以优异的成绩赢得了父母的骄傲。然而,他的内心却充满了迷茫和自卑。他在为父母的期望而活,忽视了自己的精神追求和个人成长。 进入大学后&…

SpringSecurity笔记

SpringSecurity 本笔记来自三更草堂:https://www.bilibili.com/video/BV1mm4y1X7Hc/?spm_id_from333.337.search-card.all.click,仅供个人学习使用 简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,…

GD32F303,GD32F103中文手册

GD32F303,GD32F103中文手册 链接:https://pan.baidu.com/s/1-bOHMwUuhduI1GHNxT4P7A?pwdct44 提取码:ct44链接:https://pan.baidu.com/s/1-bOHMwUuhduI1GHNxT4P7A?pwdct44 提取码:ct44

米贸搜|Meta广告中级水准:Facebook自动完成四项广告设置,改善投放成效!

广告投放中的机器学习预算自动分配版位自动分配受众自动分配创意灵活调整 一、广告投放中的机器学习 机器学习现已成为数字营销的基础,能够帮助我们面向想要触达的受众投放与之相关的广告。随着我们对如何使用机器学习的了解加深,我们对“如何创建广告…

爸爸的爸爸的爸爸的爸爸叫什么?

效果 简介 由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多。因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。然而搞不清亲戚关系和亲戚称谓的不仅是小孩,就连年轻一代的大人也都常常模糊混乱…

C++ Qt开发:SqlTableModel映射组件应用

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlTableModule组件的常用方法及灵活运用。 …

【NodeJS】004- NodeJS的模块化与包管理工具

模块化 1. 介绍 1.1.什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用 1.2 什么是模块化项目 ? 编码时是按照模…

Vulnhub靶场DC-9

攻击机192.168.223.128 靶机192.168.223.138 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.138 开启了22 80端口 访问一下web页面 有个查询界面 测试发现存在post型的sql注入 用sqlmap跑一下,因为是post型的,这里…

深入理解TCP网络协议

目录 1.TCP协议的段格式 2.TCP原理 2.1确认应答 2.2超时重传 3.三次握手(重点) 4.四次挥手 1.TCP协议的段格式 我们先来观察一下TCP协议的段格式图解: 源/目的端口号:标识数据从哪个进程来,到哪个进程去 32位序号/32位确认号:TCP会话的每一端都包含一个32位&#xff08…

探索半导体制造业中的健永科技RFID读写器的应用方案

一、引言 在当今高度自动化的工业环境中,无线射频识别(RFID)技术已经成为实现高效生产的重要一环。特别是在半导体制造业中,由于产品的高价值和复杂性,生产过程的追踪和管理显得尤为重要。健永科技RFID读写器以其出色…

Nginx解析漏洞复现

首先这个漏洞不是软件或代码的问题,是认为疏忽造成的。 一、环境搭建 从vulhub上面下载vulhub-master.zip文件,上传到服务器中,或者直接在服务器下载。 unzip vulhub-master.zip 进入漏洞目录 cd /vulhub-master/vulhub-master/nginx/ng…

十大排序算法之非线性时间比较类排序

前言 接下来就开始我们的算法学习之路了,代码会分别使用Java与Python来实现,数据处理的算法很多,排序是最基础且最重要的一类,大多数人都是通过学习排序算法入门的。接下来让我们一起学习闻名遐迩的十大排序算法,它们…

商家转账到零钱开通教程

商家转账到零钱是什么? 商家转账到零钱是微信商户号里的一个功能,以前叫做企业付款到零钱。从 2022 年 5 月 18 日开始,原企业付款到零钱升级为商家转账到零钱,已开通商户的功能使用不受影响,新开通商户可前往产品中心…

鸿蒙开发【设备开发基础知识】

一、设备开发介绍 1. 环境搭建与源码获取 环境搭建 搭建OpenHarmony 的系统环境,需要Windows系统与Ubuntu系统结合使用。 ​ Windows系统负责烧录、测试、与OpenHarmony在windows系统cmd模式下交互。 ​ Ubuntu系统负责源码管理、阅读、开发、编译。Ubuntu系统…