DMA2D 原理

  1. DMA2D是一种专门用来处理图像的DM,和DMA类似,但也有很多的差异性。

DMA2D有四种工作方式。

  1. 寄存器到存储器
  2. 存储器到存储器
  3.  存储器到存储器并执行像素格式转换
  4.  存储器到存储器并执行像素格式转换和混合

这四种工作方式,在不同的地方有各自的作用。

 

  1.  DMA2D主要是依据前景层FG和背景层BG,通过FIFO来从这两个层中的某一个或者两个来获得数据,并对数据进行处理。

DMA2D 在寄存器到存储器模式下工作时,不激活任何 FIFO。

DMA2D 在存储器到存储器模式下工作时(无像素格式转换和混合操作),仅激活 FG FIFO,并将其用作缓冲区。

DMA2D 在存储器到存储器模式下工作时并支持像素格式转换时(无混合操作),不会激活BG FIFO。

DMA2D 在存储器到存储器模式下工作时并支持像素格式转换时(有混合操作),才会激活BG FIFO。

 

  1. DMA2D还有颜色查找表CLUT可以利用,CLUT的数据是根据自己的想法和思路进行构造和生成的。在混合的时候,会自己根据8位数据的大小作为偏移来寻找到对应的RGB值。
  2. 首先我们需要配置:DMA2D_CR 寄存器的 MODE[1:0] 位选择工作模式

工作方式

  配置过程

寄存器到存储器

寄存器到存储器模式用于以预定义颜色填充用户自定义区域。

颜色格式在 DMA2D_OPFCCR 中设置。

DMA2D 不从任何源获取数据。它只将 DMA2D_OCOLR 寄存器中定义的颜色写入通过

DMA2D_OMAR 寻址以及 DMA2D_NLR 和 DMA2D_OOR 定义的区域。

存储器到存储器

在存储器到存储器模式下, DMA2D 不执行任何图形数据转换。 前景层输入 FIFO 充当缓冲

区,数据从 DMA2D_FGMAR 中定义的源存储单元传输到 DMA2D_OMAR 寻址的目标存储

单元。

DMA2D_FGPFCCR 寄存器的 CM[3:0] 位中编程的颜色模式决定输入和输出的每像素位数。

对于要传输的区域大小,源区域大小由 DMA2D_NLR 和 DMA2D_FGOR 寄存器定义,目标

区域大小则由 DMA2D_NLR 和 DMA2D_OOR 寄存器定义。

 存储器到存储器并执行像素格式转换

DMA2D 对源数据执行像素格式转换并将结果存储在目标存储单元。

对于要传输的区域大小,源区域大小由 DMA2D_NLR 和 DMA2D_FGOR 寄存器定义,目标

区域大小则由 DMA2D_NLR 和 DMA2D_OOR 寄存器定义。

从 DMA2D_FGMAR 寄存器定义的位置获取数据,并由前景层 PFC 进行处理。原始像素格

式通过 DMA2D_FGPFCCR 寄存器配置。

如果原始像素格式是直接颜色模式,则所有颜色通道都扩展到 8 位。

如果像素格式是间接颜色模式,则必须将相关 CLUT 加载到 CLUT 存储器中

存储器到存储器并执行像素格式转换和混合

从前景层 FIFO 和背景层 FIFO(分别在 DMA2D_FGMAR 和 DMA2D_BGMAR

中定义)获取 2 个源图像。

必须按存储器到存储器模式中所述配置两个像素格式转换器。由于这两个像素格式转换器各

自独立且自身具有 CLUT 存储器,因此其配置可以不同。(计算公式见手册)

输出 PFC 将根据指定的输出格式对得到的 32 位像素值进行编码,并且编码数据将写入

DMA2D_OMAR 寻址的目标存储单元。

在这里面需要注意: DMA2D_OOR表示行偏移,这个值的意思表示我们的数据显示将在距离某一行的首位置后,下个数据显示的位置。

       DMA2D_NLR里面有两个值:PL(每行像素数):每行需要显示多少个像素点。

   NL(行数):表示我们显示的数据需要的行数。

屏幕显示原理:屏幕是由像素点构成,行数和列数表示的长度屏幕的大小,例如320*240,就表示屏幕有每行有320个像素点,总共有240行。

    所有的显示在屏幕上的数据都是24位(不带Alpha通道)或者32位(带Alpha通道),虽然我们的RGB格式是有565的,但是最终显示还是按照24位来整的。(个人在stm32F429上的理解)。

直接颜色格式:常见的RGBARGB系列。

间接颜色模式:L,A系列。

你可能感兴趣的:(DMA2D)