新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PCI9052接口芯片的配置及驅(qū)動(dòng)程序開(kāi)發(fā)

PCI9052接口芯片的配置及驅(qū)動(dòng)程序開(kāi)發(fā)

作者: 時(shí)間:2012-03-21 來(lái)源:網(wǎng)絡(luò) 收藏

(2) 內(nèi)存的訪問(wèn)

在基于DriverStudio開(kāi)發(fā)的中,向存儲(chǔ)器空間讀寫(xiě)大量數(shù)據(jù)一般選用Write/Read函數(shù),但對(duì)于一個(gè)實(shí)際存在的物理設(shè)備的訪問(wèn),在某一時(shí)刻只能進(jìn)行一個(gè)操作,因而在訪問(wèn)內(nèi)存對(duì)象的時(shí)候,一般都要求一個(gè)IRP排隊(duì)的隊(duì)列,可通過(guò)設(shè)備類(lèi)的成員函數(shù)QueueIrp將IRP插入隊(duì)列。DriverWorks提供有KDeviceQueue類(lèi),其成員函數(shù)StartIo用于處理設(shè)備對(duì)象的IRP隊(duì)列。具體的操作是通過(guò)KMemoryRange類(lèi)來(lái)實(shí)現(xiàn)對(duì)設(shè)備內(nèi)存映射空間的訪問(wèn)。其訪問(wèn)流程見(jiàn)圖4所示。需要注意的是,當(dāng)IRP隊(duì)列為空時(shí),調(diào)用QueueIrp時(shí),系統(tǒng)將同步調(diào)用StartIo函數(shù)。

(3) 中斷處理

的中斷處理編程涉及到內(nèi)核機(jī)制比較多的一種,因而相對(duì)復(fù)雜。首先用中斷服務(wù)程序提升系統(tǒng)的IRQL,但不能進(jìn)行大多數(shù)有用的內(nèi)核調(diào)用。另外,提升IRQL運(yùn)行代碼需要盡可能快地運(yùn)行。所以,中斷處理一般和在DIS-PATCH_LEVEL級(jí)運(yùn)行的延遲調(diào)用(DPC)例程相配合可解決以上兩個(gè)問(wèn)題。在DriverWorks中,通常通過(guò)KInterrupt類(lèi)和KDeferredCall類(lèi)來(lái)實(shí)現(xiàn),并通過(guò)向?qū)?lái)在中斷服務(wù)例程和DPC中增加功能代碼。KDeferredCall類(lèi)封裝有DPC的操作。KInter-rupt類(lèi)用于實(shí)現(xiàn)硬件中斷的處理,其成員函數(shù)包括中斷初始化,以及將一個(gè)中斷服務(wù)例程連接到另一個(gè)中斷和解除其連接等。在中斷服務(wù)例程中把IRP交給DPC例程,可在DPC處理完后結(jié)束該IRP。需要注意的是,中斷服務(wù)例程不是KInter-rupt類(lèi)的成員函數(shù),它的主要作用是減少中斷延遲時(shí)間。

3 結(jié)束語(yǔ)

本文主要從訪問(wèn)設(shè)備硬件資源的角度介紹了PCI配置空間的配置和驅(qū)動(dòng)程序的開(kāi)發(fā)方法。利用該方法可對(duì)PCI板卡的配置空間和所需的硬件資源進(jìn)行正確設(shè)置,然后通過(guò)DriverStudio的驅(qū)動(dòng)程序向?qū)晒ぞ咴诔绦蚩蚣芾锾砑舆m當(dāng)?shù)拇a,最后借助于DriverStudio開(kāi)發(fā)包提供的調(diào)試工具SoftICE和DriverMonitor以及由Wizard產(chǎn)生的控制臺(tái)應(yīng)用程序,來(lái)快速開(kāi)發(fā)出基于PCI總線的設(shè)備驅(qū)動(dòng)程序。


上一頁(yè) 1 2 3 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉