隨著(zhù)武器裝備信息化程度的提高,各種嵌入式信息裝備得到了廣泛應用。作為未來(lái)戰場(chǎng)主要作戰平臺的各種戰斗車(chē)輛,其車(chē)載指揮控制平臺的設計得到了廣泛重視。 一個(gè)車(chē)載指控平臺的功能主要體現在以下幾個(gè)方面:監控、顯示車(chē)輛的技術(shù)狀態(tài);車(chē)際間的指控、通信;車(chē)輛的定位、導航;各種文電處理等。本文將介紹一個(gè)基于ARM和MiniGUI的車(chē)載指控系統人機接口部分的設計,這個(gè)系統初步實(shí)現了上述車(chē)載指控平臺的主要功能。 1 軟硬件的選型 受車(chē)輛內部空間的限制,指揮控制終端必須做到小型化,嵌入式。ARM作為一種已經(jīng)在多個(gè)領(lǐng)域得到非常廣泛應用的架構,這里采用它是一個(gè)很好的選擇。該課題選擇在國內有著(zhù)較廣泛市場(chǎng)的SAMSUNG公司的S3C2410芯片作為CPU。S3C2410芯片主要應用于手持設備或者其他對功耗、成本、性能有較高要求的場(chǎng)合。為了降低整機成本,該芯片內置了各16 KB的指令和數據緩存、MMU、UART、ADC、LCD控制器,I2C總線(xiàn)接口、IIS總線(xiàn)接口、USB主從設備支持、觸摸屏接口等,這種設計提高了系統的集成度,也給系統開(kāi)發(fā)提供了極大的便利。 系統軟件可以有很多選擇,因為該芯片內置MMU,因此可以支持Windows CE,Linux,Palm OS和VxWorks等多種主流嵌入式操作系統。車(chē)載指控平臺對實(shí)時(shí)性要求不高,因此這里選擇嵌入式Linux作為操作系統。嵌入式Linux具有源碼開(kāi)放、成本低、應用軟件豐富等特點(diǎn),因此Linux和ARM是許多低成本的應用中首選的組合。 作為指控終端,必然對用戶(hù)圖形界面有特殊的要求,該項目選擇飛漫公司的MiniGUI作為圖形引擎。MiniGUI是一個(gè)專(zhuān)門(mén)面向嵌入式系統的圖形用戶(hù)界面支持系統,它為應用程序定義了一組輕量級的窗口和圖形設備接口。利用這些接口,每個(gè)應用程序可以建立多個(gè)窗口并在這些窗口中創(chuàng )建各種控件。在軟件體系中,它介于內核和應用程序之間,在此將利用MiniGUI來(lái)完成用戶(hù)圖形界面的編程。 2 硬件設計 ARMS3C2410芯片的應用電路有許多成熟的設計范例;在設計階段,市面上也有很多的開(kāi)發(fā)板可供選用。該項目選用杭州立宇泰公司的ARM SYS2410開(kāi)發(fā)板作為開(kāi)發(fā)的硬件平臺。 該開(kāi)發(fā)板采取核心板和擴展板分離的結構,提供了大部分的外設接口電路,并且有200個(gè)引出腳,引出了CPU上的大部分I/0端口,這樣做為后續的開(kāi)發(fā)工作提供了便利。 2.1 鍵盤(pán)矩陣電路 該項目的指揮控制終端功能可以分為6項。每項選中后,為便于輸入或選擇子條目,增加10個(gè)數字鍵,另外還需要確定鍵、取消鍵,再加上6個(gè)功能鍵,一共是24個(gè)鍵。因為鍵的數目較多,將這些鍵設計成一個(gè)行列式鍵盤(pán)矩陣(見(jiàn)圖1)。 結合開(kāi)發(fā)板的電路結構,鍵盤(pán)矩陣的列輸入端口使用GPE5~GPElO六個(gè)通用I/0口線(xiàn),行輸出端口采用GPEll~GPEl4四個(gè)通用I/0口線(xiàn),在行線(xiàn)和列線(xiàn)的交點(diǎn)接入按鍵開(kāi)關(guān)。 鍵盤(pán)掃描的原理是,按照有規律的時(shí)間間隔察看鍵盤(pán)矩陣,以確定是否有鍵按下。鍵盤(pán)掃描可以采取專(zhuān)用芯片,也可以采用軟件方法實(shí)現,該項目采用軟件方法。 2.2 顯示驅動(dòng)電路 指揮控制終端輸入/輸出設備的第二個(gè)重點(diǎn)就是顯示設備。ARM芯片內置有LCD控制器,可以方便地實(shí)現顯示功能。但是ARM LCD控制器支持的是TTL電平的RGB分量顯示,而目前市場(chǎng)上較大尺寸的工控液晶屏大多是LVDS電平接口,因此需要接口電路。 另一種解決方案是將ARM開(kāi)發(fā)板TTL電平的RGB信號轉換成VGA信號,這樣顯示器的選擇更加隨意,而且降低了成本。RGB信號轉換成VGA信號可采用專(zhuān)用的AD芯片,如ADV7120,ADV7123等。 3 軟件設計 軟件設計需要完成兩個(gè)方面的工作:一是驅動(dòng)程序編寫(xiě);二是GUI編程。 3.1 鍵盤(pán)矩陣驅動(dòng)程序的編寫(xiě) 開(kāi)發(fā)板對自己所提供的硬件一般都提供相應的驅動(dòng)程序,自行開(kāi)發(fā)的外設電路一般需要自己編寫(xiě)驅動(dòng)程序。設備驅動(dòng)程序是Linux內核的重要部分,操作系統只有通過(guò)驅動(dòng)程序才能夠控制外設的硬件行為。 在系統內部,I/0設備的存取是通過(guò)一系列的入口點(diǎn)來(lái)進(jìn)行的,字符型設備提供以下入口點(diǎn):open,close,read,write,ioctl;它們分別對應打開(kāi)設備、關(guān)閉設備、讀設備、寫(xiě)設備以及其他操作。這些入口點(diǎn)的定義是通過(guò)一個(gè)重要的數據結構file_operations來(lái)完成的。 鍵盤(pán)驅動(dòng)程序編制的要點(diǎn)有: (1)定義一個(gè)6×4的健值矩陣,作為輸出,按下一個(gè)按鍵,得到對應的鍵值; (2)初始化時(shí)設置所用到的I/O端口的讀/寫(xiě)模式,行線(xiàn)為寫(xiě),列線(xiàn)為讀; (3)定義鍵盤(pán)掃描函數scan_kbd()。它的算法是:初始化時(shí)所有的行線(xiàn)置低電平,如果沒(méi)有鍵按下,列線(xiàn)都將讀到高電平。否則,任何鍵的閉合將造成該列成為低電平。 (4)在read入口點(diǎn),也就是file_operations結構定義的read方法中,調用scan_kbd()。這樣,驅動(dòng)程序就可以定時(shí)掃描幾個(gè)I/O端口,獲取鍵值,然后通過(guò)putuser發(fā)送到用戶(hù)地址空間。 設置I/O模式,讀/寫(xiě)I/0端口的位,可以通過(guò)頭文件S3C2410.h中專(zhuān)門(mén)定義的宏set_gpio_ctrl,write_gpio_bit,read_gpio_bit來(lái)進(jìn)行。 鍵盤(pán)驅動(dòng)程序經(jīng)過(guò)編譯后,可以作為一個(gè)設備文件編譯入內核,也可以采取模塊動(dòng)態(tài)加載的方式。 3.2 MiniGUl IAL引擎的實(shí)現 通常,MiniGUI在使用前應針對目標系統的特點(diǎn)進(jìn)行配置和編譯,例如指定目標操作系統、運行模式、圖形引擎和輸入引擎、字體類(lèi)型、字符集、所支持的控件類(lèi)等。該課題中,因為采取了自行設計的鍵盤(pán)作為輸入設備,因此最重要的配置是輸入引擎(input abstract lay-er,IAL)。 抽象層是一組不依賴(lài)于硬件的抽象接口,其作用類(lèi)似于操作系統的驅動(dòng)程序,將底層的硬件操作與操作系統隔離,這樣做簡(jiǎn)化了在不同平臺上移植的難度。開(kāi)發(fā)特定的鍵盤(pán)輸入,主要是完成兩部分工作:鍵盤(pán)驅動(dòng)程序設計和鍵盤(pán)輸入引擎開(kāi)發(fā)。前者負責從鍵盤(pán)接收原始輸入事件和數據,后者負責將原始的輸入事件和數據轉換成MiniGUl抽象的鍵盤(pán)事件和數據。 在代碼實(shí)現上,MiniGUI通過(guò)INPUT數據結構來(lái)表示輸入引擎。該結構中指定了若干函數指針,編寫(xiě)特定的輸入引擎,主要就是編碼實(shí)現INPUT結構中的各個(gè)函數。新的IAL引擎編寫(xiě)完成后,應加入MiniGUI進(jìn)行配置,然后對MiniGUI進(jìn)行編譯。在工程實(shí)踐中,一種比較簡(jiǎn)便的方法是對MiniGUI已經(jīng)實(shí)現的引擎進(jìn)行修改。 3.3 圖形界面設計 MiniGUI是一個(gè)圖形用戶(hù)界面支持系統,通常的GUI編程概念均適用于MiniGUI編程,如窗口和事件驅動(dòng)編程等。嵌入式系統完成的功能一般比較單一,對于該系統而言,重點(diǎn)在于實(shí)現人機接口部分,因此只需要輪詢(xún)用戶(hù)的按鍵輸入即可。如圖2所示。 MiniGUI中有三種窗口類(lèi)型:主窗口、對話(huà)框和控件窗口。每一個(gè)MiniGUI應用程序一般都要創(chuàng )建一個(gè)主窗口,作為應用程序的主界面或開(kāi)始界面。MiniGUI包含有許多控件類(lèi),如靜態(tài)框、按鈕、列表框、編輯框、進(jìn)度條等,這些控件類(lèi)可以實(shí)現和Windows標準控件類(lèi)似的效果。 最重要的幾個(gè)函數是: 其中,WndProc是這個(gè)窗口的消息處理函數。在此,對消息循環(huán)進(jìn)行初立即可。例如: 添加了鍵盤(pán)驅動(dòng),修改了MiniGUI的輸入引擎后,應用程序就可以響應鍵盤(pán)消息,處理各種事件。除了對標準控制的支持外,MiniGUI還提供了圖形設備接口(GDI)的支持。通過(guò)GDI,程序可以在計算機屏幕上進(jìn)行圖形輸出,包括基本繪圖和文本輸出。利用這種手段,可以繪制指控終端需要的儀表、各種表格。 3.4 其他問(wèn)題 在該課題的開(kāi)發(fā)過(guò)程中,還遇到了一些其他的問(wèn)題,概述如下: (1)顯示的色彩深度問(wèn)題。作為指控終端,該課題設計的顯示分辨率為640×480,如果是16位以上的色深,對ARM處理器將是一個(gè)比較大的負擔,會(huì )出現畫(huà)面的抖動(dòng),不連貫。處理的方法是將色深設置為8位,這需要通過(guò)修改Linux的顯示驅動(dòng)來(lái)解決。 (2)鍵盤(pán)的防抖問(wèn)題。按鍵的抖動(dòng)問(wèn)題是一類(lèi)常見(jiàn)問(wèn)題,可以通過(guò)軟件延時(shí)或者其他的手段進(jìn)行處理。 (3)終端功能的進(jìn)一步豐富。該課題只實(shí)現了終端的人機界面,但是作為一個(gè)完整意義的終端,還應該考慮終端之間的聯(lián)網(wǎng)、數據傳輸,終端和工況采集裝置之間的硬件接口、數據交換等問(wèn)題。這些需要進(jìn)一步開(kāi)發(fā)利用ARM芯片上的其他外設,這是該課題下一步的目標。 4 結語(yǔ) ARM作為一款性?xún)r(jià)比突出的嵌入式芯片,與圖形系統MiniGUI相結合,是嵌入式圖形界面編程的優(yōu)選。實(shí)驗證明,本文所介紹的軟、硬件系統較好地實(shí)現了在本文引言中提及的車(chē)載指控平臺的幾項功能。作為一類(lèi)典型的車(chē)載嵌入式系統,車(chē)載指控系統的設計原理與方法同樣適用于其他嵌入式系統。 |