摘 要:WinDriver是一套功能強大的驅動程序開發(fā)包,使用WinDriver開發(fā)Windows下的驅動程序不需要熟悉DDK編程及驅動模式,可以簡化開發(fā)設備驅動程序的過程,縮短開發(fā)周期。本文在介紹一種ARINC429 總線接口板卡體系結構的基礎上闡述了利用WinDriver開發(fā)設備驅動的步驟和方法。
關鍵字:WinDriver; ARINC429; 設備驅動程序
[b][align=center]Design of device driver for ARINC-429 bus interface card using WinDriver kit
Yi Xiaoqing,Wang Qian,Luan Chunxu[/align][/b]
Abstracts: Design of device driver for ARINC-429 bus interface card using WinDriver kit WinDriver device driver toolkit has powerful function. Using WinDriver to develop the driver under Windows not to need to be familiar with the DDK programming and the actuation pattern . It can also predigest the process of developing of device driver and reduce the development cycle. This paper introduces the steps and methods of developing device drive with WinDriver on the basis of the architecture of ARINC-429 bus interface card.
Keywords: WinDriver; ARINC429; Device driver programming
0 引言
在現(xiàn)代軍、民用飛機上,系統(tǒng)間需要傳輸大量信息。隨著數字技術的發(fā)展和微型電子計算機的出現(xiàn),越來越多的航空電子設備已采用了數字化技術。美國航空無線電公司(ARINC)制定的ANINC429 數字信息傳輸規(guī)范成為在航空電子設備之間傳輸數字信息的航空運輸工業(yè)標準。該標準克服了模擬傳輸所導致的成本高、傳輸線多、可靠性差的缺點,提高了信息傳輸精度。針對實現(xiàn)ARINC429數據傳輸的總線接口板研究已經有很多,但在設計完硬件電路后,直接面臨的一個大問題便是開發(fā)其驅動程序。如何在涉及較少系統(tǒng)內核知識的前提下快速開發(fā)出高質量、高可靠性的驅動程序是是迫切要解決的問題。美國Jungo公司的WinDriver開發(fā)包因其簡潔高效、不涉及操作系統(tǒng)底層編程且有很好的兼容性成為編寫驅動程序的一種好工具,本文將給出基于WinDriver用戶模式的ARINC429總線接口板卡驅動程序的設計方法。
1 ANINC429總線接口卡結構設計
1.1 ARINC429規(guī)范概述
ARINC429總線是美國航空無線電公司(ARINC)制定的民用航空數字總線傳輸標準,規(guī)定了使用該總線的航空電子設備的信息量流向ARINC429基本數據字的格式。ARINC429是一種單向廣播式數據總線,傳輸介質由雙絞屏蔽電纜組成。ARINC429 數字信息傳輸規(guī)范闡述了通過一對屏蔽雙絞線(數字數據總線)從一個端口向其它系統(tǒng)和設備以串行方式傳輸數字數據信息的方法。信息傳送的速率是:高速傳輸的位速率為100Kb/s±1%,低速傳輸的位速率為12. 0~14.5Kb/s±1%。ARINC429規(guī)定數據傳輸采用雙極性歸零碼(如圖1所示),即調制信號由“高”、“零”和“低”狀態(tài)組成。雙極性歸零碼的基本信號波形中攜帶了位同步信息,位同步是由零狀態(tài)變至“高”或“低”狀態(tài)的這一狀態(tài)變化來識別。字同步是以傳輸周期間至少四位的時間間隔為基準,緊跟該字間隔后要發(fā)送的第一位起點即為新字的起點。圖2所示為一個ARINC429數據字格式。
[align=center]

圖1 ARINC429數字信息傳輸格式[/align]
[align=center]

圖2 ARINC429數字字格式[/align]
1.2ARINC429通信模塊原理
本ARINC429數據總線通信模塊的主要功能有:完成兩路ARINC429接收數據的串并轉換和并串轉換;支持中斷方式、查詢方式接收發(fā)送數據從ARINC429數據總線的通信協(xié)議出發(fā),機載設備之間通信或與檢測設備通信首先應通過一個發(fā)送器發(fā)送數據,把這些數據轉換為符合ARINC429數據總線規(guī)范的數據在數據總線上傳輸,到了目標設備時又通過它的接收器把這些數據轉化為設備能識別的數據格式。
1.3 一種ARINC429總線接口卡結構設計
本文介紹的插卡采用CPLD技術,可實現(xiàn)兩路PXI總線與ARINC429總線的通訊,且基于可編程芯片的特點,還可擴展為多路接收與發(fā)送,電路簡單、器件少、可靠性高。硬件電路總體分為了四個部分:(1) CPCI/PXI接口芯片;(2) CPLD芯片;(3) FIFO芯片;(4)電平轉換電路。其基本框圖如圖3所示,該模塊可完成兩路ARINC429數據發(fā)送、接收,支持12.5K,25K,50K,100K四種傳輸速率,支持中斷方式、查詢方式接收、發(fā)送數據。
2 基于WinDriver的ARINC429總線接口卡驅動程序設計
2.1WinDriver開發(fā)工具概述
WinDriver是美國Jungo公司出品的、用于編寫硬件驅動程序的一種工具軟件,主要針對ISA插卡、PCI插卡和USB這些硬件的設備驅動程序進行開發(fā)。通過運行DriverWizard能為插卡產生基本的驅動程序框架,具備設備檢測、配置寄存器讀寫、自定義寄存器讀寫、I/O和Memory空間訪問等功能。使用自己熟悉的編譯器和編程語言添加代碼,便能得到滿意的設備驅動。因為Windriver把所有繁雜的底層操作都封裝在一個內核模塊中,而提供給用戶標準的Windriver API 函數來實現(xiàn)硬件訪問。如此將驅動開發(fā)的繁雜工作變成了僅僅是調用硬件操作的標準API函數,大大簡化了驅動開發(fā)者的工作,加快了開發(fā)周期。
2.2基于WinDriver的ARINC429驅動程序設計
WinDriver編程有兩種模式,一種是用戶模式,這種模式利用軟件自身提供的驅動程序Windrvr.vxd和Windrvr.sys,用戶所面對的是驅動程序給出的用高級語言封裝好的相應功能接口,不需要對操作系統(tǒng)內核了解太多。另一種模式是核心插入用KernelPlugIn方式進行編程,是真正意義上的驅動程序,該模式適宜于用戶對速度有特殊要求的情況。在本文中采用用戶模式。
以本文設計的ARINC429卡為例,利用WinDriver8.01版開發(fā)驅動樣本包括以下步驟:
1)安裝、配置插卡到PC機;
2)運行Driver Wizard,在設備列表中選擇顯示插卡名的一項,運行“Generate.INF file”選項為該設備命名為A429,則會產生A429.INF文件;
3)繼續(xù)運行Driver Wizard,選擇VC編譯環(huán)境產生驅動樣本;
4)用產生的.INF文件,按常規(guī)步驟安裝硬件驅動,由Windriver提供的內核文件接管設備;
5)在開發(fā)環(huán)境中,移植驅動樣本中的API函數代碼,編寫具體的功能代碼,建立用戶模式的驅動程序;
6)打包發(fā)布驅動程序。
WinDriver的驅動樣本產生兩個重要文件:A429_lib.c和A429_diag.c。前者是設備的應用程序級API函數文件,用戶可以直接調用這些標準API函數實現(xiàn)對硬件的操作和訪問,屬于用戶模式的驅動程序。后者是利用上述API函數訪問硬件的樣本程序文件(控制臺程序),通過對該文件的分析可以學到如何調用API函數編寫簡單的驅動程序。結合兩個文件分析后得出如下幾個函數非常重要:
1) DeviceFindAndOpen () ,獲得驅動程序(指Windrvr.vxd或Windrvr.sys)的句柄,在驅動程序開始時必須調用。
2) DeviceClose () ,釋放驅動程的句柄,在程序結束時調用。
3) DiagIntHandler() ,中斷處理函數,用戶加代碼實現(xiàn)當中斷信號到來時,對硬件的控制處理。
4) A429_IntEnable() ,中斷使能,以DiagIntHandler作為參數調用該函數后才能進入到對中斷進行處理的函數。
5) A429_IntDisable() ,中斷無效函數,屏蔽中斷信號。
6) WDC_WriteAddr32() ,按照參數中給的地址,往寄存器中寫數。
7) WDC_ReadAddr32() ,從寄存器中讀數。
本驅動軟件為在Windows2000系統(tǒng)平臺下基于WinDriver采用VC語言編制的驅動軟件的DLL動態(tài)庫,主要完成初始化和數據的收發(fā)功能,并檢驗數據的正確性。具體功能有輸入端口選擇、發(fā)送/接受FIFO復位、數據傳輸率設定與獲得、奇偶校驗設置與獲得、發(fā)數據前判斷發(fā)送FIFO是否空及收數據前判斷接受FIFO中是否有數等。要實現(xiàn)這些功能需要導入文件A429_lib.c并結合硬件設計的定義適當調用上述7個函數并封裝將能實現(xiàn)這些功能的函數作為導出函數供測試程序直接調用。下面是設計的函數與其功能的對應關系
1) void*A429_Open(),對DeviceFindAndOpen()的封裝,獲得驅動程序的句柄。
2) int A429_Close(void*hDev),以上面函數返回的句柄作為參數,退出驅動程序。
3) void A429_SetCheck(BYTE chan, BYTE check),chan:通道號,根據chan的值設置對應端口的校驗值保存在變量check中。
4) void A429_SetSpeed(BYTE chan,BYTE boud),設置對應端口的數據發(fā)送速率,保存在變量boud中。
5) void A429_ResetSendChan(BYTE chan),將chan對應的發(fā)送端口復位。實現(xiàn)代碼即是調用WDC_WriteAddr32(),其地址參數值根據硬件設計的定義傳遞。
6) void A429_ResetReceiChan(BYTE chan),復位與chan對應的接收端口。
7) void A429_ResetAll(),對所有發(fā)送和接受端口復位。
8) BYTE A429_SendChanIsBusy(BYTE chan),檢查與參數值對應的發(fā)送端口是否忙,返回值為0代表空閑狀態(tài),為1則忙。
9) byte A429_GetCheck(BYTE chan),獲得用戶設置的奇偶校驗量。
10) WORD A429_GetData(BYTE chan,WORD Maxlenth,DWORD *pdata),從接收通道獲得數量長度不大于Maxlenth的ARINC429數據字,存入為chan對應通道分配的pdata所指緩存區(qū)中,返回取走數據個數
[align=center]

圖3 ARINC429總線接口卡的基本結構[/align]
[align=center]

圖4主程序流程圖[/align]
上述函數能實現(xiàn)簡單的一次發(fā)送和接受數據,是提供給用戶的導出函數。導出變量有讀寫緩存區(qū)地址 ,為了能不間斷的測試發(fā)送接收數據的正取性,本文設計三個線程,分別為往發(fā)送FIFO寫數的寫線程、從接受FIFO取數存入緩存區(qū)的的讀線程和通知測試程序緩沖區(qū)有數請取出的通知線程,并為該三線程建立一個互斥對象,以防止對同一數據進行操作時發(fā)生錯誤。在寫線程中根據測試程序輸入數的多少循環(huán)調用WDC_WriteAddr32(),發(fā)送的數據存入發(fā)送緩存區(qū)。讀線程將接收FIFO中的數讀出與發(fā)送數據比較,若正確則存入接收緩存區(qū)并刪除發(fā)送數據為接下來的發(fā)送數據騰出內存空間。測試程序接收到通知,調用用戶設計的處理函數依次取走接收緩存區(qū)數據轉存,驗證板卡能否正確收發(fā)數據。圖4是整個程序流程圖,限于篇幅,詳細的代碼就不一一介紹,初始化中包括中斷使能,中斷服務程序即是在中斷處理函數DiagIntHandler()中調用讀線程。
3 結論
本驅動程序在NI公司PXI-1000機箱,PXI-8156控制器,CPU:X86 Fimily 5 Model 4,
內存 81,460kB,操作系統(tǒng) :Microsoft Windows 2000 professional的條件下,進行了連續(xù)的僅一個通道收發(fā)、兩通道同時收發(fā)數據測試,結果表明本文設計的驅動程序能成功高效運行,有較高的實用價值,對后續(xù)的利用WinDriver開發(fā)驅動程序相關研究有一定參考價值。也再次說明了硬件開發(fā)人員利用WinDriver開發(fā)驅動程序,不必了解繁瑣的內核驅動知識,也能快速開發(fā)出性能指標令人滿意的設備驅動程序,是設計硬件驅動的高效率的工具。
參考文獻
1楊淑云,劉強.基于WinDriver的設備驅動程序的設計開發(fā)[J] .電子技術. 2001 (9): 21- 23
2黃訊,孫政順.利用WinDriver開發(fā)PCI設備驅動程序[J].電子技術應用.2001(3):15-16
作者簡介:易小青(1984-),女,碩士研究生,從事計算機在電力調度自動化應用研究。王倩(1962-),女,教授,從事計算機技術在電力系統(tǒng)的應用研究。