文章目录

  • DMA
  • DMA 设备树描述
    • DMA控制器
    • 外设DMA请求

DMA

  • DMA,全称Direct Memory Access,即直接存储器访问,可以在不需要CPU的参与下直接将数据从外设传输到内存,或是从内存传输到外设中,或从内存中的一个位置传输到另一个位置,在如今的大部分CPU中都有它的身影。

  • DMA控制器,用于设置DMA请求的各种参数,接收并处理DMA请求,当DMA传输完成,传输终止后还可能会产生中断。

  • 除了需要DMA控制器,还需要开启DMA的请求,这种请求通常是由外设发起的,例如定时器溢出事件,串口接收数据寄存器非空,当使能了外设中的DMA请求之后,接收到对应事件便会自动触发一次DMA请求。

DMA 设备树描述

DMA控制器

在设备树中会有针对DMA控制器的描述,以STM32为例,下面是设备树中的DMA控制器

dma1: dma@40026000 {compatible = "st,stm32-dma-v1";#dma-cells = <4>;reg = <0x40026000 0x400>;interrupts = <11 0 12 0 13 0 14 0 15 0 16 0 17 0 47 0>;clocks = <&rcc STM32_CLOCK_BUS_AHB1 0x200000>;status = "disabled";};
  • 与DMA控制器对应的绑定文件,其中 “#dma-cells” 为4代表每一个DMA通道的配置需要一个DMA控制器的 phandle 加上 四个参数

    • channel 被使用的DMA通道
    • DMA外设请求ID
    • 32位的通道配置
    • DMA的传输特性(fifo)
/* st,stm32-dma-v1.dtsi */
compatible: "st,stm32-dma-v1"include: st,stm32-dma.yamlproperties:"#dma-cells":const: 4dma-cells:- channel- slot- channel-config- features/* st,stm32-dma.yaml */
description: |STM32 DMA controllerThe STM32 DMA is a general-purpose direct memory access controllercapable of supporting 5 or 6 or 7 or 8 independent DMA channels.Each stm32 soc with a DMA is of a special version type, which could beV1 like stm32F4 or stm32F2 socs, they include FIFO control registersor V2 like stm32L4 soc or stm322WB, some also have DMAMUX controlleror V2bis like stm32F1 or stm32L1, where requests are multiplexedcompatible: "st,stm32-dma"include: dma-controller.yamlproperties:reg:required: trueinterrupts:required: truest,mem2mem:type: booleandescription: If the DMA controller V1 supports memory to memory transferdma-offset:type: intdescription: |offset in the table of channels when mapping to a DMAMUXfor 1st dma instance, offset is 0,for 2nd dma instance, offset is the nb of dma channels of the 1st dma,for 3rd dma instance, offset is the nb of dma channels of the 2nd dmaplus the nb of dma channels of the 1st dma instance, etc.

外设DMA请求

  • 当设备需要使用DMA时,从 zephyr/include/zephyr/devicetree/dma.h 中的宏可以看出,如果想在驱动中访问设备树,必须在对应的节点中增加 dmas 和 dma-names 属性,其中 dmas 属性中保存了各个通道的配置参数,dma-names 则是每个dmas 中配置对应的名称。
dma1: dma@... { ... };
dma2: dma@... { ... };n: node {dmas = <&dma1 1 2 0x400 0x3>,<&dma2 6 3 0x404 0x5>;dma-names = "tx", "rx";
};DT_DMAS_CTLR_BY_IDX(DT_NODELABEL(n), 0)   // DT_NODELABEL(dma1)
DT_DMAS_CTLR_BY_NAME(DT_NODELABEL(n), rx) // DT_NODELABEL(dma2)
  • 在Zephyr中使用DMA的外设并不多见,以STM32为例,仅在I2S,UART,SPI中使用到了DMA,如果要在其他外设中使用DMA,需要在drivers目录下对应的板载外设驱动中获取设备树相应配置,并参考其他外设实现对DMA的支持。

Zephyr DMA相关推荐

  1. Zephyr UART

    文章目录 串口驱动工作方式 定义串口设备节点 修改串口配置 编写设备驱动程序 接口定义 蓝牙串口驱动实例 功能演示 串口驱动工作方式 与大多数外设一样,串口的工作模式有三种: 中断驱动模式 DMA异步 ...

  2. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

  3. linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘

    1.前言 像大白这种调包侠,深知不懂底层技术点就如同空中楼阁,再这样下去面阿里p10是没希望了. 想到这里,我开始慌了,所以今天和大家一起学习个底层技术点-零拷贝Zero-Copy. Linux系统中 ...

  4. 单片机I/O控制方式(UART中断和DMA中断的区别)

    目录 1.程序循环检测方式 2.中断驱动方式 3.直接内存访问方式 单片机I/O设备的控制方式主要有三种:程序循环检测.中断驱动和直接内存访问. 1.程序循环检测方式 程序循环检测方式的基本思路是:在 ...

  5. stm32的rxne和idle中断_HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问

    仿真能看到接收缓冲区数组中的数据,但不能访问,如果不访问,再开启DMA接收能正常接收,并且在仿真状态下也能查看.只要访问一次这个数组,下一次开启DMA接收后就不能接收数据了. 原代码如下: if(rx ...

  6. dma工作时cpu工不工作_CPU如何工作?

    dma工作时cpu工不工作 CPU, also known as the microprocessor is the heart and/or brain of a computer. Lets De ...

  7. 百度成立小度蓝牙联盟,DMA+小度App打造蓝牙语音风口

    人机交互经历了三个阶段键鼠.触屏和语音交互.在国外,谷歌.亚马逊.苹果等巨头的竞争已经到达白热化状态:在国内,百度的DuerOS正是这方面的一位大玩家. 在技术发展的各个时代中,提前入局的厂商,必然能 ...

  8. linux zynq ps dma,Zynq PS侧DMA驱动

    Linux中,驱动必然会有驱动对应的设备类型.在linux4.4版本中,其设备是以设备树的形式展现的. PS端设备树的devicetree表示如下 324 dmac_s: dmac@f8003000 ...

  9. dma接收双缓存 stm32_容易被大多数人忽视的STM32串口DMA问题

    讨论三个问题: 1.什么叫串口DMA 请求: 2.串口简要复习: 3.串口DMA发送流程. 第一 什么叫串口DMA 请求(战舰STM32开发板) 说这个问题之前先简单回顾DMA的基本特性.先导出原子哥 ...

最新文章

  1. 近期活动盘点:知识智能高峰论坛暨“知识智能联合研究中心”年度报告会、新时代的医学影像及心脑血管成像的应用思享会...
  2. iOS组件化开发实践
  3. SSH 自动断开 解决方案
  4. hdu - 1072 Nightmare(bfs)
  5. 八进制数输出二进制c语言,C语言 某数输出二进制的某位
  6. php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
  7. CSS预处理——LESS
  8. console.log()不显示结果_RNA结合蛋白与RNA的缠绵故事,教你不做实验发文章
  9. 如何在idea中使用Mybatis-generator插件快速生成代码
  10. Android studio 插件安装
  11. python怎么使用-如何使用python进行第一个机器学习项目(详细教程篇)
  12. 温故知新----css盒模型
  13. vscode风格超酷个人主页源码
  14. 「行业化、产业化、专业化」,解析中科曙光眼中的大数据现状和未来...
  15. 查看论文是否被ISTP、EI检索
  16. 科学计算机如何将角度换成小数点,角度计算器-卡西欧计算器上D(角度制)怎么切换RT– 手机爱问...
  17. Linux的LILO引导程序,LILO引导装载器详解
  18. OpenGL——场景设计
  19. 我找遍全网,整理了1份纯新手向电脑购机&装机攻略!
  20. 性能测试入门,其实很简单,看看这篇,好好学习

热门文章

  1. .net的反射技术(2)深究及 性能比较
  2. Java计算当前应用的tps_Java TPS实现
  3. TestNG测试报告美化buid.xml配置
  4. bms中soh计算方式_电动汽车BMS中SOH和SOP估算策略总结
  5. 软件配置管理(一)配置管理概念与目标
  6. leetcode 16 -- 3Sum Closest
  7. 测量,信号处理中的精度分析 误差传播理论
  8. 在编写了一个c语言源程序c001.c,C习题及答案
  9. fmri|SPM contrast manager
  10. C++中的dynamic_cast和static_cast转化