首页 > 其他分享 >关于DMA (二)

关于DMA (二)

时间:2023-06-19 18:36:06浏览次数:40  
标签:DMA 存储器 端口 FIFO 传输 关于 外设


1. DMA 数据流/通道

  • 以STM32F2为例介绍数据流和通道的概念。
    • 一个DMA控制器可以提供8个数据流,每个数据流有8个可选通道。
    • 在一个数据流中,同一时刻,只有一个通道/请求是有效的,是一个多选1的MUX结构。
    • 8个数据流有8个请求,根据DMA内部的仲裁算法得到响应哪个请求。请求间的优先级可以通过软件编程配置,一共有4个等级。软件优先级一致时,可由硬件优先级决定(数据0比数据1优先级高)。

2. DMAC主从端口

  • DMA有两个AHB的主端口,存储器端口和外设端口。
    • 存储器端口,用于连接到存储器;
    • 外设端口,用于连接到外设;但是考虑到DMA有存储器到存储器的传输方向,所以外设端口好要求能够访问存储器。
  • DMA有一个AHB的从端口,用于对DMAC的寄存器进行编程。
  • 观察下图,可以看到DMA1的AHB外设端口不像DMA2的外设端口连接到AHB Matrix中,所以只有DMA2可以实现存储器到存储器的数据传输。

3. DMA传输参数

  • 源和目标地址;
  • 传输数据量大小:由数据量寄存器 DMA_SxNDTR 配置值决定;
  • 源和目标数据宽度:可选,字节、半字以及字。
  • 传输类型
    • 正常模式:数据量寄存器 DMA_SxNDTR 自减到0,传输停止。
    • 循环模式:数据量寄存器 DMA_SxNDTR 自减到0后会自动重载预先设置的值。进行下一轮的传输。

4. DMA FIFO

  • 每个数据流都有自己独立的4字FIFO,深度为4;位宽为32bit,4个字节。FIFO的阈值可以调节为1/4,1/2,3/4或满。

  • 从上面图中可以看到,FIFO主要用于缓存DMA输入到输出传输的数据。可通过软件配置FIFO的使能,禁用时,为直接模式。

  • FIFO的作用

    • FIFO可以对数据进行打包或拆包,以适应源和目标数据位宽不一致。
    • FIFO和突发传输一起使用,使用FIFO缓存一次突发传输所需要的数据量,相较于单次传输,提高了CPU的效率。
      • FIFO的阈值一定要是突发传输数据量的整数倍。

5. 双缓冲区模式

  • DMA中有寄存器指定源地址和目标地址,对于外设到存储器方向,考虑循环模式下,DMA不断向存储器目标地址写数据,当传输数据量减少至0时,数据量会自动重载预先的值,进行下一轮的传输,那么这个地址区间的数据可能还来不及被处理就又被新的数据覆盖。
  • 为了解决上面的问题,增加了一个新的目标地址DMA_SxM1AR的存储区域,在第一轮传输结束后,寄存器CT(Current Target)位指向1,存储器指针也从存储器区域0跳到存储器区域1。
  • 当DMA传输的存储目标是存储区域0时,存储区域1的基地址可以被更新;反之一样。
  • 存储器到外设也可以实现双缓冲区模式,DMA先读完地址1的数据之后,因为是循环,所以马上又开始传输数据,此时变更读地址为2。就不会出现反复读一个地址区间的数据。
  • 考虑到存储器到存储器方向不支持循环模式,所以该方向也没有双缓冲区模式。(为什么不支持我也不太清楚,st论坛中提到实际测试时可以同时使用

    标签:DMA,存储器,端口,FIFO,传输,关于,外设
    From: https://www.cnblogs.com/qianbinbin/p/17491401.html

相关文章

  • Java学习_关于变量
    关于变量的使用主要分为三步骤:1.变量的声明:这一部分包括变量类型+变量名称2.变量的赋值:变量名称=数据3.变量的使用:直接引用名称即可。 这里要注意一点,如果你想要使用变量,就必须要进行这三步,尽管有时候你不知道变量要赋一个什么值,那也得赋值,你可以随便给个0或者其他的值,赋值......
  • 一些关于智能硬件的随想
    一些关于智能硬件的随想最近在给自己的开源项目LithosphereIoTPlatform补文档。LithosphereIoT平台里,包括了名为sand-demo演示范例。在项目文档z中,hello系列教程里的,也包括了几个软硬件一体的范例。既然是IoT平台的范例,肯定少不了要出现智能硬件。基本上来说,在范例中出现的......
  • 谈一谈PHP中关于非法参数名传参问题
    在CTF中有些时候GET、POST等方法传参中参数名可能存在一些非法字符导致传参问题。下面讲述的也算是CTF比赛中常见的一种Trick注意:这种Trick只能在PHP版本小于8时有效,当PHP版本大于等于8并不会出现这种转换错误在PHP官方文档中有解释当变量名中出现点和空格时,PHP的处理方式https://w......
  • 各大电商平台关于API接口的一些知识分享和示例
    随着互联网的发展,电子商务也成为了内部的一个热门话题,各大电商平台在这种情况下开发了各种API接口,为各种企业提供了基础数据的支持,加速了市场竞争。本文将重点讨论电商API接口相关的一些知识分享。一、电商API接口的重要性对于电商平台来说,API接口就像是一座桥梁,它可以将......
  • 关于DMA (一)
    参考https://blog.csdn.net/zhejfl/article/details/82555634https://blog.csdn.net/qq_25814297/article/details/1092568091.CPU与外设数据传送方式主要有程序传送方式和中断传送方式。程序传送方式在程序控制下进行数据输入/输出操作,分为无条件(无需考虑外设状态......
  • 关于flutter框架安卓应用抓包问题,以及解决方法
    参考文档https://bbs.kanxue.com/thread-261941.htm一.从安装的app所在文件夹目录中提出libflutter.socd/data/app/包名/lib/xxx/..../...libflutter.so二.将其拖入ida中进行分析字符串窗口搜索ssl_server按x进入F5看了一下和上面博客说的相似不理解上面说的也......
  • 关于Cloud-磁盘-分区-物理边界的扩展-扩容
    对于一块磁盘,一般来说,是需要进行分区(也有直接对磁盘进行格式化的情况)、然后创建文件系统后,挂载到系统中才能使用 要扩容,这样主要就是分为两种情况1、对于整块磁盘、创建了文件系统的,想对其扩容2、对于分区,创建了文件系统的,想对其扩容 对于整块磁盘文件系统的扩容,方法比较......
  • 关于ASP.NET.CORE中的Failed to read parameter "string param" from the request bod
    先上报错信息Microsoft.AspNetCore.Http.BadHttpRequestException:Failedtoreadparameter"stringparam"fromtherequestbodyasJSON.--->System.Text.Json.JsonException:'s'isaninvalidstartofavalue.Path:$|LineNumber:0|By......
  • 关于数据治理的读书笔记 - 数据治理路线图规划
    数据治理成熟度评估为企业提供了一个数据治理的切入点,通过发现企业数据治理中存在的问题,找到目前和业界领先企业的差距,绘制出符合企业现状和需求的数据治理路线图。路线图是指描述技术变化步骤或技术相关环节之间逻辑关系的简洁的图形、表格、文字等形式。数据治理路线图则是对企业......
  • 关于使用vsmonodebuger对mono中运行的c#程序远程调试
    介绍:Mono是基于.NETFramework的开源开发平台,允许开发人员构建跨平台应用程序,从而提高开发人员的工作效率。Mono的.NET实现基于C#和公共语言基础结构的ECMA标准。简而言之就是可以运行.netframework程序跨平台执行vsmonodebuger:是mono的一个vs调试器插件,我们可以通过这个插件在......