《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第11章_第1頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第11章_第2頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第11章_第3頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第11章_第4頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第11章_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第11章TFT-LCD驅(qū)動(dòng)程序開發(fā)11.1TFT-LCD工作原理11.2LQ080V3DG01液晶屏11.3SC2410內(nèi)部LCD控制器11.4Linux驅(qū)動(dòng)程序接口——FrameBuffer11.5LCD驅(qū)動(dòng)程序主要代碼結(jié)構(gòu)以及關(guān)鍵代碼分析11.6LCD驅(qū)動(dòng)程序開發(fā)實(shí)例本章小結(jié)

11.1TFT-LCD工作原理

11.1.1LCD概述

液晶最早是奧地利植物學(xué)家萊尼茨爾于1888年發(fā)現(xiàn)的,他發(fā)現(xiàn)某些有機(jī)物熔化后會(huì)經(jīng)歷一個(gè)不透明的呈白色渾濁液體狀態(tài)。第二年,德國(guó)物理學(xué)家萊曼發(fā)現(xiàn)這類渾濁液體外觀上雖然屬于液體,但卻顯示出各向異性晶體特有的雙折射性,于是萊曼將其命名為“液態(tài)晶體”,也就是“液晶”。11.1.2LCD顯示原理

液晶是一種介于固體和液體之間,具有規(guī)則性分子排列的有機(jī)化合物,既有晶體所特有的各向異性造成的雙折射性,又有液體所特有的流動(dòng)性,如圖11-1所示。圖11-1液晶分子特性

1.液晶的光電特性

液晶分子結(jié)構(gòu)為各向異性,所以液晶的光電特性因方向不同而有所差異,也就是液晶分子在介電系數(shù)及折射系數(shù)等光電特性都具有各向異性,利用這些性質(zhì)可以改變?nèi)肷涔獾膹?qiáng)度,形成灰階,制作顯示器。液晶分子的電光效應(yīng)最顯著的是扭曲向列效應(yīng)。在不同電流電場(chǎng)作用下,液晶分子會(huì)規(guī)則旋轉(zhuǎn)90°排列。當(dāng)偏振光通過液晶時(shí),偏振角發(fā)生變化,這個(gè)變化的角度稱為扭曲角,如圖11-2所示。圖11-2液晶的電光效應(yīng)

2.液晶的顯示原理

液晶顯示器是將液晶置于兩片導(dǎo)電玻璃之間,靠?jī)蓚€(gè)電極間電場(chǎng)的驅(qū)動(dòng)引起液晶分子扭曲向列的電光效應(yīng)。在電源的關(guān)開之間控制光源透射或遮蔽,產(chǎn)生明暗兩種效果。如圖11-2所示,在玻璃電極板上裝有配向膜,所以液晶會(huì)沿著溝槽配向,由于玻璃基板配向膜溝槽偏離90°,所以液晶分子成為扭轉(zhuǎn)型。11.1.3LCD驅(qū)動(dòng)原理

1.直接驅(qū)動(dòng)法

1)靜態(tài)驅(qū)動(dòng)

靜態(tài)驅(qū)動(dòng)是指在液晶像素前后電極上施加電壓信號(hào)時(shí)呈顯示狀態(tài),不施加電壓時(shí)呈非顯示狀態(tài)。以圖11-3所示筆段式LCD為例,11-3(a)是筆段式液晶的電極排列方式,11-3(b)是其中一個(gè)液晶像素的驅(qū)動(dòng)電路原理圖。圖11-3筆段式LCD的靜態(tài)驅(qū)動(dòng)在COM端施加一個(gè)占空比為1/2的連續(xù)方波。當(dāng)控制信號(hào)為高電平時(shí),筆段波形與COM波形反向,液晶像素上施加了一個(gè)周期電壓,液晶像素呈顯示狀態(tài);當(dāng)控制信號(hào)為低電平時(shí),筆段波形與COM波形同向,液晶像素上無(wú)電壓,呈非顯示狀態(tài)。控制時(shí)序如圖11-4所示。圖11-4筆段式LCD的靜態(tài)驅(qū)動(dòng)時(shí)序圖

2)動(dòng)態(tài)驅(qū)動(dòng)

當(dāng)LCD的像素?cái)?shù)增多的,筆段式LCD的結(jié)構(gòu)和驅(qū)動(dòng)方法就變得都不合理了。對(duì)于多像素LCD,即點(diǎn)陣式LCD,采用矩陣式排列液晶像素的前后電極,行、列的交叉點(diǎn)為液晶像素,如圖11-5所示。圖11-5點(diǎn)陣式LCD的結(jié)構(gòu)圖

2.有源驅(qū)動(dòng)法

為了進(jìn)一步提高顯示質(zhì)量,TFT-LCD以其分辨率高、響應(yīng)速度快和色彩豐富等優(yōu)點(diǎn)正逐漸取代STN-LCD。如圖11-6所示,TFT-LCD的每個(gè)像素上集成了一個(gè)有源器件——薄膜晶體管(TFT),對(duì)TFT-LCD的驅(qū)動(dòng)實(shí)際上是對(duì)每個(gè)像素點(diǎn)上的TFT的驅(qū)動(dòng),而非直接驅(qū)動(dòng)法將驅(qū)動(dòng)信號(hào)直接施加到液晶像素上,因此,稱TFT-LCD的驅(qū)動(dòng)為有源驅(qū)動(dòng)法。圖11-6TFT-LCD像素結(jié)構(gòu)11.1.4LCD的分類

1.?TN-LCD與STN-LCD

STN-LCD是TN-LCD的升級(jí)產(chǎn)品,兩者結(jié)構(gòu)基本相同。TN-LCD的基本單元和顯示原理如圖11-2所示,液晶的扭曲角為90°,而STN-LCD的扭曲角達(dá)到180°~360°,提高了液晶的電光響應(yīng)速度。如圖11-7所示,由于STN-LCD的掃描行電極和尋址列電極直接連接在液晶像素上進(jìn)行驅(qū)動(dòng),因而存在以下幾個(gè)重要缺陷。圖11-7STN-LCD結(jié)構(gòu)圖1)分辨率低

2)色彩少,無(wú)真彩顯示

3)響應(yīng)速度慢

2.?TFT-LCD

TFT-LCD的響應(yīng)速度取決于TFT的開關(guān)速度,與液晶像素的充放電速度無(wú)關(guān),所以TFT-LCD的響應(yīng)速度遠(yuǎn)快于STN-LCD,可以無(wú)拖影地顯示動(dòng)態(tài)圖像。STN-LCD與TFT-LCD分屬于LCD的低端和高端,性能比較如表11-1所示。

11.2LQ080V3DG01液晶屏

LQ080V3DG01芯片是由日本夏普公司生產(chǎn)的TFT-LCD,其外型尺寸為182mm?×?140mm?×?14mm,尺寸為8寸,分辨率為640?×?480,工作溫度為0℃~+70℃,背光類型為1xccfl,顯示顏色為262k,對(duì)比度為250∶1,亮度為380cd/m2,?接口類型為TTL,響應(yīng)時(shí)間為

80ms,供壓3.3V/5V,功耗6.2W。

11.3SC2410內(nèi)部LCD控制器

11.3.1管腳

S3C2410LCD控制器用于傳輸視頻數(shù)據(jù)和產(chǎn)生必要的控制信號(hào),像VFRAME、VLINE、VCLK、VM等。除了控制信號(hào),S3C2410還有輸出視頻數(shù)據(jù)的端口VD[23:0],如圖11-8

所示。圖11-8S3C2410LCD控制器的外部管腳圖11.3.2寄存器介紹

1.?LCDCON1

LCDCON1中需要設(shè)置以下幾個(gè)域:

CLKVAL是時(shí)鐘比值參數(shù),它決定了VCLK信號(hào)的頻率,對(duì)于TFT型模塊要求CLKVAL≥0,VCLK和CLKVAL的關(guān)系為

VCLK(Hz)?=?HCLK?/?[(CLKVAL?+?1)?×?21]

2.?LCDCON2

LCDCON2需要設(shè)置以下幾個(gè)域:

VBPD:該域表示幀同步脈沖之后到一幀圖像開始顯示之間需要消隱的行數(shù);

LINEVAL:該域表示每幀要顯示的行數(shù);

VFPD:該域表示一幀圖像顯示完成到幀同步脈沖到來(lái)之間需要消隱的行數(shù);

VSPW:該域表示幀同步脈沖的寬度。

3.?LCDCON3

LCDCON3中需要設(shè)置以下幾個(gè)域:

HBPD:該域表示行同步脈沖之后到一行圖像開始顯示之間需要消隱的像素?cái)?shù);

HOZVAL:該域表示每行要顯示的像素?cái)?shù);

HFPD:該域表示一行圖像顯示完成到行同步脈沖到來(lái)之間需要消隱的像素?cái)?shù)。

4.?LCDCON4

LCDCON4中只需要設(shè)置一個(gè)域:HSPW,該域表示行同步脈沖的寬度。

5.?LCDCON5

LCDCON5中主要需要設(shè)置以下幾個(gè)域:

BPP24BL決定24bpp視頻存儲(chǔ)器的大小端模式。

FRM565決定16bpp視頻輸出數(shù)據(jù)的格式。

INVVCLK、INVVLINE、INVVFRAME分別決定了VCLK、VLINE、VSYNC信號(hào)的極性。

INVVDEN、INVVD分別決定了VDEN、VD信號(hào)的極性。11.3.3控制流程

LCD控制器由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600組成(如圖11-9所示)。圖11-9S3C2410內(nèi)部LCD控制器方框圖11.3.4TFT控制器操作

S3C2410支持STN-LCD和TFT-LCD,這里只介紹其對(duì)TFT-LCD的控制。

TIMEGEN產(chǎn)生LCD驅(qū)動(dòng)器的控制信號(hào),如VSYNC、HSYNC、VCLK、VDEN和LEND等。這些控制信號(hào)與REGBANK寄存器組中的LCDCON1/2/3/4/5寄存器的配置關(guān)系相當(dāng)密切,基于LCD控制寄存器中的這些可編程配置,TIMEGEN產(chǎn)生可編程控制信號(hào)來(lái)支持不同類型的LCD驅(qū)動(dòng)器。VSYNC和HSYNC脈沖的產(chǎn)生依賴于LCDCON2/3寄存器的HOZVAL域和LINEVAL域的配置。

HOZVAL和LINEVAL的值由LCD屏的尺寸決定,如下公式:

HOZVAL?=?水平顯示尺寸?-?1

LINEVAL?=?垂直顯示尺寸?-?1

VCLK信號(hào)的頻率取決于LCDCON1寄存器中的CLKVAL域。VCLK和CLKVAL的關(guān)系如下:

VCLK(Hz)?=?HCLK?/?[(CLKVAL?+?1)?×?2]

11.4Linux驅(qū)動(dòng)程序接口——

FrameBuffer

11.4.1FrameBuffer

在Linux2.2.xx之后內(nèi)核版本中出現(xiàn)了一種驅(qū)動(dòng)程序接口即FrameBuffer。這種接口為圖像硬件設(shè)備提供了一種抽象化處理。它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的界面來(lái)訪問圖像硬件設(shè)備。圖11-10Linux系統(tǒng)下FrameBuffer的主要結(jié)構(gòu)11.4.2數(shù)據(jù)結(jié)構(gòu)

1.?LinuxFrameBuffer的數(shù)據(jù)結(jié)構(gòu)

FrameBuffer的數(shù)據(jù)結(jié)構(gòu)的定義在內(nèi)核源碼include/linux/

fb.h文件中。

在FrameBuffer中,fb_info可以說是最重要的一個(gè)結(jié)構(gòu)體,它是Linux為幀緩沖設(shè)備定義的驅(qū)動(dòng)層接口。它不僅包含了底層函數(shù),而且還有記錄設(shè)備狀態(tài)的數(shù)據(jù)。每個(gè)幀緩沖設(shè)備都與一個(gè)fb_info結(jié)構(gòu)相對(duì)應(yīng)。圖11-11LinuxFrameBuffer的總體結(jié)構(gòu)圖

2.?S3C2410中LCD的數(shù)據(jù)結(jié)構(gòu)

在S3C2410的LCD設(shè)備驅(qū)動(dòng)中,定義了s3c2410fb_info(內(nèi)核源碼driver/video/s3c2410.h)文件中來(lái)標(biāo)識(shí)一個(gè)LCD設(shè)備,結(jié)構(gòu)體如下:圖11-12S3C2410驅(qū)動(dòng)的整體結(jié)構(gòu)

11.5LCD驅(qū)動(dòng)程序主要代碼

結(jié)構(gòu)以及關(guān)鍵代碼分析

11.5.1FrameBuffer驅(qū)動(dòng)的統(tǒng)一管理

fbmem.c實(shí)現(xiàn)了LinuxFrameBuffer的中間層,任何一個(gè)FrameBuffer驅(qū)動(dòng),在系統(tǒng)初始化時(shí),必須向fbmem.c注冊(cè),即需要調(diào)用register_framebuffer()函數(shù),在這個(gè)過程中,設(shè)備驅(qū)動(dòng)的信息將會(huì)存入名稱為registered_fb數(shù)組中,這個(gè)數(shù)組定義為:

structfb_info*registered_fb[FB_MAX];

intnum_registered_fb;11.5.2實(shí)現(xiàn)消息的分派

fbmem.c實(shí)現(xiàn)了對(duì)系統(tǒng)全部FrameBuffer設(shè)備的統(tǒng)一管理。當(dāng)用戶嘗試使用一個(gè)特定的FrameBuffer時(shí),fbmem.c怎么知道該調(diào)用哪個(gè)特定的設(shè)備驅(qū)動(dòng)呢?

Linux是通過主設(shè)備號(hào)和次設(shè)備號(hào)對(duì)設(shè)備進(jìn)行唯一標(biāo)識(shí)。不同的FrameBuffer設(shè)備向fbmem.c注冊(cè)時(shí),程序分配給它們的主設(shè)備號(hào)是一樣的,而次設(shè)備號(hào)是不一樣的。于是就可以通過用戶指明的次設(shè)備號(hào),來(lái)具體該調(diào)用哪一個(gè)FrameBuffer驅(qū)動(dòng)。圖11-13LCD驅(qū)動(dòng)的open()函數(shù)的調(diào)用流程圖11.5.3開發(fā)板S3C2410LCD驅(qū)動(dòng)的流程

1.定義了初始的LCD參數(shù)

在mach-smdk2410.c(在內(nèi)核源碼arch/arm/mach-s3c2410目錄中)中,定義了初始的LCD參數(shù)。注意,這是個(gè)全局變量。

2.?s3c2410fb_probe函數(shù)

內(nèi)核初始化時(shí)候調(diào)用s3c2410fb_probe函數(shù)(內(nèi)核源碼driver/video/s3c2410fb.c文件中)。

首先動(dòng)態(tài)分配s3c2410fb_info空間。

fbinfo=framebuffer_alloc(sizeof(structs3c2410fb_info),

&pdev->dev);

把域mach_info指向mach-smdk2410.c中的smdk2410_lcd

_cfg。

info->mach_info=pdev->dev.platform_data;

3.?mmap()映射內(nèi)存函數(shù)

當(dāng)用戶調(diào)用mmap()映射內(nèi)存的時(shí)候,fbmem.c把剛才設(shè)置好的顯存區(qū)域映射給用戶。

start=info->fix.smem_start;

len=PAGE_ALIGN((start&~PAGE_MASK)+info->fix.smem_len);

io_remap_pfn_range(vma,vma->vm_start,off>>PAGE

_SHIFT,

vma->vm_end-vma->vm_start,vma->vm_page_prot);

11.6LCD驅(qū)動(dòng)程序開發(fā)實(shí)例

11.6.1S3C2410與LCD模塊的連接電路

博創(chuàng)開發(fā)板S3C2410與LCD模塊的連接如圖11-14所示。圖11-14S3C2410與LQ080V3DG01連接圖圖11-15S3C241O與LQ080V3DG01連接原理圖11.6.2修改代碼(一)——LCD顯示企鵝圖像

1.修改mach-smdk2410.c文件

在第8章中成功的內(nèi)核源代碼中將/linux-2.6.14

.success20090807/arch/arm/mach-s3c2410目錄下的mach-smdk2410.c文件打開:

[root@localhostlinux-2.6.14.success20090807]#viarch/arm/mach-s3c2410/mach-smdk2410.c

2.添加mxl.h文件

在?/linux-2.6.14.success20090807/include/asm-arm/arch-s3c2410目錄下創(chuàng)建mxl.h文件:

[root@localhostlinux-2.6.14.success20090807]#viinclude/asm-arm/arch-s3c2410/mxl.h

mxl.h文件內(nèi)容如下:

#include<asm-arm/arch-s3c2410/map.h>

#defineIRQ_RTL8019

IRQ_EINT4

#defineEXTINT_OFF(IRQ_EINT4-4)

/*RTL8019a,nGCS3*/

#definepRTL8019_BASE

S3C2410_PA_ISA_NET

#definevRTL8019_BASE

S3C2410_VA_ISA_NET

3.注釋blank_screen_t函數(shù)內(nèi)容

注釋drivers\char\vt.c的blank_screen_t(unsignedlongdummy)的函數(shù)內(nèi)容,否則lcd很快關(guān)掉顯示。

4.重新配置內(nèi)核

[root@localhostlinux-2.6.14.success20090807]#makemenuconfig

配置界面如圖11-16所示。圖11-16內(nèi)核配置LCD驅(qū)動(dòng)界面

5.重新編譯內(nèi)核

編譯內(nèi)核:

[root@localhostlinux-2.6.14.success20090807]#makezImage

將重新制作zImage燒寫到博創(chuàng)開發(fā)板,再次啟動(dòng)linxu2.6.14以后就可以在LCD上看到一個(gè)小的企鵝,如圖

11-17所示。圖11-17博創(chuàng)開發(fā)板LCD顯示企鵝圖像11.6.3修改代碼(二)——LCD顯示小車圖像

1.打開GIMP圖像編輯器

點(diǎn)擊開始菜單,選擇圖形,選擇TheGIMP。

2.打開想要的圖像文件

點(diǎn)擊文件,選擇圖像文件所在目錄,點(diǎn)擊確定,就可顯示圖像文件,如圖11-18所示。圖11-18打開圖像文件

3.修改圖像索引顏色

將鼠標(biāo)放在圖像中,點(diǎn)擊鼠標(biāo)右鍵,依次選擇圖像→模式→索引顏色,將顏色改為224色。

4.保存圖像

圖片大小不要大于顯示器分辨率就可以。最后將鼠標(biāo)放在圖像中,點(diǎn)擊鼠標(biāo)右鍵,將文件保存為ppm格式(ASCII碼),文件名為:mxl1.ppm,如圖11-19所示。圖11-19保存圖像

5.替換原有的企鵝圖像

將mxl1.ppm拷貝到?/linux-2.6.14.succe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論