基于嵌入式技術(shù)的MultiBus-CPU模塊設(shè)計
S1D13506與處理器的接口采用通用類型總線(包括數(shù)據(jù)總線、地址總線、控制總線)。接口定義如表1所列。芯片所用像素時鐘CLK1、CLK2是由同步信號發(fā)生器ICS1523來提供的,外接1M×16位的EDO-DRAM IS41LV16100。
圖3是顯示電路總體連接圖。S1D13506連接到AT9IRM9200的信號有:M/R、AB1~AB20、DB1~DB15、WE0、WE1、RD、RD/WR、CS、RFSET、BUSCLK、WAIT。連接到ICSl523的信號有:CLCKI、CLCK12(用于內(nèi)部顯示及外部媒體接口時鐘)。連接到IS41LVl6100的信號有:DRAM-WE、DRAM-RAS、LCAS、UCAS、MA0~MA9、MD0~MD15。其中,MD1、MD2、MD4、MD6、MD15需要外接上拉電阻用于S1D13506初始配置。其他控制信號連接到LCD/CRT顯示器。S1D13506芯片有個測試使能引腳TFSTEN在芯片正常工作時接地。如果不使用RAMDAC的數(shù)模轉(zhuǎn)換功能,那么IREF引腳必須接地。ICS1523通過I2C串行總線(TWD、TWCK)接受AT91RM9200對它的寄存器配置。本設(shè)計中,ICS1523的輸入時鐘是50 MHz,輸出CLK1為25 MHz,CLK2為12.5 MHz。
4 顯示模塊軟件設(shè)計方案
4.1 Linux下LCD驅(qū)動程序開發(fā)
在Linux內(nèi)核中,設(shè)備驅(qū)動程序是一個個獨立的“黑盒子”,可以使某個特定的硬件響應(yīng)一個定義良好的內(nèi)部編程接口,同時完全隱藏了設(shè)備的工作細(xì)節(jié),用戶操作只需要通過一組標(biāo)準(zhǔn)化的調(diào)用即可完成。把這些調(diào)用映射到設(shè)備特定的操作上,則是設(shè)備驅(qū)動程序的任務(wù)。而每一個設(shè)備都可以看作是一個文件,所以打開的設(shè)備在內(nèi)核中都可以由一個File結(jié)構(gòu)標(biāo)識,內(nèi)核使用File_operations結(jié)構(gòu)訪問驅(qū)動程序的函數(shù)。每個文件(設(shè)備)都與它自己的函數(shù)集相關(guān)聯(lián)。這些操作函數(shù)主要負(fù)責(zé)上面所提到的系統(tǒng)調(diào)用的實現(xiàn),并因此被命名為open、read、fork、ioctl等。
LCD控制器的功能是顯示驅(qū)動信號,進(jìn)而驅(qū)動LCD。用戶只需要通過讀寫一系列的寄存器,就可以配置和顯示驅(qū)動。配置LCD控制器時,最重要的一步是幀緩沖區(qū)(FrameBuffer)的指定。幀緩沖區(qū)為圖像硬件設(shè)備提供了一種抽象化處理,它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的界面來訪問圖像硬件設(shè)備。用戶程序只需與幀緩沖驅(qū)動程序抽象出來的接口打交道,就可以把要顯示的內(nèi)容從緩沖區(qū)中讀出,從而顯示到屏幕上。
在FrameBuffer驅(qū)動程序中,最核心的結(jié)構(gòu)體是幀緩沖區(qū)驅(qū)動程序接口,即struct fb_info。它記錄了當(dāng)前FrameBuffer硬件設(shè)備的狀態(tài),通常在Linux的include/Linux/fb.h中定義。最主要的結(jié)構(gòu)體有:Struct fb_fiX_sereeninfo,定義顯示輸出設(shè)備自身的屬性,如屏幕緩沖區(qū)的物理地址和長度;Struct fb_var_screeninfo,記錄幀緩沖設(shè)備和指定顯示模式的可修改信息,包括顯示屏幕的分辨率、每個像素的比特數(shù)和一些時序變量。
評論