Mini2440裸機開發之LCD基礎
一、LCD硬體原理
要使一塊LCD正常的顯示文字或影象,不僅需要LCD驅動器,而且還需要相應的LCD控制器。在通常情況下,生產廠商把LCD驅動器會以COF/COG的形式與LCD玻璃基板製作在一起,而LCD控制器則是由外部的電路來實現,現在很多的MCU內部都集成了LCD控制器,如S3C2410/2440 等。
通過LCD控制器就可以產生LCD驅動器所需要的控制訊號來控制STN/TFT屏了。嵌入式LCD主要以薄膜式電晶體型TFT為主流。
1.1 LCD示意圖
下圖是LCD示意圖,裡面的每個點就是一個畫素點。它裡面有一個電子槍,一邊移動,一邊發出各種顏色的光。用動態圖表示如下:
電子槍是如何移動的?
- 有一條CLK時鐘線與LCD相連,每發出一次CLK(高低電平),電子槍就移動一個畫素。
顏色如何確定?
- 由連線LCD的三組線RGB三原色混合而成:R(Red)、G(Green)、B(Blue)確定。
電子槍如何得知應跳到下一行?
- 有一條HSYNC訊號線與LCD相連,每發出一次脈衝(高低電平),電子槍就跳到下一行,該訊號叫做行同步訊號。
電子槍如何得知應跳到原點?
- 有一條VSYNC訊號線與LCD相連,每發出一次脈衝(高低電平),電子槍就跳到原點,該訊號叫做幀同步訊號。
RGB線上的資料從何而來?
- 記憶體裡面劃分一塊視訊記憶體(FrameBuffer),裡面存放了要顯示的資料,LCD控制器從裡面將資料讀出來,通過RGB三組線傳給電子槍,電子槍再依次打到顯示屏上。
前面的訊號由誰發給LCD?
- 有S3C2440裡面的LCD控制器來控制發出訊號。
工作原理:
- LCD屏可以看作是由許多象素構成的,比如320*240就是由320*240個象素構成的,每個象素由RGB三色調和,每種顏色又由多個位組成。比如我們的開發板上的LCD,有320*240個象素,每個象素由RGB三色調和,RGB三色位數分別為:565。
- s3c2440內集成了LCD控制器,LCD控制器外接LCD,每來一個VLCK,就會從左到右在LCD螢幕上顯示一個象素的顏色,而這一個個象素的顏色就存放在視訊記憶體裡,在嵌入式領域,一般不會佩戴專門的視訊記憶體,而是從記憶體SDRAM中劃分出一部分充當視訊記憶體;
- VLINE引腳每發出一個行同步訊號,HSYNC發出一次脈衝時,表示一行的資料傳送完成,就會換行,從上一行的最右邊跳到下一行的最左邊;
- VFRAME引腳每發出一個幀同步訊號,VSYNC發出一次脈衝時,表示一幀的資料傳送完,這時就會跳到螢幕起始位置,開始下一幀資料的傳送。
1.2 TFT典型時序圖
下圖給出了TFT的典型時序圖。
我們先來理解下面引腳有暫存器中相關引數的意義:
外部引腳訊號:
- VSYNC(幀同步訊號):每發出一個脈衝,表示新的一幀影象資料開始傳送;
- HSYNC(行同步訊號):每發出一個脈衝,表示新的一行影象資料開始傳送;
- VLINE:發出LCD行掃描訊號 —— GPC2 :配置為LCD引腳;
- VCLK(畫素時鐘訊號):每發出一個脈衝,表示新的一個點影象資料開始傳送;—— GPC1引薦 :配置為LCD引腳;
- VD[3]——VD[7] :LCD資料匯流排 ——GPC11:GPC15 :配置為LCD引腳;
- VD[10]——VD[15] :LCD資料匯流排 ——GPD2:GPD7 :配置為LCD引腳;
- VD[19]——VD[23] :LCD資料匯流排 ——GPD11:GPD15 :配置為LCD引腳;
- VDEN:資料使能訊號;——GPC4 :配置為LCD引腳;
- LEND:行結束訊號;
- INT_FrSyn:是產生中斷訊號 ,每傳完一幀資料後就會發生一次中斷;
暫存器引數:
- VSPW:幀同步訊號的脈寬,單位為1行(Line)的時間;
- VFPD: 幀同步訊號的前肩,單位為1行(Line)的時間;
- VBPD: 幀同步訊號的後肩,單位為1行(Line)的時間;
- LINEVAL :幀顯示尺寸-1,即屏行寬-1;
- HBPD:行同步訊號的後肩,單位為1VCLK的時間;
- HFPD:行同步訊號的前肩,單位為1VCLK的時間;
- HSPW:行同步訊號的脈寬,單位為1VCLK的時間;
- HOZVAL:行顯示尺寸-1,即屏列寬-1;
1.3 LCD硬體原理圖
Mini2440採用的LCD為TFT屏,型號為sony ACX502BMU-7(TFT屏)。由240*320個畫素組成,每個象素由RGB三色調和,RGB三色位數分別為:565。電路圖如下:
二、S3C2440 LCD控制器
2.1LCD控制器特性
S3C2440 中的LCD 控制器由從位於系統儲存器的視訊緩衝區到外部LCD 驅動器的轉移LCD 影象資料邏輯組成。
LCD 控制器支援單色LCD 的單色、2 位每畫素(4 階灰度)或4 位每畫素(16 階灰度)模式,通過使用基 於時間的抖動演算法和幀頻控制(FRC)方法,其可以連線到8 位每畫素(256 色)的彩色LCD 面板和連線到12 位 每畫素(4096 色)的STN LCD。
其支援1 位每畫素、2 位每畫素、4 位每畫素和8 位每畫素的調色TFT 彩色LCD 面板連線,以及16 位每畫素 和24 位每畫素的無調色真彩顯示。
可以程式設計LCD 控制器來支援不同涉及螢幕水平和垂直畫素數、資料介面的資料線寬度、介面時序和重新整理率的需要。
TFT LCD 顯示:
- – 支援TFT 的1、2、4、8 BPP(位每畫素)調色顯示 ;
- – 支援彩色TFT 的16、24 BPP 無調色顯示 ;
- – 支援24 位每畫素模式下最大16M 色TFT;
- – 支援多種螢幕尺寸:
典型實際螢幕尺寸:640×480、320×240、160×160 等
最大虛擬螢幕尺寸為4M 位元組
64K 色模式最大虛擬螢幕尺寸: 2048×1024 等
2.2LCD控制器框圖
從上圖看出,S3C2440 LCD控制器用於傳輸視訊資料並且生成必要的控制訊號,如VFRAME,VLINE,VCLK,VM等。除了控制訊號,S3C2440還有視訊資料埠,即VD [23:0]。
通過設定REGBANK(暫存器組),LCDCDMA會自動(無需CPU參與)把記憶體上FrameBuffer裡的資料,通過VIDPRCS傳送到引腳VD[23:0]資料匯流排上,再配合VIDEOMUX引腳的控制訊號,正確的顯示出來。
- REGBANK:具有17個可程式設計暫存器組和256x16調色盤儲存器,用於配置LCD控制器。
- TIMEGEN:產生控制訊號,例如 VSYNC、HSYNC、VCLK等訊號
- LCDCDMA:可以自動從FrameBuff中把資料copy出來。
- VIDPRCS:從LCDCDMA接收視訊資料,將資料輸出到VD[23:0]資料匯流排上。
那麼總結LCD控制器主要功能如下:
- 取:從記憶體(FrameBuffer)取出某個畫素的資料(之後需要把FrameBuffer地址、BPP、解析度告訴LCD控制器);
- 發:配合其它訊號把FrameBuffer中的資料發給LCD;(那麼需要設定LCD控制器時序、設定引腳極性);
LCD模組工作的整個流程如下:
- 資料首先是存放在記憶體(FrameBuffer)中,然後通過一個LCDCDMA將快取裡面的資料運送到LCD控制器;
- 然後資料通過VD[0~23]從LCD控制器運送到LCD驅動器,而LCD控制器和LCD驅動器之間的資料線、控制線、時鐘線是用來維持LCD控制器和LCD驅動器之間的穩定的;
- 最後驅動器將資料顯示在TFT LCD上面;
2.3Framebuff資料儲存格式
我們可以配置暫存器的BSWP、HWSWP來設定Framebuff中的畫素儲存格式。
每畫素24位資料格式(24BPP):
BSWP = 0,HWSWP = 0,BPP24BL = 0
D[31:24] | D[23:0] | |
000H | 空位 | P1 |
004H | 空位 | P2 |
008H | 空位 | P3 |
... |
BSWP = 0,HWSWP = 0,BPP24BL = 1
D[31:24] | D[23:0] | |
000H | P1 | 空位 |
004H | P2 | 空位 |
008H | P3 | 空位 |
... |
24位下的VD引腳描述:
VD | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||||||||||
G | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||||||||||
B | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
從圖中可以看到24位的畫素,在LCD控制器的VD[7:0]表示BLUE, VD[15:8]表示GREEN,VD[23:16]表示RED。
在記憶體中的FrameBuffer中每一個畫素佔據4個位元組,當BPP24BL=0時,低24位為顏色資料,當BPP24BL=1時,高24位為顏色資料。
每畫素16位資料格式(16BPP):
BSWP = 0,HWSWP = 0
D[31:16] | D[16:0] | |
000H | P1 | P2 |
004H | P3 | P4 |
008H | P5 | P6 |
... |
BSWP = 0,HWSWP = 1
D[31:16] | D[15:0] | |
000H | P2 | P1 |
004H | P4 | P3 |
008H | P6 | P5 |
... |
16位下的VD引腳描述:
5:6:5
VD | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R | 4 | 3 | 2 | 1 | 0 | NC | NC | NC | ||||||||||||||||
G | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||||||||||||
B | 4 | 3 | 2 | 1 | 0 |
5:5: 5:1
VD | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R | 4 | 3 | 2 | 1 | 0 | I | NC | NC | NC | |||||||||||||||
G | 4 | 3 | 3 | 2 | 1 | 0 | ||||||||||||||||||
B | 4 | 3 | 2 | 1 | 0 | I |
也可以看到16BPP的畫素,在記憶體中的FrameBuffer中每一個畫素佔據2個位元組,HWSWP用來設定畫素資料的存放方式。
再看下LCD控制器的VD引腳輸出情況,可以看到16BPP時分5:6:5和5:5:5:i兩種資料格式。
- 當5:6:5模式時,VD[7:3]表示BLUE, VD[15:10]表示Green資料,VD[23:19]表示RED。
- 當5:5:5:i模式時,VD[7:3]表示BLUE, VD[15:11]表示Green,VD[23:19]表示RED。其中i表示透明度。
8BPP、4BPP、2BPP
那麼當我們的Frame buffer中是8/4/2BPP顏色資料時,是如何把顏色資料填充到LCD上的呢?
採用調色盤。S3C2440A 中的 TFT LCD 控制器支援 1、2、4 或 8BPP調色顯示(偽彩色)和16、24BPP無調色顯示(真彩色)。S3C2440A 可以支援 256 色調色盤給各種色彩對映的選擇,以提供靈活操作給使用者。
假如是16BPP的資料,LCD控制器從FB取出16bit資料,顯示到LCD上,如下圖所示:
那麼當8BPP的資料時,就需要用到調色盤,調色盤裡存放了256個16bit的資料,FB(frame buffer)只存放每個畫素的索引,根據索引去調色盤找到對應的資料傳給LCD控制器,比如從FB中的第0個元素拿到調色盤中的第0個16bit資料,再通過電子槍顯示出來,如下圖所示:
調色盤支援 5:6:5(R:G:B)格式和 5:5:5:I(R:G:B:I)格式。當用戶使用5:5:5:I格式時,I表示強度,也就是透明度。I是用作每個RGB 資料的共用 LSB 位,因此 5:5:5:I與R(5+I):G(5+I):B(5+I)格式相同。
調色盤的具體使用這裡就不介紹了。有興趣檢視晶片使用手冊。
2.4 顯示緩衝區(FrameBuffer)
只要把所要顯示的資料放入顯示快取區內,就可以在螢幕上呈現內容。該快取區是我們自己程式設計時開闢的一段記憶體區。
一般我們是通過定義一個與螢幕尺寸大小相同的二維陣列來開闢該空間的,這樣控制螢幕內容會方便一些,如當螢幕的尺寸為320×240時,可以定義該快取區為LCD_BUFFER[240][320]。
由於S3C2440支援16位和24位的非調色盤真彩色的TFT型LCD模式,而24位顏色模式是用32位資料來表示的,所以前面定義的那個二維資料的資料型別應該是半字整型或全字整型的。
例如,在24位顏色模式下,我們想要在尺寸大小為320×240螢幕的中心處設定為白色畫素,則:LCD_BUFFER[120][160]=0xffffffff。
在S3C2440中,暫存器LCDSADDR1和LCDSADDR2用於設定顯示快取區,即把我們定義的那個二維陣列告訴S3C2440。
- 其中LCDBANK的9位資料指定LCD的BANK,即顯示快取區的第30位到第22位地址;
- LCDBASEU的21位資料指定了LCD的基址,即顯示快取區開始地址的第21位到第1位;
- LCDBASEL的21位資料指定了LCD的尾址,即顯示快取區結束地址的第21位到第1位。
例如,我們想要在尺寸為320×240的螢幕上顯示24位顏色,定義的顯示快取區陣列為LCD_BUFFER[240][320],則:
- LCDBANK等於LCD_BUFFER的第30位到第22位資料值(因為LCD_BUFFER表示的就是陣列的首地址;
- LCDBASEU等於LCD_BUFFER的第21位到第1位資料值;
- 由於是用32位資料表示24為顏色,因此每個畫素值是4個位元組,所以LCDBASEL等於(LCD_BUFFER+(240×320×4))結果的第21位到第1位的資料值。
另外暫存器LCDSADDR3有兩個內容:OFFSIZE和PAGEWIDTH:
- OFFSIZE用於虛擬螢幕的偏移長度,如果我們不使用虛擬螢幕,就把它置為0;
- PAGEWIDTH定義了視口的寬,單位是半字,如在上面的例子中,PAGEWIDTH應該為320×32÷16;
2.5 LCD控制器時序引數
LCD一般需要三個時序訊號:VSYNC、HSYNC和VCLK。
- VSYNC是垂直同步訊號,在每進行一個幀(即一個屏)的掃描之前,該訊號就有效一次,由該訊號可以確定LCD的場頻,即每秒螢幕重新整理的次數(單位Hz)。
- HSYNC是水平同步訊號,在每進行一行的掃描之前,該訊號就有效一次,由該訊號可以確定LCD的行頻,即每秒螢幕從左到右掃描一行的次數(單位Hz)。
- VCLK是畫素時鐘訊號。S3C2440處理LCD的時鐘源是HCLK,通過暫存器LCDCON1中的CLKVAL可以調整VCLK頻率大小,它的公式為:
$$VCLK=\frac{HCLK}{ (CLKVAL+1)*2}$$
例如,HCLK的頻率為100MHz,要想驅動畫素時鐘訊號為6.4MHz的LCD屏,則通過上式計算CLKVAL值:
$$CLKVAL=HCLK/VCLK/2-1=100/6.4/2-1=6.8$$
結果CLKVAL為6.8,取整後(值為6)放入暫存器LCDCON1中相應的位置即可。由於CLKVAL進行了取整,因此我們把取整後的值代入上式,重新計算VCLK,得到$VCLK=7.1MHz$。
按理說,對於一個已知尺寸(即水平顯示尺寸HOZVAL和垂直顯示尺寸LINEVAL已知)的LCD屏,只要確定了VCLK值,行頻和場頻就應該知道了。但這樣還不行的,因為在每一幀時鐘訊號中,還會有一些與屏顯示無關的時鐘出現,這就給確定行頻和場頻帶來了一定的複雜性。如:
- 在HSYNC訊號先後會有水平同步訊號前肩(HFPD)和水平同步訊號後肩(HBPD)出現;
- 在VSYNC訊號先後會有垂直同步訊號前肩(VFPD)和垂直同步訊號後肩(VBPD)出現,在這些訊號時序內,不會有有效畫素訊號出現;
- 另外HSYNC和VSYNC訊號有效時,其電平要保持一定的時間,它們分別叫做水平同步訊號脈寬HSPW和垂直同步訊號脈寬VSPW,這段時間也不能有畫素訊號。因此計算行頻和場頻時,一定要包括這些訊號。
HBPD、HFPD和HSPW的單位是一個VCLK的時間,而VSPW、VFPD和VBPD的單位是掃描一行所用的時間。
在S3C2440中,所有的這些訊號(VSPW、VFPD、VBPD、LINEVAL、HBPD、HFPD、HSPW和HOZVAL)都是實際值減1的結果。這些值是通過暫存器LCDCON2、LCDCON3和LCDCON4來配置,只要把這些值配置成與所要驅動的LCD中相關內容的資料一致即可。
HSYNC(行同步訊號)是一行資料開始傳輸的訊號,一行資料要經過以下幾個步驟:HSPW+1(行的肩寬)+HBPD+1(後消隱)+ 有效資料傳輸HOZVAL+1(240)+HFPD+1(前消隱)。行頻(HSF):
$$HSF=\frac{VCLK}{(HSPW+1)+(HSPD+1)+(HFPD+1)+(HOZVAL+1)}$$
VSYNC(場同步訊號) 是一幀資料開始重新整理的訊號,一幀資料的傳輸要經過以下流程:VSPW+1(場的肩寬)+VBPD+1(後消隱)+有效資料傳輸(LINEVAL+1)+VFPD+1(前消隱)而這些是以行為單位的。場頻(VSF):
$$VSF=\frac{HSF}{(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)}$$
在有些情況下,S3C2440的LCD時鐘訊號的預設極性與所控制的LCD時鐘訊號的極性相反,這時可以通過暫存器LCDCON5的相關位來改變某些時鐘訊號的極性。
引數計算:
Mini2440自帶的LCD -P35:大小為320×240,因此:
$$HOZVAL=320-1,LINEVAL=240-1$$
- 水平同步訊號的脈寬、前肩和後肩分別為2、5和69,則:
$$HSPW=2-1,HFPD=5-1,HBPD=69-1$$
- 垂直同步訊號的脈寬、前肩和後肩分別為2、5和11,則:
$$VSPW=2-1,VFPD=5-1,VBPD=11-1$$
三、暫存器
3.1 LCD控制1暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDCON1 |
0x4D000000 |
R/W |
LCD 控制1 暫存器 |
0x00000000 |
暫存器位資訊:
LCDCON1 | 位 | 描述 | 初始狀態 |
LINECNT(只讀) | [27:18] |
提供行計數器的狀態。從LINEVAL 遞減計數到0。 |
0000000000 |
CLKVAL | [17:8] |
決定VCLK 的頻率和CLKVAL[9:0]。 STN:VCLK = HCLK / (CLKVAL × 2) (CLKVAL≥2) TFT:VCLK = HCLK / [(CLKVAL + 1) × 2] (CLKVAL≥0) |
0000000000 |
MMODE | [7] |
決定VM 的觸發頻率 0 = 每幀 1 = 由MVAL 定義此頻率 |
0 |
PNRMODE | [6:5] |
選擇顯示模式 00 = 4 位雙掃描顯示模式 01 = 4 位單掃描顯示模式(STN) |
00 |
BPPMODE | [4:1] |
選擇BPP(位每畫素)模式 0000 = STN 的1 BPP,單色模式 0001 = STN 的2 BPP,4 階灰度模式 |
0000 |
ENVID | [0] |
LCD 視訊輸出和邏輯使能/禁止。 |
0 |
根據我們之前的分析,引數設定:
- CLKVAL=5;
- PNRMODE設定為0b11;
- BPPMODE設定為0b1100;
- LCD輸出使能,先暫時關閉不輸出;
LCDCON1 = 5<<8 | 3 << 5 | 12 < 1;
3.2 LCD控制2暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDCON2 |
0x4D000004 |
R/W |
LCD 控制2暫存器 |
0x00000000 |
暫存器位資訊:
LCDCON2 | 位 | 描述 | 初始狀態 |
VBPD | [31:24] |
TFT:垂直後沿為幀開始時,垂直同步週期後的的無效行數 STN:STN LCD 時應該設定此位為0 |
0x00 |
LINEVAL | [23:14] |
TFT/STN:此位決定了LCD 面板的垂直尺寸 |
0000000000 |
VFPD | [13:6] |
TFT:垂直前沿為幀結束時,垂直同步週期前的的無效行數 |
00000000 |
VSPW | [5:0] |
TFT:通過計算無效行數垂直同步脈衝寬度決定VSYNC 脈衝的高電平 |
000000 |
根據我們LCD型號,引數設定:
- VBPD=
- LINEVAL=239
- VFPD=
- VSPW=
3.3 LCD控制3暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDCON3 |
0x4D000008 |
R/W |
LCD 控制3暫存器 |
0x00000000 |
暫存器位資訊:
LCDCON3 | 位 | 描述 | 初始狀態 |
HBPD(TFT) | [25:19] |
TFT:水平後沿為HSYNC 的下降沿與有效資料的開始之間的VCLK 周 |
0000000 |
WDLY(STN) |
STN:WDLY[1:0]位通過計數HCLK 數來決定VLINE 與VCLK 之間的延遲。保留WDLY[7:2] 00 = 16 HCLK 01 = 32 HCLK 10 = 48 HCLK 11 = 64 HCLK |
||
HOZVAL | [18:8] |
TFT/STN:此位決定了LCD 面板的水平尺寸。必須決定HOZVAL 來 |
00000000000 |
HFPD(TFT) | [7:0] |
TFT:水平後沿為有效資料的結束與HSYNC 的上升沿之間的VCLK 周 |
0X00 |
LINEBLANK |
STN:此位表明一次水平行持續時間中的空時間。此位微調VLINE 的
頻率。LINEBLANK 的單位為HCLK×8。 |
根據我們LCD型號,引數設定:
- HBPD=
- HOZVAL=319
- HFPD=
3.4 LCD控制4暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDCON4 |
0x4D00000C |
R/W |
LCD 控制4暫存器 |
0x00000000 |
暫存器位資訊:
LCDCON4 | 位 | 描述 | 初始狀態 |
MVAL | [15:8] |
STN:此位定義如果MMODE 位被置位為邏輯’1’的VM 訊號將要觸發 |
0x00 |
HSPW(TFT) | [7:0] |
TFT:通過計算VCLK 的數水平同步脈衝寬度決定HSYNC 脈衝的高電 |
0x00 |
WLH(STN) |
STN:通過計算HCLK的數WLH[1:0]位決定VLINE脈衝的高電平寬度 00 = 16 HCLK 01 = 32 HCLK 10 = 48 HCLK 11 = 64 HCLK |
根據我們LCD型號,引數設定:
- HSPW
3.5 LCD控制5暫存器(用來設定引腳極性,BPP,資料存放格式)
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDCON5 |
0x4D000010 |
R/W |
LCD 控制5暫存器 |
0x00000000 |
暫存器位資訊:
LCDCON5 | 位 | 描述 | 初始狀態 |
保留 | [31:17] |
保留此位並且應該為’0’ |
0 |
VSTATUS | [16:15] |
TFT:垂直狀態(只讀) 00 = VSYNC 01 = 後沿 10 = ACTIVE 11 = 前沿 |
00 |
HSTATUS | 14:13] |
TFT:水平狀態(只讀) 00 = VSYNC 01 = 後沿 10 = ACTIVE 11 = 前沿 |
00 |
BPP24BL | [12] |
TFT:此位決定24 BPP 視訊儲存器的順序 0 = LSB 有效 1 = MSB 有效 |
0 |
FRM565 | [11] |
TFT:此位選擇16 BPP 輸出視訊資料的格式 0 = 5:5:5:1 格式 1= 5:6:5 格式 |
0 |
INVVCLK | [10] |
STN/TFT:此位控制VCLK 有效沿的極性 0 = VCLK 下降沿取視訊資料 1 = VCLK 上升沿取視訊資料 |
0 |
INVVLINE | [9] |
STN/TFT:此位表明VLINE/HSYNC 脈衝極性 0 = 正常 1 = 反轉 |
0 |
INVVFRAME | [8] |
STN/TFT:此位表明VFRAME/VSYNC 脈衝極性 0 = 正常 1 = 反轉 |
0 |
INVVD | [7] |
STN/TFT:此位表明VD(視訊資料)脈衝極性 0 = 正常 1 = 反轉VD |
0 |
INVVDEN | [6] |
TFT:此位表明VDEN 訊號極性 0 = 正常 1 = 反轉 |
0 |
INVPWREN | [5] |
STN/TFT:此位表明PWREN 訊號極性 0 = 正常 1 = 反轉 |
0 |
INVLEND | [4] |
TFT:此位表明LEND 訊號極性 0 = 正常 1 = 反轉 |
|
PWREN | [3] |
STN/TFT:LCD_PWREN 輸出訊號使能/禁止 0 = 禁止PWREN 訊號 1 = 允許PWREN 訊號 |
0 |
ENLEND | [2] |
TFT:LEND 輸出訊號使能/禁止 0 = 禁止LEND 訊號 1 = 允許LEND 訊號 |
0 |
BSWP | [1] |
STN/TFT:位元組交換控制位 0 = 交換禁止 1 = 交換使能 |
0 |
HWSWP | [0] |
STN/TFT:半位元組交換控制位 0 = 交換禁止 1 = 交換使能 |
0 |
根據我們之前的分析,引數設定:
- FRM565=1, 5:6:5
- BSWP=0
- HWSWP=1
3.6幀緩衝器開始地址1暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDSADDR1 |
0X4D000014 |
R/W |
STN/TFT:幀緩衝器開始地址1 暫存器 |
0x00000000 |
暫存器位資訊:
LCDSADDR1 | 位 | 描述 | 初始狀態 |
LCDBANK | [29:21] |
這些位表明系統儲存器中視訊緩衝器的bank 位置的A[30:22]。即使當 |
0x00 |
LCDBASEU | [20:0] |
對於雙掃描LCD:這些位表明遞增地址計數器的開始地址的A[21:1], |
0x000000 |
3.7 幀緩衝器開始地址2暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDSADDR2 |
0X4D000018 |
R/W |
STN/TFT:幀緩衝器開始地址2暫存器 |
0x00000000 |
暫存器位資訊:
LCDSADDR2 | 位 | 描述 | 初始狀態 |
LCDBASEL | [20:0] |
對於雙掃描LCD:這些位表明遞減地址計數器的開始地址的A[21:1], |
0x00 |
3.8幀緩衝器開始地址3暫存器
暫存器資訊:
暫存器名 |
地址 |
是否讀寫 |
描述 |
復位值 |
LCDSADDR3 |
0X4D00001C |
R/W |
STN/TFT:虛擬屏地址設定 |
0x00000000 |
暫存器位資訊:
LCDSADDR3 | 位 | 描述 | 初始狀態 |
OFFSIZE | [21:11] |
虛擬屏偏移尺寸(半字數) |
00000000000 |
PAGEWIDTH | [10:0] |
虛擬屏頁寬度(半字數) |
000000000 |
參考文章