基于Windows系統(tǒng)的數(shù)據(jù)接收卡的驅(qū)動(dòng)程序開(kāi)發(fā)
發(fā)布時(shí)間:2018-07-02 來(lái)源: 歷史回眸 點(diǎn)擊:
[摘 要]介紹了在Windows系統(tǒng)環(huán)境下利用WDF開(kāi)發(fā)CPCI接收設(shè)備的驅(qū)動(dòng)程序的步驟。重點(diǎn)研究了板卡多突發(fā)中斷情況下,實(shí)現(xiàn)在系統(tǒng)內(nèi)核層穩(wěn)定采集板卡數(shù)據(jù)的方法。
[關(guān)鍵詞]CPCI,驅(qū)動(dòng)程序,WDF
[Abstract]the paper introduces the process of empolderring CPCI receiving device driver using WDF depending Windows operation system. Particularly shows the device causing burst interruptions receives data stably.
[Key words]CPCI, driver,WDF
中圖分類(lèi)號(hào):S343 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-914X(2018)24-0274-02
1.引言
數(shù)據(jù)接收卡是一種廣泛應(yīng)用的測(cè)試設(shè)備。為了便于板卡利用Windows系統(tǒng)的可視化界面,實(shí)時(shí)數(shù)據(jù)存儲(chǔ)、分析與顯示,需要開(kāi)發(fā)基于Windwos系統(tǒng)的驅(qū)動(dòng),完成數(shù)據(jù)接收卡與用戶(hù)應(yīng)用程序間的橋接。由于cpci總線具有更好的機(jī)械特性和更多的擴(kuò)展IO,自主研發(fā)數(shù)據(jù)接收卡采用cpci總線接口設(shè)計(jì)。驅(qū)動(dòng)程序設(shè)計(jì)選用微軟新推出的WDF(Windows Driver Foundation,Windows驅(qū)動(dòng)基礎(chǔ))框架驅(qū)動(dòng)模型,相比較早的WDM(Windows Driver Model),更提高了驅(qū)動(dòng)程序的穩(wěn)定性。
2.Windows環(huán)境下基于cpci總線的采集卡驅(qū)動(dòng)框架設(shè)計(jì)
設(shè)備的驅(qū)動(dòng)程序至少包含兩個(gè)驅(qū)動(dòng)程序,總線驅(qū)動(dòng)程序和功能驅(qū)動(dòng)程序。總線驅(qū)動(dòng)程序由操作系統(tǒng)提供, 基于CPCI總線的驅(qū)動(dòng)程序是指功能驅(qū)動(dòng)程序,只要完成設(shè)備功能。采集卡主要實(shí)現(xiàn)數(shù)據(jù)的采集和指令的發(fā)送,因此采集卡的驅(qū)動(dòng)主要實(shí)現(xiàn)中斷操作及控制指令的讀寫(xiě)操作。針對(duì)多中斷接收卡設(shè)計(jì)的基于Windows系統(tǒng)的驅(qū)動(dòng)設(shè)計(jì),該驅(qū)動(dòng)包括板卡識(shí)別模塊,地址轉(zhuǎn)換模塊,多中斷數(shù)據(jù)處理模塊。具體驅(qū)動(dòng)處理流程如下圖所示。CPCI驅(qū)動(dòng)程序設(shè)計(jì)步驟如圖1所示。
1)初始化設(shè)備,創(chuàng)建設(shè)備對(duì)象、設(shè)備接口和IO隊(duì)列,主要在DriverEntry例程實(shí)現(xiàn)。調(diào)用WdfDriverCreate()函數(shù)創(chuàng)建WDFDRIVER對(duì)象;
2)完成地址映射,將板卡硬件地址轉(zhuǎn)換成Windows系統(tǒng)可以識(shí)別與操作的地址,初始化中斷與DMA通道,主要在即插即用例程EvtDriverDeviceAdd()中實(shí)現(xiàn);
3)上層應(yīng)用程序發(fā)送控制指令,開(kāi)中斷,啟動(dòng)中斷處理過(guò)程,主要在分發(fā)例程EvtIoDeviceControl()中實(shí)現(xiàn);
4)中斷操作,主要在中斷例程中實(shí)現(xiàn);
3.遇到問(wèn)題及解決措施
數(shù)據(jù)接收卡產(chǎn)生突發(fā)多中斷脈沖,且不同類(lèi)型中斷脈沖間隔可能會(huì)很短,一般的驅(qū)動(dòng)程序設(shè)計(jì)會(huì)出現(xiàn)丟數(shù)情況,該驅(qū)動(dòng)采用與硬件設(shè)備建立握手機(jī)制,動(dòng)態(tài)存儲(chǔ)中斷類(lèi)型信息,延遲數(shù)據(jù)搬移釋放中斷處理函數(shù)的方式,實(shí)現(xiàn)了接收卡實(shí)時(shí)穩(wěn)定的接收數(shù)據(jù)。建立握手與中斷類(lèi)型緩存表,延遲數(shù)據(jù)處理的方法步驟如下所示。
1)建立中斷類(lèi)型緩存表,初始化讀計(jì)數(shù)write_count_n =0與寫(xiě)計(jì)數(shù)read_ count_n =0;
2)在中斷處理函數(shù)中接收中斷,根據(jù)寄存器存儲(chǔ)的中斷類(lèi)型將不同的標(biāo)志位寫(xiě)入中斷類(lèi)型緩存表,相應(yīng)中斷類(lèi)型的write_count_n加1,并根據(jù)中斷類(lèi)型標(biāo)志位預(yù)判是否有其他中斷到達(dá);
3)中斷類(lèi)型判讀完成后,向固定IO寄存器寫(xiě)入1,后寫(xiě)入0,輸出脈沖,與硬件設(shè)備完成握手,通知硬件將高電平的中斷信號(hào)拉低,有效防止驅(qū)動(dòng)程序由于中斷處理函數(shù)的處理時(shí)間較長(zhǎng)而未能響應(yīng)其他中斷脈沖信號(hào)的情況的發(fā)生;
4)啟動(dòng)延遲過(guò)程調(diào)用,釋放中斷處理函數(shù),繼續(xù)接收其他類(lèi)型中斷,提高中斷處理效率;
5)根據(jù)中斷類(lèi)型緩存表類(lèi)型在延遲過(guò)程調(diào)用函數(shù)中進(jìn)行不同數(shù)據(jù)的搬移,并將相應(yīng)中斷類(lèi)型的read_count_n加1。根據(jù)數(shù)據(jù)類(lèi)型置不同類(lèi)型事件,通知上層應(yīng)用程序從數(shù)據(jù)緩存中搬移數(shù)據(jù)(圖2)。
4.結(jié)束語(yǔ)
自主研發(fā)板卡需要采集多路數(shù)據(jù),輸出多中斷,采用普通驅(qū)動(dòng)設(shè)計(jì)已經(jīng)無(wú)法滿(mǎn)足設(shè)計(jì)需求,在驅(qū)動(dòng)設(shè)計(jì)中采用建立握手和中斷類(lèi)型緩存表的方法,實(shí)現(xiàn)了在驅(qū)動(dòng)內(nèi)核層實(shí)時(shí)穩(wěn)定的進(jìn)行數(shù)據(jù)采集。
參考文獻(xiàn)
[1] 尹勇.PCI總線設(shè)備開(kāi)發(fā)寶典[M].北京:航空航天大學(xué)出版社,2005.
[2] 賈濤,王鐵嶺.PCI數(shù)據(jù)采集卡的WDM驅(qū)動(dòng)開(kāi)發(fā)[J].國(guó)外電子測(cè)量技術(shù),2006(8).
[3] 張帆,史彩成.Windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.
[4] 鄭秀玉,李曉明,李暢,等.基于PCI總線的數(shù)據(jù)采集卡驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)[J].電器應(yīng)用,2007,26(1).
[5] 王磊,魯新平,李吉成.WinDriver在開(kāi)發(fā)基于PLX9056芯片的PCI設(shè)備驅(qū)動(dòng)程序中的應(yīng)用[J].現(xiàn)代電子技術(shù),2006,29(18).
相關(guān)熱詞搜索:程序開(kāi)發(fā) 接收 驅(qū)動(dòng) 數(shù)據(jù) 系統(tǒng)
熱點(diǎn)文章閱讀