時間:2008-11-04 11:50:00來源:ronggang
圖2 ARINC429數(shù)字字格式[/align]
1.2ARINC429通信模塊原理
本ARINC429數(shù)據(jù)總線通信模塊的主要功能有:完成兩路ARINC429接收數(shù)據(jù)的串并轉(zhuǎn)換和并串轉(zhuǎn)換;支持中斷方式、查詢方式接收發(fā)送數(shù)據(jù)從ARINC429數(shù)據(jù)總線的通信協(xié)議出發(fā),機載設備之間通信或與檢測設備通信首先應通過一個發(fā)送器發(fā)送數(shù)據(jù),把這些數(shù)據(jù)轉(zhuǎn)換為符合ARINC429數(shù)據(jù)總線規(guī)范的數(shù)據(jù)在數(shù)據(jù)總線上傳輸,到了目標設備時又通過它的接收器把這些數(shù)據(jù)轉(zhuǎn)化為設備能識別的數(shù)據(jù)格式。
1.3 一種ARINC429總線接口卡結構設計
本文介紹的插卡采用CPLD技術,可實現(xiàn)兩路PXI總線與ARINC429總線的通訊,且基于可編程芯片的特點,還可擴展為多路接收與發(fā)送,電路簡單、器件少、可靠性高。硬件電路總體分為了四個部分:(1) CPCI/PXI接口芯片;(2) CPLD芯片;(3) FIFO芯片;(4)電平轉(zhuǎn)換電路。其基本框圖如圖3所示,該模塊可完成兩路ARINC429數(shù)據(jù)發(fā)送、接收,支持12.5K,25K,50K,100K四種傳輸速率,支持中斷方式、查詢方式接收、發(fā)送數(shù)據(jù)。
2 基于WinDriver的ARINC429總線接口卡驅(qū)動程序設計
2.1WinDriver開發(fā)工具概述
WinDriver是美國Jungo公司出品的、用于編寫硬件驅(qū)動程序的一種工具軟件,主要針對ISA插卡、PCI插卡和USB這些硬件的設備驅(qū)動程序進行開發(fā)。通過運行DriverWizard能為插卡產(chǎn)生基本的驅(qū)動程序框架,具備設備檢測、配置寄存器讀寫、自定義寄存器讀寫、I/O和Memory空間訪問等功能。使用自己熟悉的編譯器和編程語言添加代碼,便能得到滿意的設備驅(qū)動。因為Windriver把所有繁雜的底層操作都封裝在一個內(nèi)核模塊中,而提供給用戶標準的Windriver API 函數(shù)來實現(xiàn)硬件訪問。如此將驅(qū)動開發(fā)的繁雜工作變成了僅僅是調(diào)用硬件操作的標準API函數(shù),大大簡化了驅(qū)動開發(fā)者的工作,加快了開發(fā)周期。
2.2基于WinDriver的ARINC429驅(qū)動程序設計
WinDriver編程有兩種模式,一種是用戶模式,這種模式利用軟件自身提供的驅(qū)動程序Windrvr.vxd和Windrvr.sys,用戶所面對的是驅(qū)動程序給出的用高級語言封裝好的相應功能接口,不需要對操作系統(tǒng)內(nèi)核了解太多。另一種模式是核心插入用KernelPlugIn方式進行編程,是真正意義上的驅(qū)動程序,該模式適宜于用戶對速度有特殊要求的情況。在本文中采用用戶模式。
以本文設計的ARINC429卡為例,利用WinDriver8.01版開發(fā)驅(qū)動樣本包括以下步驟:
1)安裝、配置插卡到PC機;
2)運行Driver Wizard,在設備列表中選擇顯示插卡名的一項,運行“Generate.INF file”選項為該設備命名為A429,則會產(chǎn)生A429.INF文件;
3)繼續(xù)運行Driver Wizard,選擇VC編譯環(huán)境產(chǎn)生驅(qū)動樣本;
4)用產(chǎn)生的.INF文件,按常規(guī)步驟安裝硬件驅(qū)動,由Windriver提供的內(nèi)核文件接管設備;
5)在開發(fā)環(huán)境中,移植驅(qū)動樣本中的API函數(shù)代碼,編寫具體的功能代碼,建立用戶模式的驅(qū)動程序;
6)打包發(fā)布驅(qū)動程序。
WinDriver的驅(qū)動樣本產(chǎn)生兩個重要文件:A429_lib.c和A429_diag.c。前者是設備的應用程序級API函數(shù)文件,用戶可以直接調(diào)用這些標準API函數(shù)實現(xiàn)對硬件的操作和訪問,屬于用戶模式的驅(qū)動程序。后者是利用上述API函數(shù)訪問硬件的樣本程序文件(控制臺程序),通過對該文件的分析可以學到如何調(diào)用API函數(shù)編寫簡單的驅(qū)動程序。結合兩個文件分析后得出如下幾個函數(shù)非常重要:
1) DeviceFindAndOpen () ,獲得驅(qū)動程序(指Windrvr.vxd或Windrvr.sys)的句柄,在驅(qū)動程序開始時必須調(diào)用。
2) DeviceClose () ,釋放驅(qū)動程的句柄,在程序結束時調(diào)用。
3) DiagIntHandler() ,中斷處理函數(shù),用戶加代碼實現(xiàn)當中斷信號到來時,對硬件的控制處理。
4) A429_IntEnable() ,中斷使能,以DiagIntHandler作為參數(shù)調(diào)用該函數(shù)后才能進入到對中斷進行處理的函數(shù)。
5) A429_IntDisable() ,中斷無效函數(shù),屏蔽中斷信號。
6) WDC_WriteAddr32() ,按照參數(shù)中給的地址,往寄存器中寫數(shù)。
7) WDC_ReadAddr32() ,從寄存器中讀數(shù)。
本驅(qū)動軟件為在Windows2000系統(tǒng)平臺下基于WinDriver采用VC語言編制的驅(qū)動軟件的DLL動態(tài)庫,主要完成初始化和數(shù)據(jù)的收發(fā)功能,并檢驗數(shù)據(jù)的正確性。具體功能有輸入端口選擇、發(fā)送/接受FIFO復位、數(shù)據(jù)傳輸率設定與獲得、奇偶校驗設置與獲得、發(fā)數(shù)據(jù)前判斷發(fā)送FIFO是否空及收數(shù)據(jù)前判斷接受FIFO中是否有數(shù)等。要實現(xiàn)這些功能需要導入文件A429_lib.c并結合硬件設計的定義適當調(diào)用上述7個函數(shù)并封裝將能實現(xiàn)這些功能的函數(shù)作為導出函數(shù)供測試程序直接調(diào)用。下面是設計的函數(shù)與其功能的對應關系
1) void*A429_Open(),對DeviceFindAndOpen()的封裝,獲得驅(qū)動程序的句柄。
2) int A429_Close(void*hDev),以上面函數(shù)返回的句柄作為參數(shù),退出驅(qū)動程序。
3) void A429_SetCheck(BYTE chan, BYTE check),chan:通道號,根據(jù)chan的值設置對應端口的校驗值保存在變量check中。
4) void A429_SetSpeed(BYTE chan,BYTE boud),設置對應端口的數(shù)據(jù)發(fā)送速率,保存在變量boud中。
5) void A429_ResetSendChan(BYTE chan),將chan對應的發(fā)送端口復位。實現(xiàn)代碼即是調(diào)用WDC_WriteAddr32(),其地址參數(shù)值根據(jù)硬件設計的定義傳遞。
6) void A429_ResetReceiChan(BYTE chan),復位與chan對應的接收端口。
7) void A429_ResetAll(),對所有發(fā)送和接受端口復位。
8) BYTE A429_SendChanIsBusy(BYTE chan),檢查與參數(shù)值對應的發(fā)送端口是否忙,返回值為0代表空閑狀態(tài),為1則忙。
9) byte A429_GetCheck(BYTE chan),獲得用戶設置的奇偶校驗量。
10) WORD A429_GetData(BYTE chan,WORD Maxlenth,DWORD *pdata),從接收通道獲得數(shù)量長度不大于Maxlenth的ARINC429數(shù)據(jù)字,存入為chan對應通道分配的pdata所指緩存區(qū)中,返回取走數(shù)據(jù)個數(shù)
[align=center]
圖3 ARINC429總線接口卡的基本結構[/align]
[align=center]
圖4主程序流程圖[/align]
上述函數(shù)能實現(xiàn)簡單的一次發(fā)送和接受數(shù)據(jù),是提供給用戶的導出函數(shù)。導出變量有讀寫緩存區(qū)地址 ,為了能不間斷的測試發(fā)送接收數(shù)據(jù)的正取性,本文設計三個線程,分別為往發(fā)送FIFO寫數(shù)的寫線程、從接受FIFO取數(shù)存入緩存區(qū)的的讀線程和通知測試程序緩沖區(qū)有數(shù)請取出的通知線程,并為該三線程建立一個互斥對象,以防止對同一數(shù)據(jù)進行操作時發(fā)生錯誤。在寫線程中根據(jù)測試程序輸入數(shù)的多少循環(huán)調(diào)用WDC_WriteAddr32(),發(fā)送的數(shù)據(jù)存入發(fā)送緩存區(qū)。讀線程將接收FIFO中的數(shù)讀出與發(fā)送數(shù)據(jù)比較,若正確則存入接收緩存區(qū)并刪除發(fā)送數(shù)據(jù)為接下來的發(fā)送數(shù)據(jù)騰出內(nèi)存空間。測試程序接收到通知,調(diào)用用戶設計的處理函數(shù)依次取走接收緩存區(qū)數(shù)據(jù)轉(zhuǎn)存,驗證板卡能否正確收發(fā)數(shù)據(jù)。圖4是整個程序流程圖,限于篇幅,詳細的代碼就不一一介紹,初始化中包括中斷使能,中斷服務程序即是在中斷處理函數(shù)DiagIntHandler()中調(diào)用讀線程。
3 結論
本驅(qū)動程序在NI公司PXI-1000機箱,PXI-8156控制器,CPU:X86 Fimily 5 Model 4,
內(nèi)存 81,460kB,操作系統(tǒng) :Microsoft Windows 2000 professional的條件下,進行了連續(xù)的僅一個通道收發(fā)、兩通道同時收發(fā)數(shù)據(jù)測試,結果表明本文設計的驅(qū)動程序能成功高效運行,有較高的實用價值,對后續(xù)的利用WinDriver開發(fā)驅(qū)動程序相關研究有一定參考價值。也再次說明了硬件開發(fā)人員利用WinDriver開發(fā)驅(qū)動程序,不必了解繁瑣的內(nèi)核驅(qū)動知識,也能快速開發(fā)出性能指標令人滿意的設備驅(qū)動程序,是設計硬件驅(qū)動的高效率的工具。
參考文獻
1楊淑云,劉強.基于WinDriver的設備驅(qū)動程序的設計開發(fā)[J] .電子技術. 2001 (9): 21- 23
2黃訊,孫政順.利用WinDriver開發(fā)PCI設備驅(qū)動程序[J].電子技術應用.2001(3):15-16
作者簡介:易小青(1984-),女,碩士研究生,從事計算機在電力調(diào)度自動化應用研究。王倩(1962-),女,教授,從事計算機技術在電力系統(tǒng)的應用研究。
標簽:
傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為傳動網(wǎng)(connectcrack.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
相關資訊
產(chǎn)品新聞
更多>2025-09-23
2025-09-23
2025-09-08
華為昇騰Atlas800iA2 910B服務器Deepsee...
2025-09-04
2025-09-03
2025-08-06