




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于 S3C2440 的 LCD 驅動的設計 作 者:劉 立 指導老師:吳 全 玉開發(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 控制器的設置,以及在Linux下的驅動的工作原理,并介紹在 Linux 系統(tǒng)下 FrameBuffer 設備驅動的結構組成及實現(xiàn)方法。關鍵字:S3C2440,LCD 驅動,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內核已經(jīng)支持S3C2440的LCD控制器驅動, 在此我們只討淪TFT LCD(真彩屏)。1引言隨著計算機的不斷發(fā)展,各種 SOC 的功能越來越強大,嵌入式系統(tǒng)正以前所為有的發(fā)展 速度進入我們生活中的各個領域,從工業(yè)生產到我們所使用的消費電子產品,隨處可見嵌入 式系統(tǒng)的身影。而 LCD 顯示系統(tǒng)做為一個很好的人機交互的窗口,已經(jīng)成為大多是嵌入式系 統(tǒng)不可或缺的組成部分。S3C2440 是韓國 Samsung 公司基于 ARM920T 內核而設計生產的嵌入式處理器,同時支持16/32 位指令集,具有低功耗,高性價比等特點,主要面向手持設備。本文就以 S3C2440 為 平臺,應用其內部的 LCD 控制器,闡述 LCD 驅動程序的設計。2LCD 控制器介紹S3C2440 的 LCD 控制器負責產生液晶屏所需要的各種控制信號并負責把顯示緩存中的數(shù) 據(jù)送到液晶屏以顯示。LCD 控制器是可編程的,支持單色和彩色顯示,支持多種顯示器,支持多種水平像素和 豎直像素,數(shù)據(jù)總線帶寬,接口時鐘和刷新率。圖 1 為 LCD 控制器邏輯框圖,LCD 控制器有 REGBANK,LCDCDMA,VIDPRCS,TIMEGEN 和LPC3600 組成。其中 REGBAN有17個可編程的寄存器和25616個調色存儲器用來配置 LCD 控制器。LCDCDMA 是一個專用的 DMA,他能夠自動傳送顯存里的內容到 LCD 上去顯示。VIDPRCS 接受 LCDCDMA 傳送過來的數(shù)據(jù)然后從 VD23:0口發(fā)送到 LCD 驅動器并在此把他們轉換成合適的格式。 TIMEGEN 由可編程邏輯組成,它針對不同的 LCD 驅動器提供不同的接口時序。 TIMEGEN 模塊產生 VFRAME,VLINE,VCLK,VM 等等信號。而這些控制信號又與REGBANK寄存器組中的LCDCON 1/2/3/4/5的配置密切相關,通過不同的配置,TIMEGEN就能產生這些信號的不同形態(tài),從而支持不同的LCD驅動器(即不同的STN/TFT屏)。 LCD控制器內部共有18個控制寄存器,在設備初始化的時候要針對不同的LCD顯面板對這些寄存器進行相應設置,才能夠正確的顯小。 LCDCONI-LCDCON5主要用來設置與LCD而板相關的信息以及產生對于不同的顯器而需要的不同的控制信號。 幀緩沖起始地址寄存器1-3 (LCDSADDRI-3)用于指;:視頻緩沖區(qū)在系統(tǒng)存儲器中的地址,包括起始地址和結束地址,以及虛擬屏幕的偏移量和虛擬屏的頁寬度。 RGB查找表包括紅色查找表寄存器(REDLUT)、綠色查找表寄存器(GREENLUT)和藍色查找表寄存器(BLUELUT)。在這3個寄存器中,可以分別設定使用的8種紅色、8種綠色、和吐種藍色。抖動模式寄存器(Dithering Mode Register),實際上,紅色、綠色和藍色的差異,是通過時間抖動算法及幀率控制來實現(xiàn)的,因此還需要設置抖動模式寄存器。3 Linnx下的LCD驅動的實現(xiàn)LCD驅動動基礎知識 LCD驅動中最關鍵的就是時鐘頻率(Clock frequency)的設置,時鐘頻率設置不對,LCD的顯示就會閃,或者根本沒有顯示。一般LCD的Datasheet上會寫有一個推薦的頻率,比如mini2440所用的統(tǒng)寶3.5LCD,在它的數(shù)據(jù)手冊第13頁,有這樣一個表格: 可以看到,這里推薦的時鐘頻率是6.39MHz,近似于6.4MHz,范圍,是5M-6.8_SMHz 。S3C2440之LCD控制器與此相關的設置為CLKVAL,通過設置它,就可以在LCD接口的VCLK引腳上產生LCD所需要的時鐘頻率,那么CLKVAL和VCLK有何種關系呢?在2440手冊中有這樣一段描述:接下來,手冊中提供了它們的數(shù)學關系公式:VCLK=HCLK/(CLKVAL+1)*2因此可以得出:VCLK=HCLK/(CLKVAL+1)*2那么HCLK是多少呢?我們的開發(fā)板運行于400Mhz,這個可以在bootloader的源代碼頭文件中看到,打開vboot/smdk2440.藍色框內為所用的時鐘頻率設置參數(shù),其中的148表示CLKDIVN寄存器中,F(xiàn)CLK HCLK PCLK的設置比例為1:4:8詳見2440芯片手冊P242 如圖:結合2440數(shù)據(jù)手冊242頁的內容:可見,F(xiàn)CLK:HCLK:PCLK=1:4:8,因此得出HCLK=100Mhz,再根據(jù)上述公式得出CLKVAL應為:CLKVAL=HCLK/(VCLK*2)-1CLKVAL=100000000/(6400000*2)-1=6.8選擇最接近的整數(shù)值7,并把它寫入LCDCON1:17-8由此產生的VCLK頻率實測為5.63Mhz左右,它也是在5-6.85Mhz之間的數(shù)值.新內核中的pixclock參數(shù)在以前較老的Linux內核中,對十LCD寄存器的設置都是這樣直接填寫CLKVAL的,但Linux-2.6.32.2內核卻不再使用這樣簡單直觀的方式,而是通過一個稱為“pixclock”的參數(shù)進行調節(jié),它的計算變的復雜和難以理解,我們不清楚Linux內核中關十2440部分的移植為何改變成這樣的方式,這有可能是為了和X86體系中的設置保持一致的風格,下面我們根據(jù)實際的代碼進行一些推導和說明,但推導結果和我們的實際設置是并不一致的,會有一些誤差。在Framebuffe:驅動(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ù)學概念:向上取整。下面是關與“向上取整”的一段說明:對于除數(shù)為“2”的本算法而言,我們可以簡單的理解為“(n/2)+ 0.5”所對應的整數(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ù)實際打印結果驗證,此處的clk其實就是HCLK.而根據(jù)static void s3c2410fb_ activate_ var(struct fb_ info *info)函數(shù)中的描述,會得出這樣一個關系:CLKVAL=clkdiv-1再結合從2440芯片手冊得到的公式CLKVAL=HCLK/(VCLK*2)-1,因此可以得出大致這樣的結果(“大致”可以理解為一定的誤差范圍): 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ù)值170000是有一定誤差的。另外,在Linux內核文檔中,還有另外一種計算pixclock的方式,見linux/Documentation/fb/framebuffer.txt,在此我們就不再詳細介紹了,感興趣的可以自己看下,或者到網(wǎng)上查下相關資料。如果你對這些參數(shù)比較“暈”,我們建議你按照我們已經(jīng)移植驗證好的參數(shù)進行設置,下面是具體的參考步驟。在內核中添加各種LCD類型的支持打開arch/arm/mach-s3c2440/mach-mini2440.c,先刪除之前的LCD設備平臺代碼, 再把友善之臂已經(jīng)移植好的代碼加入,如下:然后打開drivers/video/Kconfig,在大概1929行加入以下配置信息: 這樣,我們就完成了LCD驅動的移植,如果你需要加入其他型號的LCD驅動,也可以參照上面的方式復制即可,一般小尺寸的pixclock參數(shù)可以參考統(tǒng)寶3.5”的,超過640x480分辨率的參數(shù)可以參考8LCD的,特別要注意你使用的LCD的長寬也要修改。配置內核并下載到開發(fā)板測試現(xiàn)在,我們在命令行輸入:make menuconfig進入內核配置:.編譯后進入如下界面:依次按下面的子菜單項選擇:會出現(xiàn)如圖所示LCD型號配置選項:按空格或者回車鍵選擇我們需要的LCD型號,然后退出保存內核配置。在命令行執(zhí)行: #make zImage 將會生成arch/arm/boot/zImage,把它燒寫到開發(fā)板中運行即可。參考資料:徐英慧、馬忠梅、土磊. ARM9嵌入式系統(tǒng)設計一基于上S3c2W0與Linnx.北京航空航天大學出版社.2007年.第一版Samsnng Electronics Co.,Ltd二S3C2吐吐OA 32-B工T CMOS M工CROCONTROLLER USERSMANUAL Revision 1陳草、于盛林.基于ARM的LCD模塊接曰設計及MiniGU工實現(xiàn).儀器儀表學報. 2007年.28卷.釗郝英華、李曉光.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 半角題目及答案
- 安全綜合知識試題及答案
- 鋼水燙傷培訓課件
- 可穿戴醫(yī)療設備市場潛力分析:2025年技術創(chuàng)新與需求變化報告
- 安全生產選擇試題及答案
- 數(shù)字藝術市場2025年交易活躍度研究報告:藝術與虛擬現(xiàn)實結合的新領域001
- 安全檢查工試題及答案
- 安全管理模擬試題及答案
- 預防燃氣泄漏培訓課件
- 中國原始社會美術課件
- 電機振動測定方法及限值振動測定方法
- 濟南遙墻機場擴建工程航站樓建設監(jiān)理大綱
- 撥叉綜合課程設計
- 七年級上冊數(shù)學知識點總結及精編例題1
- 學校物業(yè)服務監(jiān)督及處罰辦法
- 心內科高危藥物安全管理與指引
- 2012《天津市安裝工程預算基價》電氣工程(預算基價導出)
- 1104基礎報表填報說明(最新)
- 老舊小區(qū)改造技術標-
- 分支型室速的導管消融術ppt課件
- 2011年吉林省初中生物會考試題
評論
0/150
提交評論