999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PCM高速遙測發(fā)送卡的WDM驅(qū)動程序設(shè)計

2008-04-12 00:00:00徐華鋒
現(xiàn)代電子技術(shù) 2008年4期

摘 要:PCM高速遙測數(shù)據(jù)發(fā)送卡是一款基于PCI接口芯片9054的PCM信號源,工作碼速率可達10 Mb/s。以在Windows 2000操作系統(tǒng)下設(shè)計PCM高速遙測數(shù)據(jù)發(fā)送卡的WDM驅(qū)動程序為例,介紹WDM驅(qū)動程序的基本特點和遙測數(shù)據(jù)發(fā)送卡的基本結(jié)構(gòu),詳細(xì)討論利用Driver Studio開發(fā)WDM驅(qū)動程序設(shè)計的關(guān)鍵技術(shù),如設(shè)備初始化、軟件FIFO、中斷處理和DMA操作等。

關(guān)鍵詞:PCI;WDM;I/O請求包(IRP);軟件FIFO

中圖分類號:TP311.52

文獻標(biāo)識碼:B

文章編號:1004—373X(2008)04—063—03

開發(fā)驅(qū)動程序的軟件主要有:MicroSoft公司的DDK,Jungo公司的Windriver和Compuware NuMega公司的Driver Studio三種。DDK是最基本的驅(qū)動程序開發(fā)工具,比較復(fù)雜,適于專業(yè)的驅(qū)動程序開發(fā)人員,不適于硬件開發(fā)人員開發(fā)驅(qū)動程序。Windriver開發(fā)驅(qū)動程序不需要熟悉操作系統(tǒng)內(nèi)核知識,針對硬件PCI/ISA/PCM—CIA/USB開發(fā)驅(qū)動程序比較方便,但驅(qū)動程序的效率不高、缺乏靈活性。Driver Studio把DDK用類的形式進行封裝,簡化設(shè)備驅(qū)動程序的開發(fā),方便又不失靈活性。所以這里選擇Driver Studio作為驅(qū)動程序的開發(fā)工具。

在結(jié)合PCM高速遙測數(shù)據(jù)發(fā)送卡的基礎(chǔ)上,本文介紹WDM驅(qū)動程序的結(jié)構(gòu)特點和PCM高速遙測數(shù)據(jù)發(fā)送卡的硬件結(jié)構(gòu),并闡述針對數(shù)據(jù)發(fā)送卡的特點,詳細(xì)地討論驅(qū)動程序關(guān)鍵部分的設(shè)計。

1 PCM遙測數(shù)據(jù)發(fā)送卡的硬件結(jié)構(gòu)

圖1為遙測數(shù)據(jù)發(fā)送卡的原理框圖。碼型變換器的功能是根據(jù)原始PCM數(shù)據(jù)產(chǎn)生3種輸出碼型:NRZ—L,NRZ—M及NRZ—S之一,以適應(yīng)更加廣泛的測試目的。多電平驅(qū)動器將來自FPGA的LV TTL電平的PCM數(shù)據(jù)和時鐘信號轉(zhuǎn)換為3種電平接口輸出,分別是TTL,EIA422及MLVDS。同步FIFO作為硬件數(shù)據(jù)幀緩存存儲由PCI總線寫入的數(shù)據(jù)幀,然后由序列生成器讀出。序列生成器根據(jù)PCM時鐘速率產(chǎn)生串行移出的PCM原始數(shù)據(jù)將來自FIFO的32位并行數(shù)據(jù)轉(zhuǎn)換為串行輸出,同時根據(jù)移位寄存器的狀態(tài)產(chǎn)生發(fā)向FIFO的讀數(shù)請求:

2 WDM驅(qū)動程序的結(jié)構(gòu)及特點

WDM(Windows Driver Model)是在原有的NT內(nèi)核模式驅(qū)動程序的基礎(chǔ)上發(fā)展來的,他增加了PnP(Plugand Play)、電源管理、WMI(Windows Management Instru—mentation)等功能。WDM模型的層次結(jié)構(gòu)如圖2所示。

層次結(jié)構(gòu)可以使I/O請求過程更加清晰。影響設(shè)備的每一個操作都使用I/O請求包(IRP),通常IRP被送到設(shè)備堆棧的最上層,然后逐漸過濾到下層驅(qū)動程序。每處理1個IRP,I/O管理器就調(diào)用1次StartIO例程,從而著手IRP處理工作;如何處理完全取決于具體的設(shè)備,調(diào)用驅(qū)動程序中相應(yīng)的例程。驅(qū)動程序處理完IRP后,會將結(jié)果返回給I/O管理器,再由I/O管理器返回給用戶應(yīng)用程序。

3 PCM遙測數(shù)據(jù)發(fā)送卡WDM驅(qū)動程序的設(shè)計

在設(shè)備的驅(qū)動程序設(shè)計中,需要處理PCI設(shè)備的硬件讀寫、中斷處理、DMA等功能。可以把驅(qū)動程序視為一個框架和若干例程的結(jié)合體,各個例程處理不同的IRP,而框架負(fù)責(zé)在IRP到來時調(diào)用相應(yīng)的例程。利用Driver—Works的驅(qū)動程序向?qū)?Driver Wizard)新建一個PCI設(shè)備驅(qū)動程序框架,然后在這個框架基礎(chǔ)上添加必要的實現(xiàn)功能的處理代碼,就可以完成整個驅(qū)動程序的設(shè)計。下面以PCM遙測數(shù)據(jù)發(fā)送卡為例討論其主要的功能驅(qū)動程序例程的實現(xiàn)。

3.1硬件初始化例程

OnStartDevice(KIrp I)參數(shù)例程中包含2種系統(tǒng)分配的資源配置信息:原始的資源配置信息(AllocatedRe—sources);轉(zhuǎn)換后的資源配置信息(AllocatedResourcesTranslated)。因為I/O總線和CPU在尋址物理硬件的方式不同,所以存在2種資源列表。從注冊表、PCI配置空間和其他地方獲取原始的資源值和轉(zhuǎn)換這些值的操作全部由PnP管理器完成,WDM驅(qū)動程序需要做的僅是從設(shè)備啟動IRP中獲取這些資源。

3.2 中斷服務(wù)例程

中斷服務(wù)例程運行在DIRQL級別上,需要盡可能快地運行。本設(shè)計在中斷服務(wù)例程中,首先判斷中斷是否自己設(shè)備產(chǎn)生的,如果是,則調(diào)用一個在DISPATCH_LEV—EL級別上運行的延遲過程調(diào)用(DPC)。當(dāng)中斷服務(wù)例程完成后,一旦處理器獲得DISPATH_LEVEI。運行權(quán),就會運行DPC。中斷服務(wù)例程流程圖如3所示。

3.3 中斷延遲調(diào)用例程

在延遲調(diào)用例程中,判斷中斷原因如果是DMA中斷就啟動DMA繼續(xù)發(fā)送。如果是發(fā)送通道中斷,則判斷通道號,并把相應(yīng)軟件FIFO里面的待發(fā)送數(shù)據(jù)傳送到硬件FIFO里。在此過程中需要檢查在將軟件FIFO中的數(shù)據(jù)寫入硬件FIFO中后,如果軟件FIFO已被讀空,則應(yīng)禁止通道中斷,否則通道中斷因為優(yōu)先級高,會一直于有效狀態(tài),導(dǎo)致系統(tǒng)死鎖。而在用戶程序?qū)戃浖﨔IFO的處理函數(shù)中,檢查通道中斷,如果被禁止,則應(yīng)將新寫入軟件FIFO的數(shù)據(jù)讀取一部分寫入硬件FIFO中,然后開啟通道中斷。

3.4應(yīng)用程序與驅(qū)動程序的通信例程

DeviceControl(KIrp I)主要用于應(yīng)用程序與驅(qū)動程序之間的通信,如向硬件讀寫數(shù)據(jù)以及軟件FIFO的操作等。DevcieControl響應(yīng)用戶應(yīng)用程序DeviceloControl()發(fā)送的IRP,根據(jù)IOCTL代碼來判斷調(diào)用子處理函數(shù)PCI_9054_IOCTL_READ_Handler(I),PCI_9054_IOCTL_WRITE_Handler(I).DEV_IOCTL_TXI_FIFO_WRITE_Handler(I)分別完成對硬件的讀寫和軟件FIFO的寫操作。

3.5 DMA傳輸操作

硬件FIFO半滿時產(chǎn)生通道中斷,在DPC里,判斷是通道中斷,則初始化KDmaTransfer,然后調(diào)用OnD-maReady();在OnDmaReady()中啟動首次DMA傳輸,傳輸時發(fā)生中斷,在DPC中判斷是否DMA中斷,如果是,則調(diào)用Continue()再次啟動下次傳輸,至此全總數(shù)據(jù)傳輸完成。其流程圖如圖4所示。

4 驅(qū)動程序編譯、調(diào)試和安裝

當(dāng)驅(qū)動程序編寫完成后,必須在DDK環(huán)境下進行編譯,執(zhí)行Rebuild aIl命令,編譯完成后生成*.sys文件和*.inf文件。調(diào)試工具使用Softlce,基本過程如下:

(1)使用Symbol Loader加載驅(qū)動程序*.nms文件,然后激活Softlee,設(shè)置斷點跟蹤調(diào)試;

(2)用Genint命令產(chǎn)生虛擬中斷測試,中斷服務(wù)例程;

(3)根據(jù)需要測試其他功能。驅(qū)動程序的安裝需要對DriverWizard生成的.INF文件進行修改,安裝就是根據(jù)INF文件的信息,把編譯好的驅(qū)動程序拷貝到特定的目錄,并修改注冊表來注冊該驅(qū)動程序的參數(shù)。

5 結(jié) 語

本文編寫的驅(qū)動程序在以前的驅(qū)動程序基礎(chǔ)上,在驅(qū)動程序里增加一個相當(dāng)于二級緩存的軟件FIFO;有效地提高了數(shù)據(jù)的響應(yīng)速度,從而實現(xiàn)更高的數(shù)據(jù)發(fā)送速率;解決了以前在遙測數(shù)據(jù)發(fā)送碼速率較高情況下,出現(xiàn)數(shù)據(jù)幀不連續(xù)導(dǎo)致數(shù)據(jù)接收碼同步死鎖的現(xiàn)象。本文的驅(qū)動程序已成功的應(yīng)用于所開發(fā)的PCM高速遙測數(shù)據(jù)發(fā)送卡,與同期開發(fā)的PCM遙測數(shù)據(jù)接收卡進行長時間的聯(lián)接調(diào)試。實踐證明他們可以在10 Mb/s的碼速率上可靠工作,而無死鎖或數(shù)據(jù)幀丟失現(xiàn)象。

主站蜘蛛池模板: 免费观看无遮挡www的小视频| 国产免费网址| 国产性爱网站| 欧美日韩在线亚洲国产人| 亚洲午夜18| 久久精品无码国产一区二区三区| 国产成人精品在线1区| 91尤物国产尤物福利在线| 国产成本人片免费a∨短片| 国产美女无遮挡免费视频| 国产菊爆视频在线观看| 青草视频网站在线观看| 国产免费看久久久| 亚洲综合在线最大成人| 欧美色亚洲| 亚洲精品老司机| 免费aa毛片| 午夜视频在线观看免费网站| 亚洲成人在线网| 97成人在线观看| 人妻少妇乱子伦精品无码专区毛片| 国产乱人视频免费观看| 四虎AV麻豆| 一级毛片免费播放视频| 亚洲大尺度在线| 亚洲欧美一区二区三区麻豆| 日韩一级二级三级| 免费久久一级欧美特大黄| 久久精品国产999大香线焦| 麻豆a级片| 国产99欧美精品久久精品久久| 国产福利一区视频| 91www在线观看| 国产精品无码影视久久久久久久 | 91精品视频网站| 伊大人香蕉久久网欧美| 国产最新无码专区在线| 九九免费观看全部免费视频| 国产精品亚欧美一区二区| 视频一区视频二区中文精品| 亚洲成a∧人片在线观看无码| 久久精品人妻中文系列| 伊人国产无码高清视频| 国产精品内射视频| 欧美日韩久久综合| 欧美日韩理论| 在线视频亚洲色图| 亚洲av无码片一区二区三区| 亚洲精品久综合蜜| 日韩资源站| 成人欧美日韩| 青青网在线国产| 国产欧美日韩视频怡春院| 亚洲美女一区二区三区| 91久久国产综合精品女同我| 国产精品55夜色66夜色| 亚洲欧美日韩精品专区| 欧美成人在线免费| 伊人欧美在线| 69av在线| 91无码视频在线观看| 一本大道视频精品人妻| 日韩欧美成人高清在线观看| 色综合五月| 人妻精品久久无码区| 国产成人亚洲欧美激情| 久久这里只有精品免费| 无码一区二区波多野结衣播放搜索| 亚洲精品无码av中文字幕| 免费观看欧美性一级| 欧美日韩午夜| 福利姬国产精品一区在线| 真实国产乱子伦视频| 一本大道AV人久久综合| 2021国产精品自产拍在线观看 | 国产手机在线ΑⅤ片无码观看| 亚洲人成网站观看在线观看| 国产精品免费久久久久影院无码| 国产精品熟女亚洲AV麻豆| 国产丝袜丝视频在线观看| 成人午夜网址| 久久青草免费91线频观看不卡|