新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PCI9052接口芯片的配置及驅動程序開發

        PCI9052接口芯片的配置及驅動程序開發

        作者: 時間:2012-03-21 來源:網絡 收藏

        2.1 在操作系統體系結構中的位置

        操作系統結構可分為五層模型:

        (1)用戶應用程序;

        (2)IO管理層;

        (3)

        (4)HAL(硬件抽象層);

        (5)硬件。

        圖2給出了Windows2000操作系統開發者所關心的特征,一般情況下,軟件要么在用戶模式中執行,要么在內核模式下執行。從驅動開發的角度上看,WDM模型為存在于Win-dows2000系統中的驅動程序提供了一個參考框架。作為Windows2000系統結構開發人員,由于操作系統為應用程序,而在驅動程序和硬件之間提供有系統服務接口和平臺相關操作,因此,設計時只需要關注應用程序和設備驅動程序的開發。

        2.2 設備資源

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

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

        2.3 WDM驅動程序對硬件資源的訪問

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

        用DriverStudio開發驅動程序時,可根據配置聲明KIoRange類、KMemoryRange類和KInterrupt類來實現對內存空間、I/O空間、中斷的操作。在本例中,基地址寄存器0和1固定用于芯片的操作寄存器內存映射地址和I/O映射地址,基地址寄存器2則用于雙口RAM的內存映射。通過一個外部引腳即可產生中斷。標識兩個KMem-oryRange類實例、一個KIoRange類實例和一個KInterrupt類實例的具體實現細節如下:

        (1) I/O端口的訪問

        I/O端口的訪問流程如圖3所示,應用程序通過API函數DeviceIoControl的調用,并調用驅動程序的分發例程DeviceControl,同時通過KIoRange類來實現對I/O映射空間的訪問。需要注意的是,當DeviceloControl異步調用的時候,必須在驅動程序中添加取消例程,并在DeviceControl例程中阻止一個應用程序對其的多次調用。KIoRange類的成員函數outb、inb、outw、inw、ind、outd可分別用于從端口讀或寫一個字節、字和雙字數據。在WDM中,對于I/O端口,系統可將其看成寄存器,一般用于數字傳輸量比較小的地方。在對PCI設備的訪問中,I/O端口的訪問通常比較頻繁。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 鄯善县| 吉安县| 抚州市| 米泉市| 都安| 阳谷县| 内乡县| 宜春市| 扎赉特旗| 九龙县| 萨嘎县| 尚义县| 莫力| 高陵县| 兴业县| 江门市| 宣城市| 伊川县| 德昌县| 怀柔区| 博乐市| 甘孜县| 峡江县| 海晏县| 眉山市| 榆社县| 汉源县| 田东县| 平陆县| 济宁市| 泸西县| 太保市| 嘉兴市| 尖扎县| 文安县| 固始县| 当阳市| 惠来县| 原阳县| 安远县| 高州市|