s3c2440LCD控制器設置及代碼詳解_第1頁
s3c2440LCD控制器設置及代碼詳解_第2頁
s3c2440LCD控制器設置及代碼詳解_第3頁
s3c2440LCD控制器設置及代碼詳解_第4頁
s3c2440LCD控制器設置及代碼詳解_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

LCD工作的硬件需求:要使一塊 LCD正常的顯示文字或圖像,不僅需要 LCD驅(qū)動器,而且還需要相應的 LCD控制器。在通常情況下,生產(chǎn)廠商把 LCD驅(qū)動器會以 COF/COG的形式與 LCD玻璃基板制作在一起, 而LCD控制器則是由外部的電路來實現(xiàn), 現(xiàn)在很多的 MCU內(nèi)部都集成了 LCD控制器, 如S3C2410/2440等。 通過LCD控制器就可以產(chǎn)生 LCD驅(qū)動器所需要的控制信號來控制 STN/TFT屏了。S3C2440內(nèi)部 LCD控制器結構圖:我們根據(jù)數(shù)據(jù)手冊來描述一下這個集成在 S3C2440內(nèi)部的 LCD控制器:a:LCD控制器由 REGBAN、KLCDCDM、ATIMEGE、NVIDPRCS寄存器組成;b:REGBAN由K17個可編程的寄存器組和一塊 256*16的調(diào)色板內(nèi)存組成,它們用來配置 LCD控制器的;c:LCDCDM是一個專用的A DMA,它能自動地把在偵內(nèi)存中的視頻數(shù)據(jù)傳送到 LCD驅(qū)動器,通過使用這個 DMA通道, 視頻數(shù)據(jù)在不需要 CPU的干預的情況下顯示在LCD屏上;d:VIDPRCS接收來自 LCDCDM的數(shù)據(jù),將數(shù)據(jù)轉換為合適的數(shù)據(jù)格式,比如說A4/8位單掃,4位雙掃顯示模式, 然后通過數(shù)據(jù)端口 VD[23:0]傳送視頻數(shù)據(jù)到 LCD驅(qū)動器;e:TIMEGE由可編程的邏輯組成,N 他生成 LCD驅(qū)動器需要的控制信號, 比如 VSYN、CHSYN、CVCLK和LEND等等,而這些控制 信號又與 REGBAN寄存器組中的KLCDCON1/2/3/4/5的配置密切相關,通過不同的配置, TIMEGEN就能產(chǎn)生這些信號的不同形態(tài),從而支 持不同的 LCD驅(qū)動器 (即不同的 STN/TFT屏)。常見 TFT屏工作時序分析:

LCD提供的外部接口信號:VSYNC/VFRAME/S:TV垂直同步信號 (TFT)/幀同步信號 (STN)/SECTFT信號 ;HSYNC/VLINE/CP:V水平同步信號 (TFT)/行同步脈沖信號 (STN)/SECTFT信號;VCLK/LCD_HCL:K象素時鐘信號 (TFT/STN)/SECTFT信號;VD[23:0]:LCD像素數(shù)據(jù)輸出端口 (TFT/STN/SECTFT);VDEN/VM/T:P數(shù)據(jù)使能信號 (TFT)/LCD驅(qū)動交流偏置信號 (STN)/SECTFT信號;LEND/STH:行結束信號 (TFT)/SECTFT信號;LCD_LPCO:ESECTFTOE信號;LCD_LPCRE:VSECTFTREV信號;LCD_LPCREV:BSECTFTREVB信號。所有顯示器顯示圖像的原理都是從上到下, 從左到右的。 這是什么意思呢?這么說吧,一副圖像可以看做是一個矩形, 由很多排列整齊的點一行一行組成, 這些點稱之為像素。那么這幅圖在 LCD上的顯示原理就是:A:顯示指針從矩形左上角的第一行第一個點開始,一個點一個點的在 LCD

上顯示,在上面的時序圖上用時間線表示就為 VCLK,我們稱之為像素時鐘信號;B:當顯示指針一直顯示到矩形的右邊就結束這一行, 那么這一行的動作在上面的時序圖中就稱之為 1Line;C:接下來顯示指針又回到矩形的左邊從第二行開始顯示,注意,顯示指針在從第一行的右邊回到第二行的左邊是需要一定的時間的,我們稱之為行切換;D:如此類推, 顯示指針就這樣一行一行的顯示至矩形的右下角才把一副圖顯示完成。 因此,這一行一行的顯示在時間線上看, 就是時序圖上的 HSYN;CE:然而, LCD的顯示并不是對一副圖像快速的顯示一下,為了持續(xù)和穩(wěn)定的在 LCD上顯示, 就需要切換到另一幅圖上 (另一幅圖可以和上一副圖一樣或者不一樣,目 的只是為了將圖像持續(xù)的顯示在 LCD上)。那么這一副一副的圖像就稱之為幀, 在時序圖上就表示為 1Frame,因此從時序圖上可以看出1Line只是1Frame中的一行;F:同樣的, 在幀與幀切換之間也是需要一定的時間的, 我們稱之為幀切換,那么 LCD整個顯示的過程在時間線上看,就可表示為時序圖上的 VSYN。C上面時序圖上各時鐘延時參數(shù)的含義如下: (這些參數(shù)的值, LCD產(chǎn)生廠商會提供相應的數(shù)據(jù)手冊 )VBPD(verticalbackporch):表示在一幀圖像開始時,垂直同步信號以后的無效的行數(shù),對應驅(qū)動中的 upper_margin;VFBD(verticalfrontporch):表示在一幀圖像結束后,垂直同步信號以前的無效的行數(shù),對應驅(qū)動中的 lower_margin;VSPW(verticalsyncpulsewidth):表示垂直同步脈沖的寬度,用行數(shù)計算,對應驅(qū)動中的 vsync_len;HBPD(horizontalbackporch):表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之間的 VCLK的個數(shù),對應驅(qū)動中的 left_margin;HFPD(horizontalfrontporth):表示一行的有效數(shù)據(jù)結束到下一個水平同步信號開始之間的 VCLK的個數(shù),對應驅(qū)動中的 right_margin;HSPW(horizontalsyncpulsewidth):表示水平同步信號的寬度,用 VCLK計算,對應驅(qū)動中的 hsync_len;對于以上這些參數(shù)的值將分別保存到 REGBAN寄存器組中的K LCDCON1/2/3/4/5寄存器中: (對寄存器的操作請查看 S3c2440數(shù)據(jù)手冊 LCD部分 )LCDCON:117-8位CLKVAL6-5位掃描模式 (對于STN屏:4位單/雙掃、8位單掃)4-1位色位模式 (1BPP、8BPP、16BPP等)LCDCON:231-24位VBPD23-14位LINEVAL13-6位VFPD5-0位VSPWLCDCON:325-19位HBPD18-8位HOZVAL7-0位HFPDLCDCON:47-0位HSPWLCDCON:54.幀緩沖(FrameBuffer):幀緩沖是 Linux為顯示設備提供的一個接口,它把一些顯示設備描述成一個緩沖區(qū),允許應用程序通過 FrameBuffer定義好的接口訪問這些圖形設備,從而不用去關心具體的硬件細節(jié)。 對于幀緩沖設備而言, 只要在顯示緩沖區(qū)與顯示點對應的區(qū)域?qū)懭腩伾?值,對應的顏色就會自動的在屏幕上顯示。下面來看一下在不同色位模式下緩沖區(qū)與顯示點的對應關系:下面看看2440test里面的lcd.c文件staticvoidPutPixel(U32x,U32y,U16c){if(x<SCR_XSIZE&&y<SCR_YSIZE)LCD_BUFFER[(y)][(x)]=c;很容易發(fā)現(xiàn) TFTLCD上顯示單個像素的函數(shù)實際上很簡潔看來似乎只需要 LCD_BUFFER[(y)][(x)]=c這一句話下面就來分析下,是如何通過這一句話來實現(xiàn)在 LCD上顯示單個像素的先分析下 LCD_Init()即LCD初始化函數(shù)rLCDCON1=(LCD_PIXCLOCK<<8)|(3<< 5)|(12<<1);LCDCON10x4d000000#defineLCD_WIDTH240

#defineLCDHEIGHT320#defineLCD_PIXCLOCK4#defineLCD_RIGHT_MARGIN36#defineLCD_LEFT_MARGIN19#defineLCD_HSYNC_LEN5#defineLCD_UPPER_MARGIN1#defineLCD_LOWER_MARGIN5#defineLCD_VSYNC_LEN1CLKVAL[17:8]=4TFT:VCLK=HCLK/[(CLKVAL+1)*2](CLKVAL>=0)MMODE[7]=0PNRMODE[6:5]=11TFTLCDpanelBPPMODE[4:1]PNRMODE[6:5]=11TFTLCDpanelBPPMODE[4:1]=110016bppforTFTDisableENVID[0]=0DisablerLCDCON2=(LCD_UPPER_MARGIN<<24)|((LCD_HEIGHT-1)<<14)|(LCD_LOWER_MARGIN<<6)|(LCD_VSYNC_LEN<<0);LCDCON20x4d000004VBPD=1VBPD(verticalbackporch):表示在一幀圖像開始時,垂直同步信號以后的無效的行數(shù),對應驅(qū)動中的 upper_marginLINVAL=240–1LINVAL:LCD屏的垂直大小VFPD=5VFPD(verticalfrontporch):表示在一幀圖像結束后,垂直同步信號以前的無效的行數(shù),對應驅(qū)動中的 lower_margin

VSPW=1VSPW(verticalsyncpulsewidth):表示垂直同步脈沖的寬度,用行數(shù)計算,對應驅(qū)動中的 vsync_lenrLCDCON3=(LCD_RIGHT_MARGIN<<19)|((LCD_WIDTH-1)<< 8)|(LCD_LEFT_MARGIN<<0);LCDCON30x4d000008HBPD=36HBPD(horizontalbackporch):表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之間的 VCLK的個數(shù),對應驅(qū)動中的 left_marginHOZVAL=320–1HOZVA:LLCD屏的水平大小HFPD=19HFPD(horizontalfrontporth):表示一行的有效數(shù)據(jù)結束到下一個水平同步信號開始之間的 VCLK的個數(shù),對應驅(qū)動中的 right_marginrLCDCON4=(13<< 8)|(LCD_HSYNC_LEN<<0);LCDCON40x4d00000cMVAL=13HSPW=5HSPW(horizontalsyncpulsewidth):表示水平同步信號的寬度,用 VCLK計算,對應驅(qū)動中的 hsync_len#defineLCD_CON5((1<<11)|(1<<9)|(1<<8)|(1<<3)|(1<<0))rLCDCON5=LCDCON5;LCDCON50x4d000010HWSWP=1PWRENHWSWP=1PWREN=1EnablePWRENsignalINVVFRAME=1 VFRAME/VSYNCpulsepolarityInverted 選擇負極性脈沖INVVLINE=1 VLINE/HSYNCpulsepolarityInverted 選擇負極性脈沖FRM565=1 5:6:5FormatrLCDINTMSK|=3;INT_FrSyn=1 LCDframesynchronizedinterruptMaskedINT_FiCnt=1 LCDFIFOinterruptMaskedrTCONSEL&=(~7);rTCONSEL&=~((1<<4)|1);MODE_SEL=0 SyncmodeRES_SEL=0 320x240LPC_EN=0 LPC3600DisablerTPAL=0x0;TemporarypaletteregisterenablebitDisablevolatilestaticunsignedshortLCD_BUFFER[SCR_YSIZE][SCR_XSIZE];#defineLCD_ADDR((U32)LCD_BUFFER)#defineM5D(n)((n)&0x1fffff)rLCDSADDR1=((LCD_ADDR>>22)<<21)|((M5D(LCD_ADDR>>1))<< 0);rLCDSADDR2=M5D((LCD_ADDR+LCD_WIDTH*LCD_HEIGHT*2)>>1);rLCDSADDR3=LCD_WIDTH;LCDSADDR10x4d00001幀緩沖起始寄存器4 1ThesebitsindicateA[30:22]ofthebanklocationforthevideobufferinthesystemmemory.LCDBANKvaluecannotbechangedevenwhenmovingtheviewport.LCDframebuffershouldbewithinaligned4MBregion,whichensuresthatLCDBANKvaluewillnotbechangedwhenmovingtheviewport.So,careshouldbetakentousethemalloc()Function系統(tǒng)內(nèi)存地址 A[30:22]處的 Bank位置為圖像緩沖。 LCDBAN的值在視圖移動的K值在視圖移動時不能改變, LCD幀緩沖應該在 4MB區(qū)域?qū)R,保證 LCDBAN的值K在移動視圖時不會改變。LCDBASEU[20:0]=((U32)LCD_BUFFER>>1)&0x1fffffFordual-scanLCD:ThesebitsindicateA[21:1]ofthestartaddressoftheupperaddresscounter,whichisfortheupperframememoryofdualscanLCDortheframememoryofsinglescanLCD.Forsingle-scanLCD:ThesebitsindicateA[21:1]ofthestartaddressoftheLCDframebuffer.雙掃描:表明高地址計數(shù)器的起始地址 A[21:1],用于 LCD雙掃描的上部幀內(nèi)存或者單掃描的幀內(nèi)存單掃描:表明 LCD幀緩沖的起始地址 A[21:1]LCDSADDR20x4d00001幀緩沖起始寄存器8 2LCDBASEL[20:0]=((LCD_ADDR+LCD_WIDTH*LCD_HEIGH*T2)>>1)&0x1fffff=(LCD_ADDR>>1+LCD_WIDTH*LCD_HEIGHT)&0x1fffffFordual-scanLCD:ThesebitsindicateA[21:1]ofthestartaddressoftheloweraddresscounter,whichisusedforthelowerframe

溫馨提示

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

評論

0/150

提交評論