新聞中心

EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 一種64位高速PCI總線接口的設(shè)計(jì)與實(shí)現(xiàn)

一種64位高速PCI總線接口的設(shè)計(jì)與實(shí)現(xiàn)

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


3 設(shè)備驅(qū)動(dòng)開發(fā)
在Windows環(huán)境下開發(fā)設(shè)備驅(qū)動(dòng)程序主要有兩種模型,即WinDriver和WDM。本使用了WDM驅(qū)動(dòng)模型。開發(fā)設(shè)備驅(qū)動(dòng)程序WDM需要處理:硬件訪問(wèn)、中斷處理和DMA傳輸3方面問(wèn)題。
3.1 硬件訪問(wèn)
X86處理器有兩種獨(dú)立的映射空間:I/O空間和內(nèi)存空間,I/O空間只能通過(guò)I/O指令來(lái)訪問(wèn),KIoRange類封裝了對(duì)I/O空間的操作命令。對(duì)于設(shè)備,可以通過(guò)實(shí)例化KIoRange類來(lái)對(duì)I/O空間進(jìn)行相應(yīng)的操作。
對(duì)于PCI設(shè)備可以使用KMemoryRange類對(duì)內(nèi)存進(jìn)行相應(yīng)操作,具體操作與KIoRange類對(duì)I/O空間的操作相似。
3.2 中斷處理
驅(qū)動(dòng)程序使用KInterrupt類來(lái)對(duì)中斷操作的處理,其中包括中斷的初始化、將一個(gè)中斷服務(wù)例程連接到一個(gè)中斷和解除其連接等。
中斷服務(wù)例程不是KInterrupt類的成員函數(shù),這是為了減少中斷延遲時(shí)間。中斷處理需要中斷服務(wù)例程和延遲過(guò)程調(diào)用例程,在中斷服務(wù)例程中,首先判斷該中斷是否是自己設(shè)備產(chǎn)生的,若不是,則返回False;若是,則請(qǐng)求一個(gè)延遲過(guò)程調(diào)用例程(DPC)。
3.3 DMA傳輸
PCI9656使用DMA方式進(jìn)行數(shù)據(jù)傳輸。DMA傳輸需要3個(gè)類:KDmaAdapter,KDmaTransfer和KCommonDmaBuffer。其中,KDmaAdapter類用于建立一個(gè)DMA適配器,它說(shuō)明了DMA通道的特性,如寬度,單次傳輸最大個(gè)數(shù)等,需要注意的是本設(shè)備使用的是64位寬度,因此需要特別指出;KDmaTransfer類用于DMA傳輸控制,如傳輸開始、傳輸字節(jié)數(shù)等;KCommonDmaBuffer類用于申請(qǐng)系統(tǒng)提供的公共緩沖區(qū)。具體DMA傳輸設(shè)置如下
b.jpg

本文引用地址:http://2s4d.com/article/156552.htm



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉