在實際使用 LTDC 控制器控制液晶屏時,使 LTDC 正常工作后,往配置好的顯存地址
寫入要顯示的像素數據, LTDC 就會把這些數據從顯存搬運到液晶面板進行顯示,而顯示
數據的容量非常大,所以我們希望能用 DMA 來操作,針對這個需求, STM32 專門定制了
DMA2D 外設,它可用於快速繪制矩形、直線、分層數據混合、數據復制以及進行圖像數
據格式轉換,可以把它理解為圖形專用的 DMA。
DMA2D 結構框圖剖析
圖 27-13 是 DMA2D 的結構框圖,它與前面 LTDC 結構里的圖像處理單元很類似,主
要為分層 FIFO、 PFC 及彩色混合器。
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 像素格式轉換器后,前景層和背景層的圖像都輸入到混合
器中運算,運算公式見圖 27-15。
4. OUT PFC
OUT PFC 是輸出像素格式轉換器,它把混合器轉換得到的圖像轉換成目標格式,如
ARGB8888、 RGB888、 RGB565、 ARGB1555 或 ARGB4444,具體的格式可根據需要在輸
出 PFC 控制寄存器 DMA2D_OPFCCR 中選擇。
STM32F429 芯片使用 LTDC、 DMA2D 及 RAM 存儲器,構成了一個完整的液晶控制
器。 LTDC 負責不斷刷新液晶屏, DMA2D 用於圖像數據搬運、混合及格式轉換, RAM 存
儲器作為顯存。其中顯存可以使用 STM32 芯片內部的 SRAM 或外擴 SDRAM/SRAM,只
要容量足夠大即可(至少要能存儲一幀圖像數據)。
DMA2D結構體
配置完這些結構體成員,調用庫函數DMA2D_Init即可把這些參數寫入
到DMA2D的控制寄存器中,然后再調用DMA2D_StartTransfer函數開啟數據傳輸及轉換。