PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計_第1頁
PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計_第2頁
PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計_第3頁
PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計_第4頁
PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

PCI總線電機控制卡的WDM設(shè)備驅(qū)動程序設(shè)計:作者:王磊,朱齊丹,王亮 轉(zhuǎn)貼自:INTERNET 點擊數(shù):288 更新時間:2005-8-8文章錄入:Admin]【字體:土】?拈要:結(jié)合基于PCI總線的精密電機運動控制卡,介紹了PCI設(shè)備的WDM設(shè)備驅(qū)動程序的設(shè)計過程,PCI設(shè)備的獲得,I/O端口的讀寫,內(nèi)存的讀寫以及中斷的處理,和設(shè)備驅(qū)動程序的安裝。關(guān)鍵詞:PCI總線;WDM1引言微型計算機界以INTEL公司為主推出了PCI總線規(guī)范。采用PCI總線設(shè)備所具有的配置空間以及PCI總線通過橋接電路與CPU相連的技術(shù)使PCI總線具有廣泛的適應(yīng)性,并且PCI總線采用寬字節(jié)和高達(dá)33Mb的時鐘頻率的猝發(fā)和主控方式傳輸能滿足高速設(shè)備的要求。在WINDOWS操作系統(tǒng)下,開發(fā)PCI設(shè)備的驅(qū)動程序最好的方案是WDM驅(qū)動程序。在一個系統(tǒng)中開發(fā)出WDM ?.1...2WINDOWS驅(qū)動程序模型WDMWDM(WINDOWSDriverProgramModel)是一個模塊化的、分層次類型的微型驅(qū)動程序結(jié)構(gòu),它是編寫設(shè)備驅(qū)動程序的主要模型。設(shè)備驅(qū)動程序是提供連接到計算機的硬件的軟件接口,它是操作系統(tǒng)的一部分,用戶應(yīng)用程序以一種規(guī)范的方式訪問硬件,而不必考慮必須如何控制硬件。在WINDOWS中,驅(qū)動程序總是使設(shè)備看起來像是一個文件,可以打開設(shè)備的一個句柄,然后應(yīng)用程序可以在設(shè)備句柄最后關(guān)閉之前向驅(qū)動程序發(fā)出讀寫請求。WDM是在WindowsNT驅(qū)動程序體系的基礎(chǔ)上發(fā)展而來的,修改或增加了即插即用、電源管理等功能,使之適應(yīng)硬件和用戶的要求。PCI總線是一種高性能、與CPU無關(guān)的32/64位地址數(shù)據(jù)復(fù)用的總線,它支持突發(fā)傳輸、即插即用、電源管理等功能,不但能滿足現(xiàn)在的應(yīng)用需要,而且能夠適應(yīng)未來的需求。PCI總線支持硬件資源動態(tài)自動配置,以支持即插即用。在PCI設(shè)備插入PCI插槽或上電后,PCI總線配置機構(gòu)自動根據(jù)PCI設(shè)備的要求實現(xiàn)配置。PCI總線支持內(nèi)存讀寫、I/O端口讀寫、中斷機制和DMA功能。由于這些硬件特點使PCI設(shè)備的WDM驅(qū)動程序的設(shè)計變得很復(fù)雜。在開發(fā)WDM驅(qū)動程序之前,還有必須掌握PCI設(shè)備的需要分配的資源等配置信息以及PCI設(shè)備的功能和操作方法。在WDM中,采用了分層的驅(qū)動程序體系結(jié)構(gòu),總線驅(qū)動程序或類驅(qū)動程序在最底層直接與設(shè)備打交道,設(shè)備功能驅(qū)動程序在上層通過與低層驅(qū)動程序打交道,實現(xiàn)設(shè)備的功能,中間還可以有類過濾驅(qū)動程序或設(shè)備過濾驅(qū)動程序用于數(shù)據(jù)的過濾或轉(zhuǎn)換。在PCI總線的驅(qū)動程序?qū)又校鋵哟螆D如圖1*刖&的心以備的功呷蝦J墮序和過漕腥挪.郁|I:您坦捷平濁尊助程|I:星-CI整備過濾驅(qū)動-FTpci諛益由膺中ftlEM?f謎備芯理北曲程序per忌線過胡驛動程甲pc4嫉洛動陽市圈!謝用總線的"歸驅(qū)動程序棧在PCI設(shè)備的WDM驅(qū)動程序中,一般是編寫功能驅(qū)動程序。PCI總線驅(qū)動程序由操作系統(tǒng)實現(xiàn),過濾驅(qū)動程序一般在特殊的情況下需要編寫。因此本文只討論PCI設(shè)備功能驅(qū)動程序的設(shè)計。在PCI設(shè)備功能驅(qū)動程序中,需要處理PCI設(shè)備的內(nèi)存、端口的讀寫、中斷處理和DMA數(shù)據(jù)傳輸,實現(xiàn)PCI設(shè)備的功能,因此,PCI設(shè)備功能驅(qū)動程序是很標(biāo)準(zhǔn)的WDMi.■-3PCI設(shè)備資源的獲得及內(nèi)存、I/O讀寫PCI設(shè)備的硬件資源是由PCI配置機構(gòu)動態(tài)分配的,由PCI設(shè)備實現(xiàn)PCI配置寄存器,提出需要分配的硬件資源,由PCI配置機構(gòu)分配資源。驅(qū)動程序需要取得這些資源,才能操作硬件。因此,PCI設(shè)備的硬件資源分配與管理是驅(qū)動程序中很重要的部分。硬件資源主要包括映射內(nèi)存空間、I/O空間、中斷。當(dāng)系統(tǒng)的PNP管理器在取得設(shè)備的資源后會自動向驅(qū)動程序發(fā)出IRP_MN_START_DEVICE的IRP,在該IRP棧中包含了設(shè)備的資源信息。好的驅(qū)動程序都應(yīng)該使用這種方法,每個支持PNP功能的驅(qū)動程序,都應(yīng)實現(xiàn)IRP_MN_START_DEVICE處理。在該IRP處理中應(yīng)先交給低層驅(qū)動程序處理后,再根據(jù)IRP棧內(nèi)內(nèi)容進行資源分配。在PCI設(shè)備的驅(qū)動程序中,獲得的設(shè)備內(nèi)存是一段映射物理內(nèi)存,這是無法使用的,需要將其映射成系統(tǒng)可以訪問的非分頁內(nèi)存。函數(shù)MmMapIoSpace完""廿—PVTNH I糧眥渦山ng[XLUN^iTik^W^INXt^ImWUNHM王參數(shù)PhysicalAddress為物理地址;NumberOfBytes為地址的數(shù)量;CacheEnable為內(nèi)存是否可以隱藏,取值可為MmNonCached,MmCached,MmWriteCombined,這里必須取為MmNonCached。例如讀町巾個內(nèi)ff的地址:WRflEREGISIERLlliARURtHAlU】由>孫北邸.OkOHOs在PC上,I/O空間是一個64K字節(jié)的尋址空間。I/O端口的尋址方式與內(nèi)存是不一樣的。但是在WDM驅(qū)動程序中,對其處理與內(nèi)存是一樣的,把其看作寄存器,映射為設(shè)備內(nèi)存。其映射方法和訪問函數(shù)的用法與內(nèi)存資源一樣,只不過函數(shù)XXXREGISTERXXX改為XXXPORTXXX4中斷的處理在PCI總線中,很多設(shè)備共享一個中斷,這就需要在中斷處理函數(shù)要格外小心,處理不當(dāng),就會導(dǎo)致系統(tǒng)崩潰。驅(qū)動程序首先要在IRPMNSTARTDEVICE中獲得中斷資源,然后需要連接到中斷處理函數(shù)中,使其當(dāng)有中斷請求時,進入中斷服務(wù)例程。連接中斷的函數(shù)為IoConnectInterrupt,具體用法見上段程序中的“中斷資源”部分。十分需要注意的是在連接中斷之前,一定要確定PCI設(shè)備不會產(chǎn)生中斷請求,最好在PCI設(shè)備上電后,中斷為屏蔽狀態(tài)。在連接中斷后,調(diào)用開啟中斷請求的函數(shù)需要同步處理,以防在函數(shù)的執(zhí)行中,出現(xiàn)運行時間上的錯誤,而且在開啟中斷時,一定要在所有的硬件資源分配以后,否則如果有中斷產(chǎn)生,系統(tǒng)就會立即調(diào)用中斷處理例程,如果例程中使用了還沒有分配的資源,就會出現(xiàn)意想不到的結(jié)果。在中斷服務(wù)例程中,相應(yīng)的處理最好簡潔快速,因為中斷例程運行的級別很高,當(dāng)有中斷請求時,不但會打斷應(yīng)用程序的執(zhí)行,而且會打斷在硬件中斷級以下的所有運行程序。在WDM中,提供了DPC(DeferredProcedureCall)例程,將在中斷例程中耗時的但不需要立即處理的任務(wù)延時處理。比如,驅(qū)動程序接受應(yīng)用程序的寫PCI設(shè)備的數(shù)據(jù),當(dāng)寫完后,硬件產(chǎn)生中斷標(biāo)志執(zhí)行完畢,這時需要結(jié)束該IRP,就可以將結(jié)束IRP這個耗時的任務(wù)交給DPC完成。在該實例中,由應(yīng)用程序調(diào)用函數(shù)WriteFile,將數(shù)據(jù)傳遞給驅(qū)動程序,驅(qū)動程序的DispatchWrite例程負(fù)責(zé)處理該IRP,在該例程中,由于需要中斷的配合,假定無法立即執(zhí)行完畢,必須將IRP串行化,StartIo例程如果沒有其他任務(wù),就開始處理該IRP,處理完畢后立即返回,但不能結(jié)束IRP,當(dāng)PCI設(shè)備完成操作后,就會產(chǎn)生中斷,在中斷服務(wù)例程中把IRP交給DPC,在DPC中處理完后結(jié)束該IRP5驅(qū)動程序的安裝與應(yīng)用Windows98和Windows2000是依*INF文件來得到硬件設(shè)備驅(qū)動程序的安裝信息的一個設(shè)備信息文件(INF)。只要將文件中雙引號中的提示改為相應(yīng)的內(nèi)容即可生成我們自己的設(shè)備信息文件。[Strings]ProviderName=“yourcompanynamehere"http://公司名稱MfgName=“NameofHWmanufacturerhere"http://硬件制造商名稱DeviceDesc=“Descriptionofdevicehere"http://設(shè)備描述DeviceClassName=“Descriptionofdeviceclasshere"http://設(shè)備類的描述當(dāng)系統(tǒng)加電時,WINDOWS操作系統(tǒng)會自動檢測所有外設(shè),當(dāng)?shù)谝淮螜z測到我們的設(shè)備時系統(tǒng)會提示用戶指定新硬件的驅(qū)動程序。根據(jù)提示指定了我們修改過的INF文件,以及編譯后生成的.sys系統(tǒng)文件系統(tǒng)就自動安裝好了新硬件的驅(qū)動程序?;蛘呖梢杂每刂泼姘逯械奶砑有掠布硭阉餍掠布?。驅(qū)動程序安裝好以后,在應(yīng)用程序中就可以像打開其他驅(qū)動程序(如虛擬設(shè)備驅(qū)動程序VxD)一樣用CreateFile?.?:|?6基于PCI總線的電機運動控制卡圖2為該系統(tǒng)硬件組成框圖,該控制卡采用PCI總線實現(xiàn)主計算機與控制卡之間的信息傳遞??刂瓶ㄉ嫌?個伺服控制專用芯片LM628,分別用于控制伺服電機;來自2個伺服電機的增量式碼盤輸入信號(A相、B相和Z脈沖),經(jīng)電平變換后分別送入LM628經(jīng)四倍頻和計數(shù)后作為反饋信號,由LM628根據(jù)主計算機給定的位置、速度、加速度生成梯形軌跡速度曲線作為給定值,實現(xiàn)伺服電機的反饋控制。主計算機對該控制器發(fā)送命令,伺服控制器即按給定的運動形式輸出相應(yīng)的數(shù)字信號,本卡中LM628工作于8位工作方式,產(chǎn)生輸出到功率放大器件。應(yīng)用PCI總線目標(biāo)接口芯片PCI9052完成控制卡的接口部分,專用運動控制處理芯片LM628完成對電機的控制,再加上相應(yīng)的電路,即實現(xiàn)了基于PCI上..:…、.::7結(jié)束語WDM用一個相對獨立的模塊來處理設(shè)備數(shù)據(jù)的傳輸,驅(qū)動程序在這個模塊中啟動或停止設(shè)備,并實現(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論