在实际使用 LTDC 控制器控制液晶屏时,使 LTDC 正常工作后,往配置好的显存地址写入要显示的像素数据, LTDC 就会把这些数据从显存搬运到液晶面板进行显示,而显示数据的容量非常大,所以我们希望能用 DMA 来操作,针对这个需求, STM32 专门定制了DMA2D 外设,它可用于快速绘制矩形、直线、分层数据混合、数据复制以及进行图像数据格式转换,可以把它理解为图形专用的 DMA。
DMA2D结构图:
1. FG FIFO 与 BG FIFO
FG FIFO(Foreground FIFO)与 BG FIFO(Backgroun FIFO)是两个 64x32 位大小的缓冲区,它们用于缓存从 AHB 总线获取的像素数据,分别专用于缓冲前景层和背景层的数据源。AHB 总线的数据源一般是 SDRAM,也就是说在 LTDC 外设中配置的前景层及背景层数据源地址一般指向 SDRAM 的存储空间,使用 SDRAM 的部分空间作为显存。
2. FG PFC 与 BG PFC
FG PFC(FG Pixel Format Convertor)与 BG PFC(BG Pixel Format Convertor)是两个像素格式转换器,分别用于前景层和背景层的像素格式转换,不管从 FIFO 的数据源格式如何,都把它转化成字的格式(即 32 位), ARGB8888。图中的“ɑ”表示 Alpha,即透明度,经过 PFC,透明度会被扩展成 8 位的格式。图中的“CLUT”表示颜色查找表(Color Lookup Table),颜色查找表是一种间接的颜色表示方式,它使用一个 256x32 位的空间缓存 256 种颜色,颜色的格式是 ARGB8888 或RGB888。见图 27-14,利用颜色查找表,实际的图像只使用这 256 种颜色,而图像的每个像素使用 8 位的数据来表示,该数据并不是直接的 RGB 颜色数据,而是指向颜色查找表的地址偏移,即表示这个像素点应该显示颜色查找表中的哪一种颜色。在图像大小不变的情况下,利用颜色查找表可以扩展颜色显示的能力,其特点是用 8 位的数据表示了一个 24 或32 位的颜色,但整个图像颜色的种类局限于颜色表中的 256 种。 DMA2D 的颜色查找表可以由 CPU 自动加载或编程手动加载。
3. 混合器
FIFO 中的数据源经过 PFC 像素格式转换器后,前景层和背景层的图像都输入到混合器中运算,
4. OUT PFC
OUT PFC 是输出像素格式转换器,它把混合器转换得到的图像转换成目标格式,如ARGB8888、 RGB888、 RGB565、 ARGB1555 或 ARGB4444,具体的格式可根据需要在输出 PFC 控制寄存器 DMA2D_OPFCCR 中选择。
STM32F429 芯片使用 LTDC、 DMA2D 及 RAM 存储器,构成了一个完整的液晶控制器。 LTDC 负责不断刷新液晶屏, DMA2D 用于图像数据搬运、混合及格式转换, RAM 存储器作为显存。其中显存可以使用 STM32 芯片内部的 SRAM 或外扩 SDRAM/SRAM,只要容量足够大即可(至少要能存储一帧图像数据)。