基于ARM9處理器S3C2410的LCD顯示系統設計
引言
s3c2410是三星公司生產的基于arm920t內核的risc微處理器,其主頻可達203mhz[1],適用于信息家電、pda、手持設備、移動終端等領域,本文介紹了基于s3c2410的顯示系統的硬件電路及驅動軟件設計方法。
tft-lcd模塊的時序要求
本顯示模塊選用的lq080v3dg01是sharp公司的tft-lcd器件,該器件的分辨率為640×480,控制時序圖如圖1所示,時間參數如表1所列[2]。


硬件電路設計
在該顯示系統的硬件電路中,s3c2410與lcd模塊的連接是關鍵,s3c2410內部自帶一個lcd驅動控制器,其接口可以與單色、灰度、彩色stn型和彩色tft型的lcd直接相連,但需要根據所連接的lcd的類型設置相應寄存器中的顯示模式(見下節)。lq080v3dg01要求其電源電壓vdd典型值為3.3v/5v,并且lcd數據和控制信號的高電平輸入電壓vih在2.3-5.5v范圍內,低電平輸入電壓vil則在-0.3-0.9v范圍內,故可以直接與s3c2410相連,其電路圖如圖2所示。

系統軟件設計
s3c2410處理器中的lcd控制器內含寄存器lcdcom1-lcdcon5。對于lq080v3dg01,這些寄存器的具體設置如下:
(1)在lcdcon1中,clkval是時鐘參數,對于lq080v3dg01,該域值取1。pnrmode是顯示模式參數,該域值取3,表示所用模塊是tft型,bppmode是每個象素的數據位數參數,對于lq080v3dg01模塊,設計時可設置成16bpp,所以此域值取12。
(2)在lcdcon2中,vbpd對應于表1中的h參數,該域值取32。lineval對應于表1中的i參數,該域值取479,vfpd對應于表1中的j參數,該域值取9,vspw對應于表1中的g參數,該域值取1。
(3)在lcdcon3中,hbpd對應于表1中的c參數,該域值取47。hozval對應無于表1中的d參數,該域值取639,hfpd對應于表1中的e參數,該域值取15。
(4)在lcdcon4中只需要設置hspw即可,它對應于表1中的b參數,該域值取95。
(5)lcdcon5中,bpp24bl用于決定24bpp視頻存儲器的大小端模式,該域值取0,frm565決定16bpp視頻輸入數據的格式。
在設計中,還可在基于s3c2410的硬件平臺上安裝嵌入式linux操作系統。為了使lcd能夠正常顯示,還需要在嵌入式linux系統下開發lcd的驅動程序。
framebuffer是出現在linux2.2.xx內核的一種驅動程序接口,對應的源文件在linux/drivers/video/目錄下,總的抽象設備文件為fbcon.c。這種接口將顯示設備抽象為幀緩沖區,用戶可以將它看成是顯示內存的一個映象。在使用幀緩沖時,linux將顯卡置于圖形模式下[3]。
根據上面對lcd各主要寄存器設置的分析所得出的結果,筆者開發了基于framebuffer機制的s3c2410fb驅動程序。下面是經過調試成功的部分代碼,該程序可對顯示屏幕進行初始化并設置lcd控制寄存器的值:
/*s3c2410fb.c*/
static struct s3c2410fb_mach_infoxxx_stn_info_initdata={
pixclock:174757,bpp:16,xres:640,yres:480,hsync_len:96,vsync_len:2,left_margin:40,upper_margin:24,right_margin:32,lower_margin:11,sync:0,cmap_static:1。
reg:{//設置lcd控制寄存器的值
lcdcon1:lcd1_bpp_16t |lcd1_pnr_tft|lcd1_clkval(1),lcdcon2:lcd2_vbpd(32)|lcd2_vfpd(9)|lcd2_vspw(1),lcdon3:lcd3_hbpd(47)|lcd3_hfpd(15),lcdcon4:lcd4_hspw(95)|lcd4_mval(13),lcdcon5:lcd5_frm565|lcd5_invvlien|lcd5_invvframe|lcd5_hw
swp|lcd5_pwren,},};
結束語
按照本文所設計的接口連接好硬件后,即可修改s3c2410的驅動程序,并在整個系統編譯后重新寫到flash中,這樣,重啟后就能正確顯示原系統的靜態啟動畫面,而且畫面清晰穩定,可達到預期的效果,這套裝置可在工業控制和車載通信等領域用作顯示輸出設備。
評論