基于S3C2440的LCD驅(qū)動(dòng)的設(shè)計(jì).doc_第1頁(yè)
基于S3C2440的LCD驅(qū)動(dòng)的設(shè)計(jì).doc_第2頁(yè)
基于S3C2440的LCD驅(qū)動(dòng)的設(shè)計(jì).doc_第3頁(yè)
基于S3C2440的LCD驅(qū)動(dòng)的設(shè)計(jì).doc_第4頁(yè)
基于S3C2440的LCD驅(qū)動(dòng)的設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于 S3C2440 的 LCD 驅(qū)動(dòng)的設(shè)計(jì) 作 者:劉 立 指導(dǎo)老師:吳 全 玉開(kāi)發(fā)環(huán)境.主機(jī):VMWare-Fedora 9.開(kāi)發(fā)板:Mini2440-64MB Nand, Kerne1:2.6.30.4.編譯器:arm-linux-gcc-4.3.2摘要:根據(jù)人機(jī)交互對(duì)于LCD顯示系統(tǒng)的需求,圍繞S3C2440嵌入式處理器,研究LCD 控制器的設(shè)置,以及在Linux下的驅(qū)動(dòng)的工作原理,并介紹在 Linux 系統(tǒng)下 FrameBuffer 設(shè)備驅(qū)動(dòng)的結(jié)構(gòu)組成及實(shí)現(xiàn)方法。關(guān)鍵字:S3C2440,LCD 驅(qū)動(dòng),F(xiàn)rameBufferLCD driver based on S3C2440Abstract: For the requirement of LCD display in human-machine interface,using S3C2440 embedded processor , introduce how to set these controller registers and the principle of drivers in Linux,and also described the structure of the FrameBuffer device and how to write a FrameBuffer driver。Keywords: S3C2440,LCD driver,F(xiàn)rameBuffer 注意:Linux-2.6.32.2內(nèi)核已經(jīng)支持S3C2440的LCD控制器驅(qū)動(dòng), 在此我們只討淪TFT LCD(真彩屏)。1引言隨著計(jì)算機(jī)的不斷發(fā)展,各種 SOC 的功能越來(lái)越強(qiáng)大,嵌入式系統(tǒng)正以前所為有的發(fā)展 速度進(jìn)入我們生活中的各個(gè)領(lǐng)域,從工業(yè)生產(chǎn)到我們所使用的消費(fèi)電子產(chǎn)品,隨處可見(jiàn)嵌入 式系統(tǒng)的身影。而 LCD 顯示系統(tǒng)做為一個(gè)很好的人機(jī)交互的窗口,已經(jīng)成為大多是嵌入式系 統(tǒng)不可或缺的組成部分。S3C2440 是韓國(guó) Samsung 公司基于 ARM920T 內(nèi)核而設(shè)計(jì)生產(chǎn)的嵌入式處理器,同時(shí)支持16/32 位指令集,具有低功耗,高性價(jià)比等特點(diǎn),主要面向手持設(shè)備。本文就以 S3C2440 為 平臺(tái),應(yīng)用其內(nèi)部的 LCD 控制器,闡述 LCD 驅(qū)動(dòng)程序的設(shè)計(jì)。2LCD 控制器介紹S3C2440 的 LCD 控制器負(fù)責(zé)產(chǎn)生液晶屏所需要的各種控制信號(hào)并負(fù)責(zé)把顯示緩存中的數(shù) 據(jù)送到液晶屏以顯示。LCD 控制器是可編程的,支持單色和彩色顯示,支持多種顯示器,支持多種水平像素和 豎直像素,數(shù)據(jù)總線帶寬,接口時(shí)鐘和刷新率。圖 1 為 LCD 控制器邏輯框圖,LCD 控制器有 REGBANK,LCDCDMA,VIDPRCS,TIMEGEN 和LPC3600 組成。其中 REGBAN有17個(gè)可編程的寄存器和25616個(gè)調(diào)色存儲(chǔ)器用來(lái)配置 LCD 控制器。LCDCDMA 是一個(gè)專用的 DMA,他能夠自動(dòng)傳送顯存里的內(nèi)容到 LCD 上去顯示。VIDPRCS 接受 LCDCDMA 傳送過(guò)來(lái)的數(shù)據(jù)然后從 VD23:0口發(fā)送到 LCD 驅(qū)動(dòng)器并在此把他們轉(zhuǎn)換成合適的格式。 TIMEGEN 由可編程邏輯組成,它針對(duì)不同的 LCD 驅(qū)動(dòng)器提供不同的接口時(shí)序。 TIMEGEN 模塊產(chǎn)生 VFRAME,VLINE,VCLK,VM 等等信號(hào)。而這些控制信號(hào)又與REGBANK寄存器組中的LCDCON 1/2/3/4/5的配置密切相關(guān),通過(guò)不同的配置,TIMEGEN就能產(chǎn)生這些信號(hào)的不同形態(tài),從而支持不同的LCD驅(qū)動(dòng)器(即不同的STN/TFT屏)。 LCD控制器內(nèi)部共有18個(gè)控制寄存器,在設(shè)備初始化的時(shí)候要針對(duì)不同的LCD顯面板對(duì)這些寄存器進(jìn)行相應(yīng)設(shè)置,才能夠正確的顯小。 LCDCONI-LCDCON5主要用來(lái)設(shè)置與LCD而板相關(guān)的信息以及產(chǎn)生對(duì)于不同的顯器而需要的不同的控制信號(hào)。 幀緩沖起始地址寄存器1-3 (LCDSADDRI-3)用于指;:視頻緩沖區(qū)在系統(tǒng)存儲(chǔ)器中的地址,包括起始地址和結(jié)束地址,以及虛擬屏幕的偏移量和虛擬屏的頁(yè)寬度。 RGB查找表包括紅色查找表寄存器(REDLUT)、綠色查找表寄存器(GREENLUT)和藍(lán)色查找表寄存器(BLUELUT)。在這3個(gè)寄存器中,可以分別設(shè)定使用的8種紅色、8種綠色、和吐種藍(lán)色。抖動(dòng)模式寄存器(Dithering Mode Register),實(shí)際上,紅色、綠色和藍(lán)色的差異,是通過(guò)時(shí)間抖動(dòng)算法及幀率控制來(lái)實(shí)現(xiàn)的,因此還需要設(shè)置抖動(dòng)模式寄存器。3 Linnx下的LCD驅(qū)動(dòng)的實(shí)現(xiàn)LCD驅(qū)動(dòng)動(dòng)基礎(chǔ)知識(shí) LCD驅(qū)動(dòng)中最關(guān)鍵的就是時(shí)鐘頻率(Clock frequency)的設(shè)置,時(shí)鐘頻率設(shè)置不對(duì),LCD的顯示就會(huì)閃,或者根本沒(méi)有顯示。一般LCD的Datasheet上會(huì)寫有一個(gè)推薦的頻率,比如mini2440所用的統(tǒng)寶3.5LCD,在它的數(shù)據(jù)手冊(cè)第13頁(yè),有這樣一個(gè)表格: 可以看到,這里推薦的時(shí)鐘頻率是6.39MHz,近似于6.4MHz,范圍,是5M-6.8_SMHz 。S3C2440之LCD控制器與此相關(guān)的設(shè)置為CLKVAL,通過(guò)設(shè)置它,就可以在LCD接口的VCLK引腳上產(chǎn)生LCD所需要的時(shí)鐘頻率,那么CLKVAL和VCLK有何種關(guān)系呢?在2440手冊(cè)中有這樣一段描述:接下來(lái),手冊(cè)中提供了它們的數(shù)學(xué)關(guān)系公式:VCLK=HCLK/(CLKVAL+1)*2因此可以得出:VCLK=HCLK/(CLKVAL+1)*2那么HCLK是多少呢?我們的開(kāi)發(fā)板運(yùn)行于400Mhz,這個(gè)可以在bootloader的源代碼頭文件中看到,打開(kāi)vboot/smdk2440.藍(lán)色框內(nèi)為所用的時(shí)鐘頻率設(shè)置參數(shù),其中的148表示CLKDIVN寄存器中,F(xiàn)CLK HCLK PCLK的設(shè)置比例為1:4:8詳見(jiàn)2440芯片手冊(cè)P242 如圖:結(jié)合2440數(shù)據(jù)手冊(cè)242頁(yè)的內(nèi)容:可見(jiàn),F(xiàn)CLK:HCLK:PCLK=1:4:8,因此得出HCLK=100Mhz,再根據(jù)上述公式得出CLKVAL應(yīng)為:CLKVAL=HCLK/(VCLK*2)-1CLKVAL=100000000/(6400000*2)-1=6.8選擇最接近的整數(shù)值7,并把它寫入LCDCON1:17-8由此產(chǎn)生的VCLK頻率實(shí)測(cè)為5.63Mhz左右,它也是在5-6.85Mhz之間的數(shù)值.新內(nèi)核中的pixclock參數(shù)在以前較老的Linux內(nèi)核中,對(duì)十LCD寄存器的設(shè)置都是這樣直接填寫CLKVAL的,但Linux-2.6.32.2內(nèi)核卻不再使用這樣簡(jiǎn)單直觀的方式,而是通過(guò)一個(gè)稱為“pixclock”的參數(shù)進(jìn)行調(diào)節(jié),它的計(jì)算變的復(fù)雜和難以理解,我們不清楚Linux內(nèi)核中關(guān)十2440部分的移植為何改變成這樣的方式,這有可能是為了和X86體系中的設(shè)置保持一致的風(fēng)格,下面我們根據(jù)實(shí)際的代碼進(jìn)行一些推導(dǎo)和說(shuō)明,但推導(dǎo)結(jié)果和我們的實(shí)際設(shè)置是并不一致的,會(huì)有一些誤差。在Framebuffe:驅(qū)動(dòng)(linux-2.6.32.2/ drivers/video/s3c2410fb.c)中有這樣一個(gè)函數(shù): clkdiv=DIV_ ROUND_ UP(s3c2410fb_ calc_pixclk(fbi, var-pixclock), 2);這里的clkdiv就是我們上面提到的CLKVAL, 而DIV_ ROUND_ UP是一個(gè)宏定義,它位與include/linux/kernel.h文件中: #define DIV_ ROUND_ UP(n,d) (n)+(d)-1)/(d)這其實(shí)是一個(gè)數(shù)學(xué)概念:向上取整。下面是關(guān)與“向上取整”的一段說(shuō)明:對(duì)于除數(shù)為“2”的本算法而言,我們可以簡(jiǎn)單的理解為“(n/2)+ 0.5”所對(duì)應(yīng)的整數(shù)值,因此這里不可能避免的就出現(xiàn)了誤差,也就是說(shuō)n的數(shù)值是有一定范圍的,這里的n就是s3c2410fb_calc_pixclk(fbi, var-pixclock),因此上面的公式可以改寫為:clkdiv=s3c2410fb_calc_pixclk(fbi, var-pixclock)/2+0. 5而s3c2410fb_ calc_pixclk(fbi, var-pixclock)這個(gè)函數(shù)在linux-2.6.32.2/drivers/video/s3c2410fb.c中是這樣定義的:因此得出:clkdiv=clk*pixclk/(10 12)/2+0. 5根據(jù)實(shí)際打印結(jié)果驗(yàn)證,此處的clk其實(shí)就是HCLK.而根據(jù)static void s3c2410fb_ activate_ var(struct fb_ info *info)函數(shù)中的描述,會(huì)得出這樣一個(gè)關(guān)系:CLKVAL=clkdiv-1再結(jié)合從2440芯片手冊(cè)得到的公式CLKVAL=HCLK/(VCLK*2)-1,因此可以得出大致這樣的結(jié)果(“大致”可以理解為一定的誤差范圍): Pixclk=(HCLK-VLCK)x 10 12/HCLK VCLK 以我們所用的統(tǒng)寶屏為例: HCLK=100Mhz=100,000,000Hz VLCK=6.4Mhz=6400,OOOHz因此計(jì)算出:pixclk =146250單位是ps(picoseconds),這是我們實(shí)際設(shè)置的數(shù)值170000是有一定誤差的。另外,在Linux內(nèi)核文檔中,還有另外一種計(jì)算pixclock的方式,見(jiàn)linux/Documentation/fb/framebuffer.txt,在此我們就不再詳細(xì)介紹了,感興趣的可以自己看下,或者到網(wǎng)上查下相關(guān)資料。如果你對(duì)這些參數(shù)比較“暈”,我們建議你按照我們已經(jīng)移植驗(yàn)證好的參數(shù)進(jìn)行設(shè)置,下面是具體的參考步驟。在內(nèi)核中添加各種LCD類型的支持打開(kāi)arch/arm/mach-s3c2440/mach-mini2440.c,先刪除之前的LCD設(shè)備平臺(tái)代碼, 再把友善之臂已經(jīng)移植好的代碼加入,如下:然后打開(kāi)drivers/video/Kconfig,在大概1929行加入以下配置信息: 這樣,我們就完成了LCD驅(qū)動(dòng)的移植,如果你需要加入其他型號(hào)的LCD驅(qū)動(dòng),也可以參照上面的方式復(fù)制即可,一般小尺寸的pixclock參數(shù)可以參考統(tǒng)寶3.5”的,超過(guò)640x480分辨率的參數(shù)可以參考8LCD的,特別要注意你使用的LCD的長(zhǎng)寬也要修改。配置內(nèi)核并下載到開(kāi)發(fā)板測(cè)試現(xiàn)在,我們?cè)诿钚休斎?make menuconfig進(jìn)入內(nèi)核配置:.編譯后進(jìn)入如下界面:依次按下面的子菜單項(xiàng)選擇:會(huì)出現(xiàn)如圖所示LCD型號(hào)配置選項(xiàng):按空格或者回車鍵選擇我們需要的LCD型號(hào),然后退出保存內(nèi)核配置。在命令行執(zhí)行: #make zImage 將會(huì)生成arch/arm/boot/zImage,把它燒寫到開(kāi)發(fā)板中運(yùn)行即可。參考資料:徐英慧、馬忠梅、土磊. ARM9嵌入式系統(tǒng)設(shè)計(jì)一基于上S3c2W0與Linnx.北京航空航天大學(xué)出版社.2007年.第一版Samsnng Electronics Co.,Ltd二S3C2吐吐OA 32-B工T CMOS M工CROCONTROLLER USERSMANUAL Revision 1陳草、于盛林.基于ARM的LCD模塊接曰設(shè)計(jì)及MiniGU工實(shí)現(xiàn).儀器儀表學(xué)報(bào). 2007年.28卷.釗郝英華、李曉光.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論