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