首页 > 其他分享 >嵌入式基础知识-DMA

嵌入式基础知识-DMA

时间:2023-09-10 10:07:43浏览次数:42  
标签:DMA 请求 存储器 基础知识 传输 内存 嵌入式 外设


本篇来介绍DMA的一些基础知识。

1 DMA简介

DMA(Direct Memory Access),中文名为直接内存访问,它是一些计算机总线架构提供的功能,能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。对应嵌入式处理器来说,DMA可以提供外设和存储器之间,或存储器与存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。

嵌入式基础知识-DMA_DMA

1.1 DMA传输的4种情况

DMA涉及的数据传输分为四种情况:

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

嵌入式基础知识-DMA_数据传输_02

它们本质上是一样的,都是从内存的某一区域传输到内存的另一区域,外设的数据寄存器本质上就是内存的一个存储单元。

1.2 典型的DMA结构

典型的DMA控制器的结构示意图如下:

嵌入式基础知识-DMA_寄存器_03

DMA控制器内部包含4中寄存器/计数器:

  • 地址寄存器:包括源地址和目的地址寄存器
  • 状态寄存器:用于寄存DMA传输前后的状态
  • 控制寄存器:用于选择DMA控制器的操作类型、工作方式、传输方向和有关参数
  • 字节计数器:用于控制传输数据块的长度

DMA控制器需要连接包括:

  • 与外设连接:用于接受外设发出的DMA操作请求和在DMA期间对外设进行控制
  • 与CPU连接:用于请求总线的控制权
  • 与三大总线连接:用于进行总线控制

DMA控制器可以像CPU那样获得总线的控制权,因此可以完成外设与存储器之间的数据高速交换。

如下图,当外设需要与存储器之间进行DMA传输时由DMA控制器提出总线请求,从CPU获得总线授权后,由DMA控制器控制数据的传输。

嵌入式基础知识-DMA_框图_04

2 STM32中的DMA

2.1 STM32的DMA资源概述

STM32F103内部有2 个DMA控制器:

  • DMA1有7个通道
  • DMA2有5个通道,仅存大容量产品中

每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。

此外,每个DMA还有一个仲裁器来协调各个请求的优先权。

STM32F103中的DMA有以下一些特性:

  • 独立的源和目标数据区的传输宽度(字节、半字、全字)
  • 每个通道都有3个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错)
  • 存储器和存储器间的传输
  • 外设和存储器,存储器和外设的传输
  • 闪存、SRAM、外设的 SRAM、APB1、APB2 和 AHB 外设均可作为访问的源和目标

2.2 STM32的DMA框图

STM32F103的DMA框图如下:

嵌入式基础知识-DMA_DMA_05

  • ①代表DMA请求:当外设准备通过DMA传输数据时,需先给DMA控制器发送请求。
  • ②代表DMA通道:DMA1有7 个,DMA2有 5个,虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个。
  • ③代表总裁器:用于处理当发生多个 DMA 通道请求时的响应顺序。仲裁器管理 DMA 通道请求分为两个阶段:
  • 第一阶段:软件阶段,可以在DMA_CCRx寄存器中设置,有4个等级:非常高,高,中,低
  • 第二阶段:硬件阶段,若两个及以上的DMA通道请求设置的优先级一样,则取决于通道编号,越低优先权越高

3 总结

本篇介绍了DMA的一些基础知识,包括DMA传输的4种情况、典型的DMA结构以及STM32的DMA相关基础介绍。


标签:DMA,请求,存储器,基础知识,传输,内存,嵌入式,外设
From: https://blog.51cto.com/xxpcb/7423525

相关文章

  • 嵌入式 Qt 教程
    常见的嵌入式Linux图形界面有Qt/Embedded、DirectFB、MicroWindows/NanoX、MiniGUI和OpenGUI等,每个GUI都有各自不同特点和应用场合,在应用编程上也各不相同。 本文将介绍嵌入式Qt的基础编程,从环境搭建入手,然后介绍了qmake工具以及QtCreator,紧接着给出Qt常见部件编程和范例,最终......
  • KdMapper扩展实现之CrystalMark(winring0x64.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称winring0x64.sys 时间戳47......
  • java基础知识三
    1.Java程序运行机制详细说明首先利用IDE集成开发工具编写Java源代码,源文件的后缀为.java;再利用编译器(javac命令)将源代码编译成字节码文件,字节码文件的后缀名为.class;运行字节码的工作是由解释器(java命令)来完成的。java文件通过编译器变成了.class文件,接下来类加载器又将这些.cl......
  • Java基础知识
    一、基础知识注释的作用解释说明程序,提高程序的阅读性帮助我们调试程序Java语言最基本的单位的类,所以我们首先要定义一个类Java程序要想能够独立运行,必须要有主方法如果想要Java程序有输出,必须要有输出语句定义类的格式:classclassname{......
  • 基于live555研发的EasyRTSPServer嵌入式流媒体服务器解决对接海康NVR时G726音频不能正
    我们在基于live555研发实现对接海康NVR时候,发现视频正常,但音频不能正常播放。基于live555研发的EasyRTSPServer在接入输出视频编码为H.264,音频编码格式为G726,当接入视频源都来自海康的摄像机时,摄像机直接接入海康NVR是可以正常播放的,但接入live555研发的EasyRTSPServer是有问题的......
  • KdMapper扩展实现之CPUID(cpuz141.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称cpuz141.sys 时间戳583446......
  • osg场景中的坐标和模型在3dmax的坐标有什么关联
    在OpenSceneGraph(OSG)中的坐标系统与3dsMax(3DStudioMax)中的坐标系统之间存在一些基本的关联,但也有一些重要的差异。以下是它们之间的主要区别和关联:坐标系方向:OSG使用右手坐标系,其中X轴指向右侧,Y轴指向上方,Z轴指向观察者的方向(远离观察者)。3dsMax通常使用左手坐标系,其......
  • RDMA-内核接口-rxe_map_mr_sg
    描述:映射mr的sg调用链:此处多处调用staticintnvme_rdma_map_sg_fr(structnvme_rdma_queue*queue,    structnvme_rdma_request*req,structnvme_command*c,    intcount){   req->mr=ib_mr_pool_get(queue->qp,&queue->qp->rdma_mrs);  /*  ......
  • 构筑下一代数据中心互联的“超级高速公路”,中科驭数正式发布KPU FLEXFLOW®-2100R RDM
    2023服贸会期间,中科驭数重磅推出最新自研的高性能网络“利器”——KPUFLEXFLOW®-2100RRDMA加速DPU卡。这款产品的发布标志着中科驭数在高性能计算和数据中心领域的不断创新,旨在面向高速网络、高性能存储搭建起算力集群内部通信的"超级高速公路”,助力高性能计算领域创新。站在数......
  • Java学习——基础知识补充
    1.作用域1.1public定义为public的class、interface可以被其他任何类访问,定义为public的field、method可以被其他类访问,前提是首先有访问这个类的权限。注意:一个.java文件只能包含一个public类,但可以包含多个非public类。如果有public类,文件名必须和public类的名字相同。如果......