雷 毅 周徐昌
(海軍工程大學兵器工程系 武漢 430033)
隨著計算機科學技術的迅猛發展,當代仿真技術得到了極大地提高。傳統的嵌入式操作系統雖然實時性高,但需要獨有的開發定制工具,開發復雜,定制內核涉及BSP相關知識;而且其它通用功能例如圖形顯示功能并不強大,需要購買第三方圖形開發包,開發周期長。RTX則能比較好地完成圖形化和實時兩方面要求,因而在半實物仿真系統中得到了廣泛地使用。但目前設備廠商對于一些采用實時操作系統的仿真計算機,未提供相應的設備驅動程序,由于對實時性的要求,也必須自己開發相應的設備驅動程序。在某型武器半實物仿真系統中,選用研華公司的工控機和PCI1714數據采集卡、三軸轉臺等設備組成硬件平臺,RTX+Windows作為軟件平臺,在系統的開發過程中編寫了PCI卡的設備驅動程序。本文以PCI1714為例詳細討論了在RTX+Windows下開發PCI設備驅動程序的方法。
RTX是Windows XP/2000/NT系統的硬實時擴展,為 Windows系統提供了高速確定性的硬實時能力,滿足了對設備I/O進程的確定性響應的要求。其內核采用基于開放式的x86系列PC架構,可定制裁減,并支持多種CPU架構[1]。其獨立的基于搶占式的RT X線程調度機制允許RTSS線程優先于所有的Windows線程和中斷,并擁有足夠多的優先級,每個進程可以從0~127這128個優先級中選擇,而且提供了 Windows和RTSS進程之間的IPC進程間通信機制。
RTX對x86提供了很好的支持。而且RTX提供了針對端口I/O和總線I/O所有操作的功能函數,幾乎可以用于所有的驅動開發。并向開發者提供了獨立于操作系統和應用程序的對于系統資源的直接訪問控制和所有權,使得開發PCI驅動程序更方便。
某型武器半實物仿真系統仿真原理框圖如圖1所示,系統按照仿真時序的要求,采集其運動參數及舵角,送至數字仿真計算機,通過求解其動力學與運動學方程,發送命令給三軸轉臺和水壓仿真器,三軸轉臺通過角運動,水壓仿真器通過油壓動態變化,仿真其姿態變化和深度變化,給控制系統提供信息,從而模擬其下一時刻的運動狀態。

圖1 某型武器半實物仿真系統仿真原理框圖
仿真系統主要參數有各計算機幀時、轉臺和水壓仿真器分系統幀時、接口通信速率等。在Windows環境下能夠實現實時數據采集的資源有2個:多媒體定時器和常規定時器。常規定時器是建立在PC機硬件和ROM BIOS中系統定時器的簡單擴充基礎之上。由于ROM BIOS將PC中的一個8253定時芯片設為54.915ms產生一個硬件中斷,因此通過這種方式獲得的定時器只能精確到55ms,對于 55ms以下的時間精度便無能為力了[2]。多媒體定時器使用自己單獨的線程來調用一個自己的回調函數,并且該線程優先級高,每隔一定時間就發送一個消息而不管其他消息是否已執行完,因此采用多媒體定時器可以達到1ms的最小時間精度。對于一般的實時數據采集來說,采用多媒體定時器可以滿足要求,實時性要求更高的情況就無法滿足了。但是對于本系統來說,為保證系統的仿真精度和可信度,要求數學模型實時解算,需要更高精度的定時器。
RTX其持續中斷響應頻率可達30kHz以上,最大IST處理延遲不超過16μ s。能提供高速準確的實時時間響應,定時器最小周期為100μ s,時鐘最小分辨率為100ns。故從理論上看可滿足系統實時性的要求。
PCI-1714配備4組模擬輸入端,具備同步采集功能。當4組模擬輸入同時使用時,采樣頻率最高可達 30MS/s。PCI-1714板卡采用 PLX-9056 PCI總線控制器,同時,每路 ADC獨占板載的32kb,可保證數據在高速數據采集時的臨時存儲與數據的批量傳輸,實現數據的高速采集。
在完成對設備地址映射之后,驅動程序就可以根據分配的基地址訪問設備了。在RTX操作系統下,其驅動程序不含虛擬機,無需內核中轉請求,不含緩沖及校驗機制,可以直接操作寄存器。故可在內核之外與應用程序一起編譯運行,不必把驅動程序編譯到內核中去。而且RTX驅動程序架構靈活,無需WDM驅動規范,可以以各種形式存在包括.rtss,.rtdll,rtss dll,.lib。在PCI1714數據采集卡的驅動程序中,把驅動程序當作應用程序的一部分,一起編譯生成目標文件,沒有使用標準的驅動規范,這樣更方便操作采集卡。
一般來說,PCI的驅動程序可分為三個部分:初始化部分、對硬件資源的訪問函數庫、具體調用部分。調用RTX操作系統提供的I/O函數就可以控制采集卡上的數字IO輸出以及D/A輸出[3]。
4.2.1 獲得PCI設備信息,進行設備初始化
在執行初始化之前,需要對板卡的基地址進行賦值。不同于ISA設備可以預先了解設備的中斷號和基地址,PCI設備的中斷號和基地址是在開機時由系統自動分配的。所以在操作設備之前,必須首先確認設備的中斷號和基地址,以便進行下一步的操作。首先通過for循環程序找到與所編寫程序的PCI卡相對應的PCI設備,然后讀取設備中基地址寄存器中的地址和中斷號[4]。程序代碼如下所示:
BytesWritten=RtGetBusDataByOffset(
PCIConfiguration,//type of bus data to be retrieved bus
pSlotNumber->u.AsULONG,//logical slot number
PciData,//pointer to a buffer for configuration information 0,//byte offset into buffer PCI_COMMON_HDR_LENGTH//length of buffer)
初始化操作包括:配置中斷、停止位、奇偶校驗位、字長FIFO等。PCI設備對板卡的操作與ISA設備無異,核心就是對寄存器的配置與讀寫操作。通過直接操作相應寄存器即可達到相應要求,示例代碼如下:
RtWritePortUchar(ucb->baseAddress+UA RT_LCR,LCR_DIVISOR_LATCH);
tempRegister=ucb->stopBits|ucb->parity|ucb->wordSize;
tempRegister=RtReadPortUchar(ucb->baseAddress+UART_FCR);
4.2.2 調用I/O函數,訪問硬件資源
硬件中斷處理是實時系統設計的關鍵環節,外部事件通過中斷通知系統,系統通過中斷服務函數處理中斷請求。在中斷模式中,操作相應的讀寫寄存器傳入傳出數據即可,示例代碼如下:
中斷方式,清空FIFO:
VOID EmptyFIFO(UCB*ucb)
中斷方式,寫入FIFO:
VOID SendNextFIFO(UCB*ucb)
半實物仿真數據結果對比的標準有兩個:一是數字仿真結果;二是實航結果。圖2為半實物仿真的深度曲線與海上實航結果對比情況。說明了該驅動程序達到了系統的設計要求。
本文結合PCI1714數據采集卡分析了在RTX+Windows下開發PCI設備驅動程序的方法。經實際運行,所編寫的驅動程序在仿真系統中運行穩定可靠,系統的實時性達到了設計要求。
[1]Ardence公司.RTX技術白皮書[Z].北京航天捷越(美斯比)科技有限公司,譯,2004
[2]吳麗娜,高敬陽.Windows2000/XP下通用實時采集的設計與實現[J].計算機應用,2005,25(2):442~444
[3]王宇磊,周東.VxWorks下PCI總線驅動程序設計與實現[J].計算機應用
[4]董春橋,李凱.Linux系統PCI設備驅動程序開發[J].計算機測量與控制,2005,13
[5]WindRiver Systems Inc.VxWorks Programmer's Guide[Z].1998
[6]楊飛,安錦文,李中健.嵌入式實時操作系統VxWorks下CPCI設備驅動程序開發[J].計算機,2007,15(5)
[7]馬明建,周長城.數據采集與處理技術[M].西安:西安交通大學出版社,1998,1:59~70
[8]肖忠祥.數據采集原理[M].西安:西安工業大學出版社,2003:15~20