點擊上方「嵌入式云IOT技術(shù)圈」,選擇「置頂公眾號」第一時間查看嵌入式筆記!
來源 | CSDN博客-黃逸芬版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。本文鏈接:
https://blog.csdn.net/weixin_42881419/article/details/104189012
LCD操作原理
- LCD屏幕上的點稱為像素
- 屏幕后面有電子槍【紅綠藍(lán)】:一邊移動,一邊發(fā)出顏色
- 每來一個clk,移動一個像素
- R、G、B三組線確定顏色
- 接收到HSYNC(水平同步信號)脈沖,電子槍從最右邊跳到最左邊。(跳到下一行)
- 接收到VSYNC[垂直同步信號]從最下邊跳到最上邊。(跳到原點)
LCD時序圖
LCD硬件原理圖
006 LCD設(shè)置
打開LCD4.3芯片手冊,根據(jù)芯片手冊設(shè)置
2440_LCD時序圖
LCD display config
可以通過
調(diào)整四邊黑框調(diào)整
屏幕邊框BPP(bit per pixel)
BPP:在FrameBuffer中
每個像素占據(jù)多少位,
- 硬件上LCD的BPP是確定的
但是可以對LCD進(jìn)行封裝 - 16條線,每個像素占16位數(shù)據(jù),16BPP
002 S3C2440_LCD控制器
功能:1.從內(nèi)存中(FrameBuffer)取出某個像素的數(shù)據(jù):把FrameBuffer的地址告訴LCD控制器,BPP,分辨率2.配合其他信號把數(shù)據(jù)發(fā)送給LCD:把時序告訴LCD控制器,設(shè)置引腳的極性
BLOCK DIAGRAM
16BPP
調(diào)色板[ palette]本質(zhì):內(nèi)存
- 16BPP中,本來用16bit表示1像素,也可用利用調(diào)色板,用8位表示;8BPP:偽彩色;16/24BPP:真彩色。
那么當(dāng)使用像素深度為8pp時候,像素深度和我們的帶寬不一致,我們的顏色要用16位表示,如果直接用上肯定不可能,那我們就可以選擇用調(diào)色板,調(diào)色板中存放了256種16bpp的顏色,這時候我們color存放的就不是真實的顏色值了,而是存放的是調(diào)色板中256種顏色的索引,成線性關(guān)系一一對應(yīng),這樣我們大大減輕了系統(tǒng)的負(fù)擔(dān)。用16bpp還是8bpp這得取決實際情況,16bpp肯定比8pp清晰,但同時帶來的負(fù)荷也更加重。
- 過程:FrameBuffer中8bit —> LCD控制器 —> 調(diào)色板中取16bit【用8bit作為索引,取出真正的顏色】 —> LCD
003LCD編程_框架與準(zhǔn)備
定義結(jié)構(gòu)體
typedef?struct?pins_polarity{
?int?vclk;?/*?normal:在下降沿獲取?*/
?int rgb;?/* normal:高電平表示1 */
?int hsync;??/* normal:高脈沖?*/
?int vsync;??/* normal:高脈沖?*/
}pins_polarity,*p_pins_polarity;
typedef?struct?time_sequence{
?/*?垂直方向?*/
?int?tvp;/*?vysnc脈沖寬度?*/
?int?tvb;/*?上邊黑框,Vertical?Back?porch?*/
?int?tvf;/*?下邊黑框,Vertical?Front?porch?*/
?/*?水平方向?*/
?int?thp;/*?hysnc脈沖寬度?*/
?int?thb;/*?左邊黑框,Horizontal?Back?porch?*/
?int?thf;/*?右邊黑框,Horizontal?Front?porch?*/
}time_sequence,*p_time_sequence;
- 定義lcd參數(shù)結(jié)構(gòu)體
typedef?struct?lcd_params{
?/*?引腳極性?*/
?pins_polarity?pins_pol;
?
?/*?時序?*/
?pins_sequence?time_seq;
?
?/*?分辨率,bpp?*/
?int?xres;
?int?yres;
?int?bpp;
?
?/*?framebuffer的地址?*/
?unsigned?int?fb_base;
}lcd_params,*p_lcd_params;
004LCD_編程_抽象出重要結(jié)構(gòu)體
結(jié)構(gòu)體傳參
005LCD_LCD控制器
S3C2440_controller.c:根據(jù)S3C2440數(shù)據(jù)手冊,設(shè)置
LCD控制器相關(guān)寄存器
引腳初始化
void?jz2440_lcd_pin_init(void)
{
?/*?初始化引腳?:?背光引腳*/
?GPBCON?