資料介紹
LCD驅(qū)動編寫小結(jié)
3.1 背光:對于大部分的彩色LCD一定要接背光,我們才能看到屏上的內(nèi)容;
3.2 控制信號:不同的LCD廠商對于控制信號有不同的叫法,
VFRAME:LCD控制器和LCD驅(qū)動器之間的幀同步信號。該信號告訴LCD屏的新的一幀開始了。LCD控制器在一個完整幀顯示完成后立即插入一個VFRAME信號,開始新一幀的顯示;
VLINE:LCD控制器和LCD驅(qū)動器之間的線同步脈沖信號,該信號用于LCD驅(qū)動器將水平線(行)移位寄存器的內(nèi)容傳送給LCD屏顯示。LCD控制器在整個水平線(整行)數(shù)據(jù)移入LCD驅(qū)動器后,插入一個VLINE信號;
VCLK:LCD控制器和LCD驅(qū)動器之間的像素時鐘信號,由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿處被LCD驅(qū)動器采樣;
VM:LCD驅(qū)動器的AC信號。VM信號被LCD驅(qū)動器用于改變行和列的電壓極性,從而控制像素點的顯示或熄滅。VM信號可以與每個幀同步,也可以與可變數(shù)量的VLINE信號同步。
3.3 數(shù)據(jù)線:也就是我們說的RGB信號線,不過需要與硬件工程是配合的是他采用了哪種接線方法,24位16位或其它。對于16位TFT屏又有兩種方式,在寫驅(qū)動前你要清楚是5:6:5還是5:5:5:I,這些與驅(qū)動的編寫都有關(guān)系
3.4 要注意一下LCD的電源電壓,對于手持設(shè)備來說一般都為5V或3.3V,如果LCD的需要的電源電壓是5v,那就要注意,電壓只有3.3V的電壓需要提高到5V,否則你可能能將屏點亮,但顯示的圖像要等到太陽從西邊出來的那一天才能正常,呵呵,我可吃過苦頭的哦!
3.5 3.3V邏輯電壓轉(zhuǎn)變成5V邏輯電壓電路圖
3.6 最后還有一個問題,有些LCD屏還需要一顆伴侶芯片,就是S3C2410手冊中的那顆LPC3600。這可能在LCD的手冊中都有論述吧,我沒有遇到過這樣的屏,所以也不是很清楚,不過現(xiàn)在的大部分LCD屏應(yīng)該都不需要這個討厭的家伙了
3.7 還得提醒大家一下,S3C2410到LCD屏的連線千萬千萬別超過0.5米,否則會給你帶來麻煩,我也是吃過苦頭的,LCD屏上面的部分顯示任何信息都是正確的,而只有屏的底部會有時正確有時錯誤,折騰了好一陣,才知道是連線太長的緣故!
3.8 好了,在硬件工程師的幫助下,硬件接好了,那就該我們做軟件的干活了,編寫驅(qū)動吧
3.9 讓我們首先看一下RGB數(shù)據(jù)結(jié)構(gòu)的定義
static struct lcd_rgb ***_lcd_rgb_16 = {
red: //-- offset:11 length:5
green: //-- offset:5 length:6
blue: //-- offset:0 length:5
transp: //-- offset:0 length:0
};
3.10 這是對16位色的RGB顏色進行定義,R:G:B:I = 5:6:5:0,即我們常說的565顯示方式。
3.11 隨便寫一個16位數(shù)據(jù)的顏色數(shù)據(jù)(為了分析的方便,我把它寫成二進制)
RGB = 10101101 10111001 根據(jù)上面的結(jié)構(gòu)定義我們來分析一下RGB各是多少(因為沒有透明色,我們不去分析)
a) blue: {offset: 0, length: 5} 偏移量為0,長度為5,我們從那個RGB中提取出來便是 “11001”
b) green:{offset: 5, length: 6} 偏移量為5,長度為6,我們從那個RGB中提取出來便是101 101
c) red: {offset: 11, length: 5 } 偏移量為11,長度為5,我們從那個RGB中提取出來便是 10101
d) 我們得到了一個RGB值為21:45:25,就是這個顏色
e) 那么反過來,有了RGB的值我們該如何,因為RGB的有效位數(shù)都不足一個字節(jié)(8位),那我們只能忍痛割愛了,舍棄掉低位數(shù)據(jù),代碼如下:
r = R & 0xF8;
g = G & 0xFC;
b = B & 0xF8;
high = r | (g<<5);
low = (g<<3) | (b>>3);
color= (high << 8) | low;
記住,這段代碼在GUI程序中是有用的
3.12 很重要的:
a)顏色位數(shù),bpp:16如果你的LCD屏是TFT的,那一般都可以達到16位色或24位色,這也要看硬件怎么連接了,根據(jù)情況進行設(shè)置即可;
b) LCD屏的寬度和高度xres: 240,yres: 320這個就不用多說了,你的屏的分辨率是多少就設(shè)置成多少唄。
3.12 寄存器的設(shè)置,這些也不困難。下面就讓我們一起一口一口的將S3C2410的LCD寄存器統(tǒng)統(tǒng)吃掉!
首先介紹一下我這塊屏,這是日立的一塊TFT屏,大小為640X240,可以支持到16位色。
與驅(qū)動有關(guān)的一張表,
3.13 看一下LCD寄存器1的設(shè)置。
LINECNT --- 這是一個只讀的數(shù)據(jù),我們當然沒有必要理它
CLKVAL --- 這可是一個很有用的參數(shù),其實沒必要管它后面的計算,我們可以通過實際的測試來得出一個有效的值,對于PNRMODE --- 這個應(yīng)該不用多做解釋,大家一看都明白了,對于TFT屏,只能設(shè)置成11,而對于CSTN屏,可能需要根據(jù)實際屏的信息去設(shè)置,我遇到的屏都設(shè)置成10,即8bit單掃描模式。對于4bit單掃描、4bit雙掃描、8bit單掃描的BPPMODE --- 這個參數(shù)更不用多說了吧,就是設(shè)置屏的顏色位數(shù)嘍。
3.14 LCD 控制器 2,對于 TFT 屏必須要填
看一下圖二 LCD屏資料,對比一下得出如下信息:
LCD2_VBPD:
Vertical back po
LCD2_VFPD:
Vertical front porc
LCD2_VSPW:
Vsync Valid width
關(guān)于LINEVAL在程序的后面將
經(jīng)過分析,我們知道了如何設(shè)置LCD2:
3.15 LCD 控制器 3
對于 TFT 屏,很容易將 HBPD 和 HFPD 找出來,如下
porch 典型值為 37
porch 典型值為 32
此處暫時不管
LCD3_HBPD:
Horizontal back
LCD3_HFBD:
Horizontal back
對于HOZVAL同樣會在后面提到,
經(jīng)過分析,我們知道了如何設(shè)置LCD3:
3.16 LCD 控制器 4
對于 TFT 屏,需要設(shè)置 HSPW 的值,這個在 LCD 手冊上也很容易
_HSPW:
典型值為 5意思,有什么作用,我從來不動它,只取它最初的那個值13
經(jīng)過分析,我們知道了如 何設(shè)置 LCD4:
3.17 LCD 控制器 5
這個寄存器的看起來比較復(fù)雜,但是無外乎這幾類:
a.只讀信息:VSTATUS和HSTATUS只讀的東東,設(shè)置它也沒
b.TFT屏的顏色信息:BPP24BL、FRM565TFT屏的顏色信息,這個我們在LCD的硬件連接時已經(jīng)提到了,根據(jù)具體的接線方式,設(shè)置信息。
c.控制信號的極性,這些信息主要是使S3C2410的信號輸出極性與LCD屏的輸入極性題,需要根據(jù)具體的硬件進行設(shè)置,較為常見的是vline/hsync 、VFRAME/VSYNC脈沖的極性。
d.顏色信息的字節(jié)交換控制位:BSWP、HWSWP
這兩位用來控制字節(jié)交換和半字交換,主要用來大小頭的問題,如果
輸出到屏上的漢字左右互換了,或者輸出到屏上的圖花屏了,可以更改這個選項。
e.我的這塊TFT的信息設(shè)置如下:lcdcon5,一塊 CSTN 屏的信息:lcdcon5
f.FrameBuffer 起始寄存器 2 和 FrameBuffer 起始寄存器 3
這兩個寄存器的設(shè)置比較重要,在此我給出12位色CSTN屏和16位色TFT的設(shè)置代碼:
g.RGB Loopup Table Register
這三個寄存器的在驅(qū)動256色CSTN屏的時候需要使用,我在別的芯片上使用過,因為這顆芯片支持12位色,所以沒有去調(diào)試,我給出兩組可能的值:
S3C44B0上的
rREDLUT = 0xFCA86420;
rGREENLUT = 0xFCA86420;
rBLUELUT = 0xFFFFFA50;
Jupiter上的
rREDLUT = 0xFEC85310
rGREENLUT = 0xFEC85310
rBLUELUT = 0xFB40
3.18 好了,各個寄存器的設(shè)置完成了,最后在驅(qū)動CSTN屏的時候需要提醒大家一句,CSTN的信號引腳中有一個叫VM/DISP的信號線,這個信號線的作用就是打開LCD的顯示開關(guān),讓其進行顯示,它可以接到任何一個GPIO口上。S3C2410中提供了一個VM信號,可以將LCD的這個信號與S3C2410的VM信號相接即可,然后在驅(qū)動中一定要加上如下語句(藍色選中部分):
否則你的LCD可能沒有任何顯示哦(對于TFT屏不需要這個語句)
3.19. 驅(qū)動寫好了,重新Make,下載就可以了。如果一切順利,在TFT屏或256色的CSTN屏上會有一個漂亮的小蜻蜓(應(yīng)該是蜻蜓吧)出現(xiàn)。注意,并不是蜻蜓出現(xiàn)了就代表你的驅(qū)動OK了,還要用GUI程序做進一步的測試,因為某一個或幾個參數(shù)雖然不正確,但是仍然能夠看到小蜻蜓的,但顯示圖形的時候就有問題了。另外,在驅(qū)動CSTN到12位色的時候,我們在屏上看不到小蜻蜓(我的N塊CSTN屏上都沒見到小蜻蜓),我想,可能是armLinux本身不支持12位色顯示,或者我們某些地方?jīng)]搞對的原因吧,但這不代表你的驅(qū)動有問題,用GUI程序?qū)慒rameBuffer,看看能否的到正確的結(jié)果。
3.20. GUI程序的編寫
3.21 其實要在LCD上顯示圖像,說白了就是把數(shù)據(jù)(包含顏色)寫到FrameBuffer中對應(yīng)的位置就可以了用mmap函數(shù)使用戶空間的一段地址關(guān)聯(lián)到設(shè)備內(nèi)存(FrameBuffer)上。無論何時,只要程序在分配的地址范圍內(nèi)進行讀取或者寫入,實際上就是對設(shè)備的訪問,使用 mmap 可以既快速又簡單地訪問顯示卡的內(nèi)存。對于象這樣的性能要求比較嚴格的應(yīng)用來說,直接訪問能給我們提供很大不同。
3.22 不過我曾將幫一個網(wǎng)友調(diào)試了一個S3C44B0上的GUI程序,在他的GUI中mmap函數(shù)總會出錯,因為沒有拿到他的硬件和驅(qū)動源碼,沒有分析出其中的原因,所以只得用write函數(shù),直接向fb0寫入數(shù)據(jù),奇怪的是只寫入一部分數(shù)據(jù)好像都不起任何作用,只得整屏數(shù)據(jù)寫入才搞定了。這可就比較痛苦了,不過好在他只是寫入的黑白數(shù)據(jù),數(shù)據(jù)量還不是很大,要是彩色的那可真的痛苦了
3.23 另外,我還想多啰嗦兩句,F(xiàn)rameBuffer的像素點與LCD屏上的像素點的對應(yīng)關(guān)系 ,深入了解一下對程序的理解可能會更清楚一點。我們知道黑白(2色)顏色用0和1就可以表示了,也就是1位數(shù)據(jù)就可以了,那1個字節(jié)就可以表示8位數(shù)據(jù),假如這個字節(jié)是10101010,F(xiàn)rameBuffer的偏移地址為0,則在LCD屏上便會顯示出4個黑點,黑點中間會有4個白點出現(xiàn)(假如1是黑色);對于4色則用00、01、10、11就可以表示出四種顏色,即用兩位數(shù)據(jù)可以表示一位數(shù)據(jù),那同樣是10101010,則對應(yīng)于LCD屏上則顯示的是顏色值為10,長度為4(8/2)的一條直線;同理,對于8位色(256色),則8位數(shù)據(jù)才能表示出一個點的顏色值,10101010在LCD屏上就只能顯示為顏色值為10101010的點了。
3.24 有了上面的基礎(chǔ)我們就可以很好的理解這個語句了:
即FrameBuffer的大小=LCD屏的寬度 * LCD屏的高度 * 每像素的位數(shù) / 每字節(jié)的位數(shù)
例如,一個320*240的黑白平,F(xiàn)rameBuffer的大小為
320 * 240 * 1 / 8 = 9600 (字節(jié))
而一個320 * 240的16位色LCD的FrameBuffer的大小則為
3.25 TFT屏16位色的畫點函數(shù)
3.26 5) TFT屏16位色下顯示24色位圖函數(shù)
320 * 240 * 16 / 8 = 153600(字節(jié)
- LCD1602驅(qū)動根據(jù)數(shù)據(jù)手冊編寫
- LCD驅(qū)動控制專用芯片TM1721數(shù)據(jù)手冊 10次下載
- 點陣式存儲器多功能LCD驅(qū)動電路VK2C22 13次下載
- 點陣式存儲器多功能LCD驅(qū)動電路VK2C24 17次下載
- 低功耗LCD驅(qū)動芯片VKL060原理圖下載 26次下載
- LCD液晶驅(qū)動芯片SOP24L POD原理圖下載 16次下載
- LCD控制驅(qū)動電路芯片VK1056C原理圖下載 29次下載
- 6*4 LCD控制驅(qū)動電路芯片VK1024B參考電路 12次下載
- 6*4 LCD控制驅(qū)動電路芯片VK1024B 26次下載
- LCD顯示驅(qū)動芯片VK1621S電路圖下載 26次下載
- 看碼源總結(jié)Keil C 51單片機延時程序編寫資料下載
- TFT LCD液晶顯示器的工作原理-謝崇凱(最全版本)LCD驅(qū)動必看.pdf 0次下載
- LCD模塊與點陣LCD驅(qū)動與顯控原理及實踐全解析 70次下載
- LCD驅(qū)動總結(jié) 12次下載
- 點陣LCD驅(qū)動編寫指南
- AOSP源碼定制-內(nèi)核驅(qū)動編寫 708次閱讀
- RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進階篇-進階8 內(nèi)核運行ko文件總結(jié) 930次閱讀
- 基于OpenHarmony編寫GPIO平臺驅(qū)動和應(yīng)用程序 733次閱讀
- 緩沖方案驅(qū)動大型LCD 633次閱讀
- 如何設(shè)計一個簡單的LCD驅(qū)動框架 2011次閱讀
- PIC單片機驅(qū)動LCD段驅(qū)動器的設(shè)計 1302次閱讀
- 對認識SOP的認知、作用、特征及編寫要素! 6035次閱讀
- STM8單片機對LCD模塊的驅(qū)動 5055次閱讀
- LCD1602的驅(qū)動程序的代碼編寫 1.2w次閱讀
- LCD驅(qū)動分析_LCD控制器設(shè)置及代碼詳解 1.8w次閱讀
- 基于MSP430的SPI驅(qū)動編寫之用MSP430驅(qū)動AFE4400 5191次閱讀
- lcd驅(qū)動程序如何編寫顯示圖片功能 2495次閱讀
- 如何用嵌入式Linux系統(tǒng)編寫鍵盤驅(qū)動 1312次閱讀
- 嵌入式驅(qū)動的構(gòu)造分析總結(jié) 4503次閱讀
- IC驅(qū)動LCD方案分析以及考量,為什么STN點陣會引起LCD出現(xiàn)錯誤?是否驅(qū)動的問題? 1595次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1490次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費
- 6基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7藍牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費
- 89天練會電子電路識圖
- 5.91 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關(guān)電源設(shè)計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多