新聞中心

        EEPW首頁 > 網絡與存儲 > 設計應用 > ARM S3C2410驅動TFT-LCD的研究

        ARM S3C2410驅動TFT-LCD的研究

        作者: 時間:2008-03-07 來源: 收藏

          介紹了的LCD控制器的數據和控制管腳,并給出了LCD的控制流程和TFT-LCD的控制器設置規則。參照TFT-LCD CJM10C0101的邏輯要求和時序要求設計了其驅動電路,設置了各主要LCD寄存器。

        本文引用地址:http://www.104case.com/article/79762.htm

          開發了CJM10C0101在嵌入式LINUX下的顯示驅動程序,并在CJ
        M10C0101上顯示了清晰穩定的畫面。實驗表明這套裝置通用性好,能驅動大部分的TFT-LCD;可移植性強,經過少許修改即可應用在其他嵌入式系統中。它是驅動TFT-LCD的一套較佳的解決方案。

         1 引言

          隨著科技的發展,ARM在社會各個方面的應用越來越廣。是三星公司生產的基于ARM920T內核的RISC微處理器,主頻可達203MHz,適用于信息家電、SmartPhone、Tablet、手持設備、移動終端等領域。其中,集成的LCD控制器具有通用性,可與大多數的LCD顯示模塊接口。CJM10C0101是一種用非晶硅TFT作為開關器件的有源矩陣液晶顯示器,該模塊包括TFT-LCD顯示屏!驅動電路和背光源,其接口為TTL電平。分辨率為640×480像素,用18bit數據信號能顯示262144色。6點視角是最佳視角。

          在以三星ARM芯片S3C2410為核心,USB、UART、LCD、TOUCHPANEL等作為輸入輸出設備,FLASH和SDRAM作存儲器,加上固化在FLASH里面的嵌入式LINUX組成的嵌入式系統中,我們致力于使此系統用本國生產的TFT-LCD作顯示輸出,因此研究設計了驅動CJM10C0101型26.4cm(10.4in)TFTLCD的硬件適配電路與嵌入式LINUX下的顯示驅動程序。

        2 S3C2410 LCD控制器介紹

          2.1 管腳

          S3C2410 LCD控制器用于傳輸視頻數據和產生必要的控制信號,像VFRAME、VLINE、VCLK、VM等等。除了控制信號,S3C2410還有輸出視頻數據的端口VD[23:0],如圖1示。

          將要用到的管腳描述如下:VCLK-像素時鐘信號;VD[23:0]-LCD像素輸出端口;VM/VDEN/TP-LCD驅動器的AC偏置信號(STN)/數據使能信號(TFT)/SECTFT源驅動器數據加載脈沖信號。

          2.2 寄存器介紹

          S3C2410的LCD控制寄存器主要有:LCDCON1寄存器、LCDCON2寄存器、LCDCON3寄存器、LCDCON4寄存器和LCDCON5寄存器等,詳情請見參考文獻[1]。

          2.3 控制流程

          LCD控制器由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600組成(見圖2)。

          REGBANK有17個可編程寄存器組和256×16的調色板存儲器,用來設定LCD控制器。LCDCDMA是一個專用DMA,自動從幀存儲器傳輸視頻數據到LCD控制器,用這個特殊的DMA,視頻數據可不經過CPU干涉就顯示在屏幕上。

          VIDPRCS接受從LCDCDMA來的視頻數據并在將其改變到合適數據格式后經VD[23:0]將之送到LCD驅動器,如4/8單掃描或4雙掃描顯示模式。

          TIMEGEN由可編程邏輯組成,以支持不同LCD驅動器的接口時序和速率的不同要求。TIMEGEN產生VFRAME、VLINE、VCLK、VM信號等。

          數據流描述如下:FIFO存儲器位于LCDCDMA。當FIFO空或部分空時,LCDCDMA要求從基于突發傳輸模式的幀存儲器中取來數據,存入要顯示的圖像數據,而這個幀存儲器是LCD控制器在RAM中開辟的一片緩沖區。當這個傳輸請求被存儲控制器中的總線仲裁器接收到后,從系統存儲器到內部FIFO就會成功傳輸4個字。FIFO的總大小是28個字,其中低位FIFOL是12個字,高位FIFOH是16個字。S3C2410有兩個FIFO來支持雙掃描顯示模式。在單掃描模式下,只使用一個FIFO(FIFOH)。

          2.4 TFT控制器操作

          S3C2410支持STN-LCD和TFT-LCD,這里我們只介紹其對TFT-LCD的控制。

          TIMEGEN產生LCD驅動器的控制信號,如VSYNC、HSYNC、VCLK、VDEN和LEND等。這些控制信號與REGBANK寄存器組中的LCDCON1/2/3/4/5寄存器的配置關系相當密切,基于LCD控制寄存器中的這些可編程配置,TIMEGEN產生可編程控制信號來支持不同類型的LCD驅動器。

          VSYNC和HSYNC脈沖的產生依賴于LCDCON2/3寄存器的HOZVAL域和LINEVAL域的配置。HOZVAL和LINEVAL的值由LCD屏的尺寸決定,如下公式:

          HOZVAL=水平顯示尺寸-1 (1)

          LINEVAL=垂直顯示尺寸-1 (2)

          VCLK信號的頻率取決于LCDCON1寄存器中的CLKVAL域。VCLK和CLKVAL的關系如下,其中CLKVAL的最小值是0:

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

          幀頻率是VSYNC信號的頻率,它與LCDCON1和LCDCON2/3/4寄存器的VSYNC、VBPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL都有關系。大多數LCD驅動器都需要與顯示器相匹配的幀頻率,幀頻率計算公式如下:

          FrameRate=1/{[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]×[(HSPW+1)+

          (HBPD+1)+(HFPD+1)+(HOZVAL+1)]×[2×(CLKVAL+1)/(HCLK)]} (4)

          參照CJM10C0101的參數和公式(1)、(2),可得出HOZVAL=639;LINEVAL=479。其余主要寄存器的值在下面給出。

         3 CJM10C0101的邏輯、時序要求[2]

          各時間參數見表1。

          根據時序要求,我們設定VM/VDEN信號作LCD的ENAB信號,VCLK信號作LCD的NCLK信號。要想得到合適的VM和VCLK波形,就要正確設定寄存器的值,根據寄存器的值與VM和VCLK波形的關系,我們設定了如下關鍵寄存器的值:

          HSPW=10;HBPD=100;HFPD=47;

          VSPW=1;VBPD=37;VFPD=4

          S3C2410的HCLK工作頻率為100MHz左右,因此根據公式(3)設CLKVAL=1。這些值將在驅動程序中得到具體體現。

          4 硬件驅動電路組成

          因為開發板引出管腳有限,只引出了16根視頻數據線,所以我們只利用這16根數據線擴充為18根作CJM10C0101的數據輸入線,即RB信號的最低兩位共用一根數據線。CJM10C0101要求其電源電壓Vdd典型值為5V,并且LCD數據和控制信號的高電平輸入電壓V在[3.5V,Vdd]范圍內,低電平輸入電壓Vil在[0,1.5V]范圍內,故用4片74LVC4245進行3~5V的邏輯電平轉換,具體電路如圖4。同時考慮到通用性,使74LVC4245的電源為3V/5V可選,這樣也能驅動3V邏輯電平的TFT-LCD。

         5 嵌入式Linux下驅動程序的開發[6]

          FrameBuffer是出現在Linux2.2.xx內核當中的一種驅動程序接口,對應的源文件在linux/drivers/video/目錄下,總的抽象設備文件為fbcon.c。這種接口將顯示設備抽象為幀緩沖區。用戶可以將它看成是顯示內存的一個映像。

          在使用幀緩沖時,Linux是將顯卡置于圖形模式下的。

          我們根據以上對LCD各主要寄存器設置的分析得出的結果,開發了基于FrameBuffer機制的S3C2410 fb驅動程序。下面是經過調試成功的部分代碼,作用是對顯示屏幕初始化和設置LCD控制寄存器的值。

          /*s3c2410fb.c */

          ………………

          #ifdef CONFIG-S3C2410-SMDK

          statIC struct s3c2410fb-mach-info xxx-stn-info-initdata={

          pixclock:174757, bpp:16,

          #ifdef CONFIG-FB-S3C2410-EMUL //顯示屏幕初始化

          xres: 96,

          #else

          xres: 640,

          #endif

          yres: 480,

          hsync-len: 5, vsync2len: 1,

          left-margin: 7, upper-margin: 1,

          right-margin: 3, lower-margin: 3,

          sync: 0, cmap-static: 1,

          reg:{ //設置LCD控制寄存器的值

          lcdcon1:LCD1-BPP-16T|LCD1-PNR-TFT|LCD1-CLKVAL(1),

          lcdcon2:LCD2-VBPD(37)|LCD2-VFPD(4)|LCD2-VSPW(1),

          lcdcon3:LCD3-HBPD(100)|LCD3-HFPD(47),

          lcdcon4:LCD4-HSPW(10)|LCD4-MVAL(13),

          lcdcon5:LCD5-FRM565|LCD5-HWSWP|LCD5-PWREN,

          },

          };

          #endif

          ………………

          6 結果

          經過硬件方面的調試修改,在S3C2410開發板的VCLK和VM腳成功得到了CJM10C0101所需的時鐘信號和復合控制信號,見圖5,6,7和8;在軟件方面修改了S3C2410的驅動程序,經編譯整個系統后再重新寫到Flash中,重啟后能正確顯示原系統的靜態啟動畫面,并且畫面清晰穩定,達到了預期的效果。這套裝置可用在工業控制和車載通信等領域作顯示輸出設備,再加上適當的觸摸屏可組成方便可靠的輸入輸出設備。

          圖5 VCLK波形(tc=1/25.28MHz=39.56ns)

          圖6 VM波形(t1=16.6ms)

          圖7 VM波形(t3=1/31.6kHz=31.65Ls)

          圖8 VM波形(t1-t2=1.432ms)

          參考文獻:

          [1]SamsungElectronICs.User's Manual S3C2410X 32-Bit RISC Microprocessor [Z].2003.372-413.

          [2]吉林彩晶數碼高科顯示器有限公司.TFT-LCD模塊產品說明書CJM10C0101[Z].2000.

          [3]賈金萍,張鵬,張志東.液晶顯示器電源管理的電路設計[J].液晶與顯示,2004,19(3):2132217.

          [4]楊宏業,張躍,何榮森.基于SA1110微處理器的掌上電腦液晶顯示器的設計與實現[J].電子技術應用,2003,(1):10212.

          [5]丁國華,胡容強.S3C44B0X內置的LCD控制器及其應用[J].世界電子元器件,2004,2(105):38241.

          [6]魏永明,駱剛,姜君,等譯.Linux設備驅動程序(第二版)[M].北京:中國電力出版社,2002.

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程


        led顯示器相關文章:led顯示器原理


        存儲器相關文章:存儲器原理


        cdma相關文章:cdma原理




        關鍵詞: S3C2410

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 正阳县| 明光市| 中阳县| 九龙坡区| 于田县| 清镇市| 额济纳旗| 和田市| 左权县| 北安市| 光泽县| 内乡县| 钟山县| 扶风县| 江油市| 昭通市| 雅安市| 汝南县| 乐安县| 襄汾县| 东乡族自治县| 惠安县| 广平县| 榆中县| 舞阳县| 阿拉善盟| 霍林郭勒市| 曲麻莱县| 吉首市| 洪洞县| 大冶市| 那曲县| 盐山县| 巨野县| 米易县| 商洛市| 花莲市| 绩溪县| 威海市| 丘北县| 华蓥市|