国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時間:2010-6-19 18:56    發(fā)布者:zealot
關(guān)鍵詞: PCI9052 , 接口芯片 , 驅(qū)動程序
如果把PC機作為控制系統(tǒng)的操作平臺,PCI總線作為一種先進(jìn)的高性能32/64位局部總線正迅速取代原來的ISA總線的主導(dǎo)地位,以用于高速外設(shè),并成為微型計算機系統(tǒng)的主流系統(tǒng),因而也成為工程開發(fā)人員用于工業(yè)控制的首選。為了縮短開發(fā)周期,一般都采用專用的接口器件。本文就是采用PLX公司的PCI9052來把PCI總線上的操作轉(zhuǎn)換為對局部總線的操作,同時通過雙口RAM實現(xiàn)和下位機的存儲轉(zhuǎn)接。針對一般PCI總線開發(fā)時由于軟硬件分離使開發(fā)的軟硬件不能很好結(jié)合的現(xiàn)象,本文結(jié)合實例介紹了應(yīng)用程序并給出了如何通過DriverStudio開發(fā)的PCI設(shè)備驅(qū)動程序來訪問PCI設(shè)備卡硬件資源的具體程序。

1 PCI的配置空間及其配置

PCI總線支持存儲器地址空間、I/O地址空間和配置空間等三個物理空間。其中,配置空間是PCI總線所特有的一個空間,PCI總線能實現(xiàn)即插即用的功能,正是通過它特有的配置空間來實現(xiàn)的。PCI配置空間的大小為256字節(jié),分為頭標(biāo)區(qū)和設(shè)備有關(guān)區(qū)。直接影響設(shè)備特性的配置寄存器在頭標(biāo)區(qū),其他部分則因設(shè)備而異。PCI總線的配置空間通常與PCI接口芯片相關(guān)。該配置空間包括一系列的PCI配置寄存器。本文采用的PCI9052芯片的配置寄存器分為PCI配置寄存器和局部配置寄存器,二者都可以由PCI總線和串行EEPROM訪問。

在PCI配置寄存器中的設(shè)備ID、制造商ID、版本號、首區(qū)類代碼、類別代碼、指令寄存器和狀態(tài)寄存器等寄存器在所有的PCI設(shè)備中都必須實現(xiàn),具體設(shè)置可參考文獻(xiàn)[1]。通常情況下,操作系統(tǒng)可使用這些寄存器的內(nèi)容來決定該PCI設(shè)備的加載其驅(qū)動程序。

PCI總線最重要的功能之一是通過基地址寄存器和局部配置寄存器在地址空間重定位PCI設(shè)備。系統(tǒng)上電時,通過上層應(yīng)用軟件能判斷系統(tǒng)中存在那些設(shè)備,并建立協(xié)調(diào)的地址映射。所以,基地址寄存器和局部配置寄存器是實現(xiàn)驅(qū)動程序的關(guān)鍵。

PCI配置寄存器提供有6個基地址寄存器(BASE0~BASE5)這些基地址都是系統(tǒng)中的物理地址,其中BASE0和BASE1是用來訪問局部配置寄存器的基地址,BASE0是映射到內(nèi)存的基地址,BASE1是映射到I/O的基地址,可用于通過內(nèi)存和I/O來訪問局部配置寄存器。這兩個基地址可固定用于PCI9052芯片的寄存器操作。

通過BASE2~BASE5四個空間最多可以訪問局部端所接的4個芯片,實現(xiàn)4個局部地址空間(局部空間0~3)的PCI總線訪問。PCI總線對局部端所接芯片的局部地址映射是通過4個寄存器組(PCI基地址寄存器,局部范圍寄存器,局部基地址寄存器,局部總線區(qū)域描述符)來實現(xiàn)的。這個組定義了每個空間以及相應(yīng)局部空間的特性。它們將局部端的芯片通過局部端地址(在局部配置寄存器中設(shè)置)翻譯成PCI總線地址,也就是將本地的芯片映射到系統(tǒng)的內(nèi)存或I/O口。而片選信號寄存器則是用來選定這些局部端所接的芯片的。這樣,用程序操作這一段內(nèi)存(或I/O)實際上就是對本地芯片的操作。其映射關(guān)系如圖1所示。這些寄存器的內(nèi)容必須在芯片復(fù)位時通過串行E2PROM進(jìn)行加載,而正確配置E2PROM的內(nèi)容則是使用PCI9052的關(guān)鍵。


本設(shè)計選取LAS0(Local Address Space 0)來訪問局部端的雙口RAM芯片中的2 KB尋址空間,與其有關(guān)的寄存器有四個:LAS0范圍寄存器、LAS0局部基址寄存器、LAS0局部總線區(qū)域描述符和片選0基址寄存器。LAS0范圍寄存器規(guī)定了地址空間的大小。由于需要2 KB的內(nèi)存空間,而計算機預(yù)留了32 KB空間(即8000H),所以其寄存器值為0xFFFF8000H,而類型則是不可預(yù)取的;LAS0局部基地址寄存器定義了設(shè)備卡資源上所占用的基地址,它的最終目的是將這個基地址重新映射到PCI地址空間。由于基地址必須是32KB的整數(shù)倍,因此,為方便起見,可以將基地址定為00000000H,又由于位0為空間使能位,所以,寄存器的值為00000001H;LAS0局部總線區(qū)域描述符用來定義地址空間0的具體工作特性。

該總線采用16位總線寬度,工作方式定義為不使能突發(fā)和不預(yù)取,因此,該寄存器的數(shù)值初步確定為4043A1C0H,最終的值則需要不斷測試才能確定;片選0基址寄存器使用PCI9052的CS0#作為雙口RAM的片選信號,CS0#片選信號的起始地址和地址范圍由片選0基址寄存器設(shè)置,局部總線的容量是2 KB,第11位為1,基地址是該范圍的16倍,一般將倍數(shù)放置在范圍位之后,所以寄存器值設(shè)置為0xO008401。當(dāng)從局部空間0基址開始的2 KB空間范圍落在CS0基地址寄存器所設(shè)置的范圍內(nèi),CS0端有效,這種方式可減少地址譯碼得到的片選邏輯。

用PLX9052可將PCI總線上的操作轉(zhuǎn)換為對局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對局部端芯片訪問。如果系統(tǒng)分配給本卡的存儲空間為FFFF0000H~FFFF7FFFFH。那么,當(dāng)系統(tǒng)通過PCI總線訪問這個區(qū)域時,PLX9052就會應(yīng)答,并將其轉(zhuǎn)換為局部地址0x0000H~0x07FFH,另外,PLX9052自身也有一些內(nèi)部寄存器,它們被自動映射到另一片內(nèi)存區(qū)域,可通過PCI總線直接訪問。

PCI9052提供了兩種類型的中斷源(硬件中斷和軟件中斷)。中斷可通過PCI9052中斷控制/狀態(tài)寄存器來(INTCSR)允許和禁止。PCI9052通過2個局部中斷引腳來實現(xiàn)硬件中斷,它們支持邊緣和電平觸發(fā)中斷,可以通過對INTCSR寄存器的編程來實現(xiàn)局部中斷,然后產(chǎn)生PCI中斷(INTA),并生成PCI中斷INTA#方式。PCI9052可以軟件方式產(chǎn)生中斷,設(shè)計時只需要將INTCSR寄存器的軟件中斷位設(shè)置為1即可。

2 驅(qū)動程序的開發(fā)

在開發(fā)PCI板卡功能驅(qū)動程序之前,首先要明白所需的PCI硬件資源,并針對設(shè)備卡的硬件資源來處理PCI設(shè)備的內(nèi)存、端口的讀寫,以及中斷處理,從而實現(xiàn)PCI設(shè)備功能。

2.1 驅(qū)動程序在操作系統(tǒng)體系結(jié)構(gòu)中的位置

操作系統(tǒng)結(jié)構(gòu)可分為五層模型:

(1)用戶應(yīng)用程序;
(2)IO管理層;
(3)驅(qū)動程序;
(4)HAL(硬件抽象層);
(5)硬件。

圖2給出了Windows2000操作系統(tǒng)驅(qū)動程序開發(fā)者所關(guān)心的特征,一般情況下,軟件要么在用戶模式中執(zhí)行,要么在內(nèi)核模式下執(zhí)行。從驅(qū)動開發(fā)的角度上看,WDM模型為存在于Win-dows2000系統(tǒng)中的驅(qū)動程序提供了一個參考框架。作為Windows2000系統(tǒng)結(jié)構(gòu)開發(fā)人員,由于操作系統(tǒng)為應(yīng)用程序,而在驅(qū)動程序和硬件之間提供有系統(tǒng)服務(wù)接口和平臺相關(guān)操作,因此,設(shè)計時只需要關(guān)注應(yīng)用程序和設(shè)備驅(qū)動程序的開發(fā)。


2.2 設(shè)備資源

PCI設(shè)備的硬件資源分配與管理是驅(qū)動程序很重要的部分,設(shè)備的硬件資源包括內(nèi)存空間、I/O空間和中斷。由于PCI總線為PnP總線,PCI設(shè)備的硬件資源是由PCI配置機構(gòu)動態(tài)分配給PCI配置寄存器的,因此,驅(qū)動程序首先需要取得這些資源才能操作硬件。當(dāng)PnP管理器檢測到PCI設(shè)備時,系統(tǒng)就會發(fā)送IRP_MN_START_DEVICE的IRP給驅(qū)動程序,驅(qū)動程序調(diào)用OnStartDevice以啟動例程處理,并在啟動例程里獲取該IRP棧,同時把它包含的系統(tǒng)分配給該設(shè)備的資源信息。

用DriverStudio開發(fā)驅(qū)動程序時,應(yīng)在Wizard中設(shè)置好PCI設(shè)備的資源。對于實際的PCI9052設(shè)備卡,其基地址寄存器0和1分別固定用于PCI9052局部寄存器的內(nèi)存映射地址和I/O映射地址,基地址寄存器2則用于設(shè)備卡的內(nèi)存映射地址,并使用局部中斷引腳來產(chǎn)生PCI中斷,以分別生成對應(yīng)的KIoRange類、KMemoryRange類和KInterrupt類。這些配置信息由配置管理器發(fā)送到OnStartDevice中重載該成員函數(shù),而開發(fā)者則不必再處理。在一般情況下,驅(qū)動程序無需再訪問PCI設(shè)備的配置空間,如果需要訪問,則可通過類KPciConfiguration,該類包含了通過向PCI總線發(fā)送瀆寫配置空間的IRP操作。也可定義類KRe-sourceAssignment來獲取PCI的端口地址和中斷號以及內(nèi)存地址和大小,并把得到的資源放在用戶自己定義的變量中。

2.3 WDM驅(qū)動程序?qū)τ布Y源的訪問

獲取設(shè)備的硬件資源以后,就可以對硬件資源進(jìn)行訪問了。對硬件的訪問一般包括I/O端口訪問和內(nèi)存訪問,它們分別對應(yīng)PCI配置空間的I/O空間和內(nèi)存空間。從圖2可以看出,當(dāng)應(yīng)用程序需要訪問設(shè)備時,它就會調(diào)用Win32API函數(shù)(如ReadFile)。Win32子系統(tǒng)模塊通過調(diào)用平臺相關(guān)的系統(tǒng)服務(wù)接口實現(xiàn)該API,而平臺相關(guān)的系統(tǒng)服務(wù)則調(diào)用內(nèi)核模式來支持例程。即在調(diào)用ReadFile函數(shù)時,首先到達(dá)系統(tǒng)的人口點,然后調(diào)用系統(tǒng)服務(wù)接口,最后由系統(tǒng)調(diào)用內(nèi)核模式的服務(wù)例程。執(zhí)行時首先檢查傳遞給它們的參數(shù),然后創(chuàng)建一個“I/O請求包(IRP)”的數(shù)據(jù)結(jié)構(gòu),并把這個數(shù)據(jù)結(jié)構(gòu)送到某個驅(qū)動程序的入口點執(zhí)行IRP設(shè)備驅(qū)動程序,最后再訪問硬件。對于PIO方式的設(shè)備,一個IRP_MJ_READ操作將直接讀取設(shè)備的端口或設(shè)備的內(nèi)存寄存器。一般會使用硬件抽象層(HAL)來訪問硬件。IRP貫穿于驅(qū)動程序之間,它在應(yīng)用程序、驅(qū)動程序和設(shè)備之間起著橋梁作用,可稱之為內(nèi)核態(tài)的“消息”。驅(qū)動程序完成一個I/O操作后,可通過調(diào)用一個特殊內(nèi)核模式服務(wù)例程來完成該IRP,完成操作時再處理IRP的最后工作,以它使等待的應(yīng)用程序恢復(fù)運行。

用DriverStudio開發(fā)驅(qū)動程序時,可根據(jù)配置聲明KIoRange類、KMemoryRange類和KInterrupt類來實現(xiàn)對內(nèi)存空間、I/O空間、中斷的操作。在本例中,基地址寄存器0和1固定用于PCI9052芯片的操作寄存器內(nèi)存映射地址和I/O映射地址,基地址寄存器2則用于雙口RAM的內(nèi)存映射。通過一個外部引腳即可產(chǎn)生中斷。標(biāo)識兩個KMem-oryRange類實例、一個KIoRange類實例和一個KInterrupt類實例的具體實現(xiàn)細(xì)節(jié)如下:

(1) I/O端口的訪問

I/O端口的訪問流程如圖3所示,應(yīng)用程序通過API函數(shù)DeviceIoControl的調(diào)用,并調(diào)用驅(qū)動程序的分發(fā)例程DeviceControl,同時通過KIoRange類來實現(xiàn)對I/O映射空間的訪問。需要注意的是,當(dāng)DeviceloControl異步調(diào)用的時候,必須在驅(qū)動程序中添加取消例程,并在DeviceControl例程中阻止一個應(yīng)用程序?qū)ζ涞亩啻握{(diào)用。KIoRange類的成員函數(shù)outb、inb、outw、inw、ind、outd可分別用于從端口讀或?qū)懸粋字節(jié)、字和雙字?jǐn)?shù)據(jù)。在WDM中,對于I/O端口,系統(tǒng)可將其看成寄存器,一般用于數(shù)字傳輸量比較小的地方。在對PCI設(shè)備的訪問中,I/O端口的訪問通常比較頻繁。


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

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


(3) 中斷處理

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

3 結(jié)束語

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

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99亚洲精品| 亚州免费一级毛片| 亚洲欧美日韩综合在线| 亚洲国产毛片| 亚洲国产精品综合欧美| 一本dvd一卡一区| 韩国无遮羞禁动漫在线观看96| 亚洲 日本 天堂 国产 在线| 亚洲伊人色一综合网| 天天天夜夜夜| 亚洲男gay同性同志| 国产免费高清mv视频在线观看| 亚洲成人日韩| 天堂成人在线观看| 亚洲国产99在线精品一区二区| 一个人免费观看高清视频| 狠狠色狠狠色综合| 最新国产在线视频| 青青青草视频在线观看| 双子母性本能在线观看| 99热在线精品免费全部my| 日本六九视频| 欧美日韩网| 午夜一区二区三区| 一级毛片国产真人永久在线| 九九黄色大片| 欧美成人精品福利在线视频| 情不自禁完整版在线观看免费| 色色色色网站| adc影院欢迎您大驾光临入口| 日韩精品亚洲专区在线电影不卡| 亚洲精品xxxx| 图片区亚洲| 一级一级一片免费高清| 巨乳中文无码亚洲| 亚洲ts人妖网站| 色噜噜狠狠色综合中文字幕| 亚裔成人女星vixen| 国产精品久久久久影院色老大| 亚洲天堂一区二区三区| 日本三级一区二区|