基于嵌入式技術(shù)的MultiBus-CPU模塊設計
數組里每個(gè)元素的第1個(gè)值代表寄存器的名稱(chēng),第2個(gè)值代表要設定的數值(1個(gè)十六進(jìn)制的數)。32h寄存器用于設定LCD顯示的水平像素數目,計算方法是把第2個(gè)值轉換成十進(jìn)制,加1再乘以8就得出水平像素。例如,0x63換算成十進(jìn)制為99,加1乘以8就是800。38h和39h寄存器分別設置成0x57和Ox02,就可以顯示600的垂直分辨率。計算方法是以39h寄存器的bitO和bitl位為高位,38h寄存器的bit0~bit7為低位,組成的一個(gè)十六進(jìn)制的數,再轉換成十進(jìn)制。除了要修改這3個(gè)寄存器外,34h和3Ah這兩個(gè)寄存器也會(huì )對顯示的分辨率有影響。
幀緩沖設備也屬于字符設備,要通過(guò)“文件層一驅動(dòng)層”的接口方式來(lái)對LCD進(jìn)行驅動(dòng),就必須對File_operationes數據結構的參數fh_ops進(jìn)行填充,并實(shí)現其對應的成員函數。本系統在include/Limix/fb.h中定義了幀緩沖區的文件操作,部分代碼如下:
這個(gè)結構中的每一個(gè)字段都必須指向驅動(dòng)程序中實(shí)現特定操作的函數。對于不支持的操作,對應的字段可以被置為NULL,或留到后續開(kāi)發(fā)時(shí)再添加。本模塊中實(shí)現特定操作的成員函數的代碼如下:
接下來(lái)把一些調用的函數寫(xiě)完整,編寫(xiě)好程序后用arm-linux-gcc編譯驅動(dòng)模塊;然后對其動(dòng)態(tài)加載,或靜態(tài)將其編譯到Linux內核;加載完程序后,就可以編寫(xiě)應用程序進(jìn)行讀/寫(xiě)等操作了。
4.2 MiniGUI的移植
在嵌入式開(kāi)發(fā)環(huán)境中,獨立的顯示操作人機界面是非常必要的。它可以使嵌入式系統對PC系統的依賴(lài)性降到最低,可以直接操作嵌入式系統并顯示運行結果。MultiBus-CPU模塊采用標準的USB鍵盤(pán)、USB鼠標、VGA顯示器作為人機交互界面,使用習慣類(lèi)同于PC機,簡(jiǎn)易了開(kāi)發(fā)者的開(kāi)發(fā)過(guò)程,并且用戶(hù)的使用過(guò)程也變得簡(jiǎn)單、快捷、易于操作。
MiniGUI是遵循GPL條款發(fā)布的自由軟件,其目標是為基于Linux的實(shí)時(shí)嵌入式系統提供一個(gè)輕量級的圖形用戶(hù)界面支持系統。與QT/Embedded、MicoroWindows等其他GUI相比,MiniGUI的最顯著(zhù)特點(diǎn)就是輕型、占用資源少。據稱(chēng)MiniGUI能夠在CPU主頻為30MHz、僅有4 MB RAM的系統上正常運行,這是其他多種GUI所無(wú)法達到的。
MiniGUI在A(yíng)T91RM9200上的移植包括4個(gè)步驟:
?、贅嫿↙inux交叉編譯環(huán)境。通常使用的交叉編譯工具是arm-Linux-gcc2.95.3版本。下載此交叉編譯工具后在Linux內安裝好,并且在PATH中添加/usr/local/arm-Linux/bin路徑,交叉編譯環(huán)境就構建好了。
?、诮徊婢幾gMiniGUI,這是最關(guān)鍵的一步。首先從網(wǎng)上下載MiniGUI源程序包(包括庫文件和資源文件),以及其他支持圖形界面的源程序包;然后用上一步安裝好的交叉編譯工具對其進(jìn)行編譯,編譯時(shí)可指定編譯后庫文件及資源文件的安裝位置。
?、劭截怣iniCUI資源到開(kāi)發(fā)板。將第2步編譯好的庫文件及資源文件拷貝到開(kāi)發(fā)板上??截愔跋扔胊rm-Linux-strip命令清除文件中的調試信息,這樣就使文件體積大大縮小,可以滿(mǎn)足嵌入式系統的需要。
?、馨遢dLinux的MiniGUI環(huán)境配置。將第2步安裝好的MiniGUI配置文件MiniGUI.cfg下載到板子中,并將其中fbcon的defaultmode設置為合適的顯示模式。
結 語(yǔ)
本文基于嵌入式技術(shù)設計了一種MultiBus-CPU模塊,能夠滿(mǎn)足各種嵌入式開(kāi)發(fā)環(huán)境的設計要求。該模塊軟硬件均采用模塊化設計,采用國外廣泛應用的ModBus通信協(xié)議,可滿(mǎn)足工業(yè)現場(chǎng)的測控需要。
評論