LTDC DMA2D驅動實驗

2022-07-15 04:03:15 字數 1857 閱讀 2993

stm32f429晶元使用ltdc、dma2d、及ram儲存器,構成了乙個完整的液晶控制器。ltdc負責不斷重新整理液晶屏(將資料從視訊記憶體搬運到液晶屏),dma2d用於影象資料搬運、混合及格式轉換(將資料搬運到視訊記憶體),ram儲存器作為視訊記憶體。

一、ltdc初始化結構體

1)、設定行同步訊號hsync的極性,即hsync有效時的電平。

2)、設定垂直同步訊號csync的極性

3)、設定資料使能訊號de的極性

4)、設定畫素時鐘訊號clk的極性,可設定為上公升沿,或下降沿,表示rgb資料訊號在clk的哪個時刻被採集

5)、設定行同步訊號的的寬度——hsw-1

6)、設定垂直同步訊號的的寬度——vsw-1

7)、hsw+hbp-1的值

8)、vsw+vbp-1的值

9)、hsw+hbp+有效寬度-1的值

10)、vsw+vbp+有效高度-1的值

11)、hsw+hbp+有效寬度+hfp-1的值

12)、vsw+vbp+有效高度+vfp-1的值

13)、配置背景的紅色值

14)、配置背景的綠色值

15)、配置背景的藍色值

ltdc初始化結構體配置好了與液晶屏通訊的基本時序,還有畫素格式、顯示位址等諸多引數需要使用ltdc層級初始化結構體完成。

二、ltdc層級初始化結構體

1)、確定該層顯示視窗的邊界

2)、設定該層資料的畫素格式

3)、設定該層恆定的透明度常量alpha(ltdc_constantalpha)

4)、配置該層的預設顏色值,分別為藍色、綠色、紅色分量及透明度分量

5)、設定混合係數bf1和bf2。每一層實際顯示的顏色都需要使用透明度參與運算,計算出不包含透明度的直接rgb顏色值,然後才傳輸給液晶屏(因為液晶屏本身沒有透明度的概念)

計算公式為  bc=bf1*c + bf2*cs

本結構成員可以設定bf1/bf2引數是使用ca配置還是pa*ca配置。配置成ca表示混合係數中只包含恆定的alpha值,即畫素本身的alpha不會影響混合效果;若配置成pa*ca,則混合係數中包含畫素本身的alpha值,即把畫素本身的alpha加入混合運算中,其中的恆定alpha值即透明度百分比(配置的alpha值/0xff)

bc=恆定alpha*c + (1-恆定alpha)*cs 

6)、設定該層的視訊記憶體首位址

7)、設定當前層的行資料長度(行有效畫素個數*每個畫素的位元組數 + 3)

8)、設定從某行的有效畫素起始位置到下一行起始位置出的資料增量

9)、設定當前層的顯示行數

將這些配置寫入ltdc的層級控制暫存器中,完成初始化。初始化完成後,ltdc會不斷把視訊記憶體空間的資料傳輸到液晶屏進行顯示,可以直接修改或使用dma2d修改視訊記憶體中的資料,從而改變顯示的內容。

三、dma2d初始化結構體

1)、配置dma2d的傳輸模式

2)、配置輸出pfc(畫素格式轉換器)的顏色格式,即它將要傳輸給視訊記憶體的格式

3)、配置dma2d的暫存器顏色值(藍色、綠色、紅色分量及透明度分量)

4)、配置輸出fifo的位址,dma2d的資料會被搬運到該空間,一般把它設定為本次傳輸顯示位置的起始位址

行偏移量的值=行寬度-線的寬度

6)、配置dma2d一共要傳輸多少行資料

7)、配置每行有多少個畫素點

配置完將這些引數寫入dma2d的控制暫存器,然後再呼叫dma2d_starttransfer函式開啟資料傳輸及轉換。

液晶顯示實驗程式設計要點

1)、初始化lcd驅動的引腳

2)、使用ltdc初始化結構體,配置液晶屏的控制引數

3)、使用ltdc的層級初始化結構體,配置各層的控制引數

4)、直接操控視訊記憶體,控制液晶屏顯示圖形

5)、使用dma2d快速繪製直線及矩形

針對nanopi2的hello word 驅動

虛擬機器搭建ubuntu140.4 64bit debian arm linux gcc 友善版本為4.9.3 git clone sudo mkdir p opt friendlyarm toolchain sudo tar xf prebuilts gcc x64 arm cortexa9 li...

D2D技術介紹

一 d2d技術概述 d2d device to device 通訊是由3gpp組織提出的一種在通訊系統的控制下,允許lte終端之間在沒有基礎網路設施的情況下,利用小區資源直接進行通訊的新技術。它能夠提公升通訊系統的頻譜效率,在一定程度上解決無線通訊系統頻譜資源匱乏的問題。與此同時,它還可以有效降低終...

2d 2d對極幾何約束

include iostream include include include include include extra.h use this if in opencv2 using namespace std using namespace cv void find feature match...