DMA基本概念与常见寄存器设置

2023-11-02

什么是DMA?

  DMA(Direct Memory Access)即直接存储访问,DMA传输方式无需CPU直接控制传输,通过硬件为RAM、I/O设备开辟一条直接传输数据的通路,能使CPU的效率大为提高。每一种体系结构DMA传输不同,编程接口也不同。



DMA的触发方式

  1. 每块拥有DMA功能的芯片基本可以通过特定的通道来触发DMA。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。(如stm32、2440等芯片)

  2. 每个通道对应四种传输模式:
                内存 —> 内存、内存 —> 外设、外设 —> 内存、外设 —> 外设

  3. 数据传输有两种方式触发:一种软件请求(手动)数据,另一种由硬件异步(自动)传输。

在第一种情况下,调用的步骤可以概括如下(以read为例):

  1. 在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的数据。进程进入睡眠。
  2. 硬件将数据写入 DMA 缓冲区并在完成时产生一个中断。
  3. 中断处理程序获得输入数据,应答中断,最后唤醒进程,该进程现在可以读取数据了。

第二种情形是在 DMA 被异步使用时发生的。以数据采集设备为例:

  1. 硬件发出中断来通知新的数据已经到达。
  2. 中断处理程序分配一个DMA缓冲区。
  3. 外围设备将数据写入缓冲区,然后在完成时发出另一个中断。
  4. 处理程序利用DMA分发新的数据,唤醒任何相关进程。

  网卡传输也是如此,网卡有一个循环缓冲区(通常叫做 DMA 环形缓冲区)建立在与处理器共享的内存中。每一个输入数据包被放置在环形缓冲区中下一个可用缓冲区,并且发出中断。然后驱动程序将网络数据包传给内核的其它部分处理,并在环形缓冲区中放置一个新的 DMA 缓冲区。驱动程序在初始化时分配DMA缓冲区,并使用它们直到停止运行。



DMA控制器中的寄存器常用参数配置

  1. DMA控制寄存器 【DCON0】
  2. DMA源地址寄存器 【DISR0】
  3. DMA源控制寄存器 【DISRCC0】
  4. DMA目标地址寄存器 【DIDST0】
  5. DMA目标控制寄存器 【DIDSTC0】
  6. DMA状态寄存器 【DSTAT0】
  7. DMA触发屏蔽寄存器 【DMASKTRIG0】


  以上寄存器包含对DMA的方向、DMA地址、总线宽度、DMA突发长度等等的配置



DMA与中断的区别

  1. 中断方式是在数据缓冲寄存器满之后发出中断,要求CPU进行中断处理,而DMA方式则是在所要求传送的数据块全部传送结束时要求CPU 进行中断处理。这就大大减少了CPU进行中断处理的次数。【中断次数增多导致数据丢失】
  2. 中断方式的数据传送是在中断处理时由CPU控制完成的,而DMA方式则是在DMA控制器的控制下,不经过CPU控制完成的。这就排除了 CPU因并行设备过多而来不及处理以及因速度不匹配而造成数据丢失等现象。


参考文章:

STM32 DMA配置和使用如此简单



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DMA基本概念与常见寄存器设置 的相关文章

  • STM32CubeMX的使用,配置DMA串口

    这次记录下最近调用的外设 DMA以前用得很少 xff0c 只通过ADC采集使用 xff0c 开启后就直接读那个数组就可以了 我对dma的理解就是不占用cpu xff0c 数据传输速度快 xff0c 可以直接从外设和内存间相互读取 目前的工作
  • 2.13 STM32 串口传输最佳处理方式 FreeRTOS+队列+DMA+IDLE (一)

    当多个串口数据都有大量数据来时 我们如何最佳处理STM32串口通信数据 可以通过FreeRTOS 队列的发送方式 下面将串口DMA发送处理过程 中心思想 1 建立一个大的环形数组 2 发送的数据时 将数据存入到大的数组 3 需要发送数据的长
  • STM32H7A3 ADC+DMA使用问题

    问题1 xff1a DMA采用半字传输16位ADC值 xff0c 用于存储ADC数据的数组一定是采集数的两倍 xff0c 否则会产生ADC溢出的错误中断HAL ADC ErrorCallback xff0c 从而无法进入ADC采集完成中断H
  • DMA原理,步骤超细详解,一文看懂DMA

    文章目录 什么是DMA DMA的基本定义 DMA定义 xff1a DMA传输方式DMA传输参数DMA的主要特征STM32少个DMA资源 xff1f DMA工作系统框图DMA传输方式仲裁器DMA数据流 xff08 仅存在于STM32F4 M4
  • AMD IOMMU与Linux (3) -- DMA

    Linux中DMA会使用硬件IOMMU如AMD IOMMU INTEL VT D xff0c 也会使用软件的SWIOTLB 这篇梳理一下LINUX内核在有AMD IOMMU的情况下 xff0c 是如何做DMA的 xff0c 内容包括如下 1
  • ((硬件spi+dma)+模拟spi)驱动LCD5110

    span class hljs preprocessor ifndef spi dma h span span class hljs preprocessor define spi dma h span span class hljs pr
  • Xilinx的Zynq系列,ARM和PL通过DMA通信时如何保证DDR数据的正确性。

    使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器 xff0c 对功能进行硬件加速 加速器和ARM之间的交互信息一般包含自定义加速指令传递 待计算数据以及计算结果 这三种交互信息为了实现高性能往往需要使用DMA进行通信 考虑两
  • I/O的控制方式——查询,中断,dma

    早期 xff0c I O串行 xff0c 查询方式 发展 xff0c I O并行 xff0c 两种方式其一是中断方式 xff0c 其二是dma方式 xff0c 使得外部设备能直接与主存储器信息交换 xff0c 减轻了cpu的工作量 技术继续
  • Cache和DMA一致性

    cache读必须要buffer是cacheline对齐的 DMA应该多多少少知道点吧 DMA Direct Memory Access 是指在外接可以不用CPU干预 xff0c 直接把数据传输到内存的技术 这个过程中可以把CPU解放出来 x
  • stm32串口DMA方式发送数据

    该文档介绍stm32 uart1通过DMA方式发送和接收数据 xff0c 代码示例基于ucos ii操作系统 该文档参考https wenku baidu com view d44ef1380975f46526d3e1b5 html 中内容
  • FIFO和DMA

    FIFO SPI端口增加了FIFO xff0c 使得传输数据有了缓冲区间 FIFO存储器是一个先入先出的双口缓冲器 xff0c 即第一个进入其内的数据第一个被移出 xff0c 其中一个存储器的输入口 xff0c 另一个口是存储器的输出口 主
  • STM32】 DMA原理,步骤超细详解,一文看懂DMA

    如需转载请注明地址 xff1a https blog csdn net as480133937 article details 104927922 DMA的基本介绍 什么是DMA DMA的基本定义 DMA xff0c 全称Direct Me
  • DMA的补充笔记

    DMA有两个总线 xff1a 1 DMA存储器总线 xff1a DMA通过该总线来执行存储器数据的传入和传出 2 DMA外设总线 xff1a DMA通过该总线访问AHB外设 xff08 AHB主要是针对高效率 高频宽以及快速系统模块所设计的
  • STM32L051测试 (五、串口测试 — 与Enocean模块通讯问题)

    STM32L051测试 第五课 串口的使用 by 矜辰所致 添加目录栏目 2021 9 30 调整文章格式 增加串口接收卡死处理说明 2022 7 18 目录 前言 一 串口接收处理的几种方式 1 1 串口接收发送不定长度的数据 非DMA方
  • 一文彻底理解DMA

    DMA Direct Memory Acess 1 什么是DMA 有什么作用 2 DMA传输过程简述 2 1 DMA普通传输过程 2 2 DMA指针递增传输过程 2 3 DMA循环传输过程 2 4 DMA双缓冲区传输过程 3 STM32F4
  • STM32 进阶教程 15 - 串口DMA收发

    前言 串口操作相信大家一定很熟悉 如果你已经会串口的收发数据 并可以灵活使用轮询及中断方式对串口进行数据收发 那么恭喜你 学完本节内容后 也将可以学会串口的更高级操作方式 DMA方式 DMA操作串口可以大大减轻MCU的负担 同时也可以加快数
  • 数据缓存如何路由本例中的对象?

    考虑图示的数据缓存架构 ASCII 艺术如下 CPU core A CPU core B Devices Cache A1 Cache B1 with DMA Cache 2 RAM
  • 如何从cdev获取设备

    我正在编写一个内核模块 它将分配一些一致的内存并返回相应的虚拟和物理地址 我正在将模块注册为cdev 分配空间dma alloc coherent 我想使用 mmap 它dma common mmap dma common mmap 需要一
  • 环形缓冲区和 DMA

    我试图了解从数据包到达网卡到目标应用程序收到数据包之间发生的所有事情 假设 缓冲区足够大 可以容纳整个数据包 我知道情况并非总是如此 但我不想介绍太多技术细节 一种选择是 1 Packet reaches the NIC 2 Interru
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • 一篇文章带你登顶 MacBook 高效工作环境配置

    工欲善其事 必先利其器 工具永远都是用来解决问题的 没必要为了工具而工具 一切工具都是为了能快速准确的完成工作和学习任务而服务 本文记录 MacBook 整个配置过程 供新入手 MacBook 和觉得 MacBook 比较难用的同学参考 转
  • 解决各大航空公司空运轨迹查询网站访问无响应或轨迹查询不了问题

    一 解决访问不了网站问题 情况描述 这种情况也不是一直访问不了 时好时坏的 员工上班高峰期使用的时候访问不了就很烦 走代理访问是正常的 排除是公司网络的问题 在家里测试也是同样的情况 深圳地区 其它地区不知道有无此情况 公司有开海外专线 防
  • armbian 斐讯n1_斐讯N1刷Armbian Linux做服务器

    N1上了不到两个月 斐讯就翻车了 现在N1也挖不了矿 作为NAS又太鸡肋 看到可以刷Armbian系统还是很激动的 可以作为服务器折腾一下 这里记录一下刷机的过程 工具准备DiskImager 降img文件写入U盘的工具 降级分区 boot
  • ESP32+INMP441+DHT11+OLED+网页+Arduino——“智能”语音天气站(2):INMP441录音生成wav文件

    参考视频 Recording using INMP441 参考代码 学会了代码复用 Recording using INMP441 知识 什么是wav文件 可以在维基百科找到wav文件的历史渊源 这个网站有一个详尽的wav格式说明 wav格
  • PyTorch基础系列(三)——深入理解autograd:Variable属性方法【最新已经和tensor合并为一类】

    torch autograd backward variables grad variables retain variables False 当前Variable对leaf variable求偏导 计算图可以通过链式法则求导 如果Vari
  • 高德地图:缺少定位权限(实际上权限已经打开)

    使用高德地图 获取定位的过程中 出现以下问题 ErrorCode 12 errorInfo 缺少定位权限 请到http lbs amap com api android location sdk guide utilities errorc
  • idea远程调试

    一 业务 服务器与本地环境不一样 二 需求 如果服务器报错 使用本地idea进行远程debug调试 三 解决方案 本地idea远程debug调试 四 具体操作 1 第一步 IDEA打开远程启动的springboot应用程序所对应的本地spr
  • 剑指Offer - 面试题10:斐波那契数列

    题目一 求斐波那契数列的第n项 写一个函数 输入n 求斐波那契 Fibonacci 数列的第n项 斐波那契数列的定义如下 分析 递归法 给出的公式用递归是最简单的 但是也是效率很低的 C include
  • 电磁波的发射和接收

    电磁波的发射和接收 作者 佚名 教案来源 网络 点击数 2628 电磁波的发射和接收 本资料为WORD文档 请点击下载地址下载 全文下载地址 文章 来源莲山 课 件 w w w 5y K J Co m 14 3 电磁波的发射和接收 教学目标
  • 计算机网络-15 网络测量

    第十五讲 网络测量 概述 定义 按照一定方法和技术 使用硬件或软件来量度网络运行状态 表征网络特性的一系列活动的总和 应用 监测网络故障 测试协议行为 刻画流量特征 评估网络性能 几个重大发现 协议方面 TCP协议占了大部分网络流量 流量方
  • AVL 平衡二叉搜索树 支持键值 简介+实现

    为什么要平衡 什么是平衡 平衡因子 不平衡的情况和平衡的方法 LL RR LR RL 删除操作 实现 AVL是发明这个算法的两个大神 Adelson Velsky and Landis 的名字首字母 为什么要平衡 一般的搜索树 如果元素是顺
  • ggplot2 画分面的柱状图

    ggplot2 画分面的柱状图 直接上代码 df read table class txt header TRUE ggplot data df mapping aes x factor samples y y fill class geo
  • yaml配置文件

    最近在写代码 发现随着网络的增加 代码变得越来越冗余 所以就想着写一个网络的配置文件 把网络的配置放到一个文件中 而不再主函数中 这样代码开起来就好看了 调试的时候也方便了 之前写过一篇神经网络配置文件的文章 config配置文件原理及使用
  • 一个Mini的ASP.NET Core框架的实现

    转自 https www cnblogs com edisonchou p aspnet core mini implemention introduction html 一 ASP NET Core Mini 在2019年1月的微软技术
  • SHA 和 RSA 的区别

    SHA VS RSA 它们之间有什么区别 SHA 和 RSA 有什么区别 它们只是不同的算法还是在某种程度上从根本上 即用于不同事物 不同 原文来自于 stackoverflow https stackoverflow com questi
  • VMware虚拟机 客户机是Linux的情况下客户机ping VMware网关,ping不通

    VMware虚拟机 客户机是Linux的情况下客户机ping VMware网关 ping不通的情况下 宿主机笔者这里是使用的win7 把宿主机的防火墙关闭即可 补充 VMware虚拟机安装成功后 网络适配器会多出来两个 gt VMnet1
  • 一个例子告诉你什么是封装,继承和多态(C++ 代码实例) (一)

    add by WJB date 2018 08 30 面向对象的三大特性 封装 继承和多态 封装 将事物拥有的属性和动作隐藏起来 只保留特定的方法与外界联系 继承 子类可以拥有父类的属性和方法 多态 以说是 一个接口 多种实现 或者说是父类
  • php伪协议漏洞_php伪协议小结(文件包含)

    继续转发我的csdn 文章目录 闲扯 file php data http https zip compress bzip2 compress zlib phar 闲扯 长期挖不到文件包含漏洞 导致每次挖洞都不太会去注意这一方面 发现刚开始
  • vmware15.5.0安装Ubuntu18.04.5详细配置

    软件版本 vmware 15 5 0 Ubuntu 18 04 5 步骤 创建新的虚拟机 不想太复杂推荐用典型就好 稍后安装操作系统 下一步选择Linux系统 版本为Ubuntu64位 选择安装位置 分配虚拟机内存 建议30GB起步 点击自
  • DMA基本概念与常见寄存器设置

    什么是DMA DMA Direct Memory Access 即直接存储访问 DMA传输方式无需CPU直接控制传输 通过硬件为RAM I O设备开辟一条直接传输数据的通路 能使CPU的效率大为提高 每一种体系结构DMA传输不同 编程接口也