DMA/DMA2D概念

目录

DMA

DMA-系统框图

DMA分类

传输方向

传输行为

模块设计

学习过程中的疑问

DMA2D

DMA2D框图

DMA2D应用方式


(1条消息) 【STM32】 DMA原理,步骤超细详解,一文看懂DMA_Z小旋的博客-CSDN博客_dma stm32

对DMA请求如何产生的理解_pangyinglong的博客-CSDN博客_dma请求

【STM32】STM32之深入理解DMA - 知乎 (zhihu.com)

正点原子资料F429资料:提取码: bxkk

DMA

直接存储区访问,DMA控制器独立于内核,概念上与CPU同级。

DMA-系统框图

DMA/DMA2D概念_第1张图片

是否使用DMA的区别

以STM32为例,将ADC采集数据转移到SRAM

否:若不使用DMA,MCU传输数据要以内核为中转站。如内核通过Dcode获取AHB存储的外设ADC数据,然后通过Dcode把数据放到SRAM。

是:外设对DMA controller发出请求,controller收请求并触发工作从AHB外设获取ADC数据存储到DMA通道,随后通过AHB总线把ADC数据放入SRAM

DMA工作方式分类

传输方向角度

有P2M,M2P,M2M三种传输模式。P特指外设的数据寄存器,M特指片内SRAM/FLASH,外部存储器等。

P2M,将外设寄存器数据转移到指定内存空间。如连续高频的ADC采集。

M2P,把特定存储区内容转移至外设的数据寄存器中。

M2M,从一个存储区搬到另一个存储区。

传输行为角度

有直接模式、FIFO模式、单次/循环模式、双缓冲区模式。

直接模式,P2M,每完成1次从外设到FIFO的数据传输后,相应的数据立即就会移出并存储到目标地址。 M2P,一旦使能数据流,DMA装载第一个数据并传输到FIFO,一旦外设请求数据传输,DMA将装载的值传输到目标,然后依次循环。预装载的数据大小为PSIZE(外设数据大小)。

FIFO模式,可以设置FIFO阈值。以STM32F4为例,1/4满深度为一个字即4字节。全满为4字即16字节。当数据存放达到阈值,就会被移走。优点是渐少DMA对内存访问次数减少总线访问竞争,通过BURST分组传输优化传输带宽提升芯片性能。通过对SRC/DST端的数据进行打包或拆包以适应不同数据宽度的访问需求,让DMA的使用更为方便灵活。

STM32带FIFO的DMA传输应用示例 (stmicroelectronics.cn)

注1:在STM32F4中,若将FIFO阈值设置为4字节,则此时引入了DMA BURST传输或称节拍传输。即4字节数据被封装成1组/1个burst/1节。在1节内逐个进行数据传输,此时DMA对总线的占用不会被总线仲裁器解除或打断,以保证每节数据的可靠完成。

注2:区别于FIFO阈值的burst传输,直接传输可以通过设置目的端字节宽度字节/半字/字的格式,以普通方式将1/2/4字节的数据直接传输至目的端。

注3:双缓冲区模式可以实现双向工作。

模块设计角度

有突发传输,周期挪用,透明传输模式。

突发传输模式burst mode,停止CPU访问内存。由DMA控制器发一个停止信号给CPU,要求CPU放弃对数据总线的使用权。DMA控制器获得总线控制权后,进行数据传输,完成后中断通知CPU。适用于高传输率设备。

周期挪用模式cycle stealing mode。当外设I/O设备无DMA请求,CPU正常访问内存。一旦有请求,由I/O设备挪用一个或几个内存周期。较好实现了IO传输,较好发挥了内存与CPU的效率。

透明传输模式transparent mode,时分复用。高效率工作方式,硬件逻辑复杂。

学习过程中的疑问

1DMA controller 如何获取外设的DMA请求以及外设如何发出请求?

DMA请求来自外设的相关寄存器,如数据寄存器,保存外设的工作状态,在符合条件下向DMA发出请求,由于存储器作为M端时无法发出请求,所以在EN后,数据流就会填充FIFO直到。

以STM32的DMA为例,有两种工作模式,即单次和循环模式。单次模式,通过使能DMAEN就进行数据复制,直到剩余传输数据为0。循环模式,并不是每款芯片都有,一些国产芯片没有循环配置功能,如灵动微的MM32芯片。国芯的CCM420x系列没有循环模式,但以另一种链表传输方式实现多块传输功能。

在DMA传输方式中M2M,可以在没有外设请求的方式下进行。DMA使能启动DMA通道时,传输马上开始。且M2M与循环模式无法同时使用。

2、如何知道数据传输的长度?

一般是在启动DMA传输前配置进DMA相关寄存器。

3DMAFIFO满后如何传输下一组数据而不丢数据?

STM32F4的DMA有FIFO深度设置。例如设置深度为16 byte,传输数据为20 byte,则第一次传输将传16 byte,第二次传输4 byte

DMA2D

STM32 DMA2D技术_这还不起飞的博客-CSDN博客_dma2d stm32

具有DMA的功能,此外有1颜色填充(寄存器到存储器)、2图像复制(存储器到存储器)、3颜色格式转换(YCbCr转RGB格式等)、4透明度混合功能。

注:12为内存操作,34为运算加速操作。其中34可以和2一起进行,灵活。

DMA2D框图

DMA2D主要分为FIFO,PFC(Pixel Format Convertor)及混合器,这里的结构类似于LCD的图像处理单元结构。

DMA/DMA2D概念_第2张图片

FIFO: 64*32大小的缓冲区。FG/BG FIFO分别用于缓冲前景层&后景层数据。AHB主设备一般指向SDRAM,使用SDRAM的部分空间作为显存。

OUT FIFO输出经过PFC转换后的结果像素。

PFC:FG/BG PFC是两个像素格式转换器,将FIFO的数据源格式转换成字(32bits)格式,ARGB8888。款图中 α 表示透明度,经过PFC扩展成 8 bits格式。CLUT(Color Lookup Table),使用256*32空间缓存256种颜色,颜色格式ARGB8888或RGB888。

OUT PFC将像素格式从32bits转化成指定输出格式,可在OPFCCR->CM[2:0]字段定义。

混合器:成对混合 SRC像素,计算结果像素。

DMA/DMA2D概念_第3张图片

注:商向下取整。

DMA2D应用方式

具体可见《STM32F4xx中文参考手册-扩展章节》P11.3.11DMA2D配置

1. 寄存器到存储器

用于以预定义颜色填充用户自定义区域。

2. 存储器到存储器

不执行任何图像数据转化。前景层FIFO充当缓冲区,从SRC存储单元传输到目标存储单元。

3. 存储器到存储器&PFC

对SRC数据执行像素格式转换并将结果存储在DST存储单元。

4. 存储器到存储器&PFC&混合

将从FG/BG FIFO获取两个SRC图像,通过相应的PFC转换成32bits根据混合器公式混合,并将输出的结果像素编码写入DST存储单元。

前、背景层使用时,需要关注图片透明度的问题。若前后景格式为RGB565,个人使用时单独设置了两张图片的透明度值。如果前景层是ARGB格式的图片,带透明通道的格式,则无需手动设置透明度值等。

DMA/DMA2D概念_第4张图片

      带透明度通道,格式ARGB

单独设置图片透明度,格式RGB

 

 

你可能感兴趣的:(外设驱动,单片机,stm32,嵌入式硬件)