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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論