新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PCI總線語音卡及WDM驅動程序設計

        PCI總線語音卡及WDM驅動程序設計

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

        該驅動程序主要用DriverStudio 2.5加VC++ 6.0設計。DriverStudio對DDK進行封裝,利用向導可生成驅動程序框架。在此基礎上再添加針對處理的函數及語句即可完成設計,調試工具為SOFTICE。程序結構框圖如圖4所示。

        PCI2040.lib和PCI2040.dll處于Ring3層,它封裝了和底層驅動打交道的函數,對外只顯現出如Open_Device()、Close_Device(HANDLE hDevice)、Record(HANDLE hDevice,LPSTR FileName)、Play(HANDLE hDevice,LPSTR FileName)等API函數。這樣可以讓多種編程語言以DLL的形式來調用,給使用者提供了方便。

        核心編程是PCI2040.sys,它處于Ring0層,為Ring3層和PCI進行數據交換搭建了一個橋梁。驅動程序中主要模塊有:

        (1)OnStartDevice(),在這個例程里驅動程序將得到PnP管理器為所分配的硬件資源,包括HPI CSR基地址和HPI控制空間基地址,對PCI配置空間進行初始化。初始化中斷等。需要注意的是,在初始化中斷之前禁止卡向主機發中斷,因此應有屏蔽中斷的操作。

        (2)DeviceControl(),在這個例程中可以定制自己的函數來達到Ring3層和Ring0層相互通訊的目的。通過IOCTL_CODE可以區分不同的請求。例如:

        #define SEND_HEVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

        在DeviceControl()中,可執行如下語句:

        case SEND_HEVENT:

        status = SEND_HEVENT_Handler(I);//接收應用程序傳遞給WDM的事件句柄

        m_Irq.Connect(LinkTo(Isr_Irq), this); //連接中斷

        INT_MASK_SET_UL=(ULONG)0x80000001; //開相應中斷屏蔽位

        m_CtlMemoryRange.outw((ULONG)0x0000,0x0b0b);//清除中斷位,等待中斷到來

        break;

        把連接中斷的函數放在DeviceControl()里,并沒有和初始化中斷(在OnStartDevice()中)放在一起,不然會在Win2000里引起死機。

        DSP語音卡是基于中斷處理的,因此上面的程序就起了這樣一個作用:當語音卡向主機發中斷時,驅動程序就跳到Isr_Irq執行,并在DpcFor_Irq中將事件設置為信號態,從而通知上層應用程序進行處理。

        (3)Isr_Irq(),這個例程是用來處理中斷的。Windows 2000的中斷處理機制是假定多個設備可以共享一個硬件中斷。因此,Isr的首要工作就是找出哪一個設備發生了中斷。如果沒有,則應該立刻返回FALSE,以便HAL能把中斷送往其它設備驅動程序[5]。中斷服務例程Isr執行在提升的IRQL上,在DIRQL級別上運行的代碼需要盡可能快地運行。通常情況下,若判斷中斷是由自己的設備產生的,則調用一個在DISPATCH_LEVEL級別上運行的延遲過程調用(DpcFor_Irq)。

        在處理的過程中要注意,當確定是自己卡的中斷時,要馬上屏蔽中斷位防止中斷再進來,等到DpcFor_Irq的結尾處再開中斷。Dpc中部分語句如下:

        if(m_pEventToSignal!=NULL) m_pEventToSignal->Set() //將事件設置為信號態

        t ″Event Set!n″;

        INT_MASK_SET_UL=(ULONG)(0x80000001); //開中斷

        M_CtlMemoryRange.outw((ULONG)0x0000,0x0b0b);

        參考文獻

        1 陳立學,孫 彪,趙玉連. 微機總線與接口設計. 成都:電子科技大學出版社,1998

        2 PCI2040 PCI-DSP Bridge Controller Data Manual. Texas Instruments, 1999

        3 TMS320VC5410 Fiexed-Point Digital Signal Processor.Texas Instruments, 2000

        4 武安河,周莉莉.Windows設備驅動程序(VxD與WDM)開發實務.北京:電子工業出版社,2001

        5 Walter Oney.Programming the Microsoft Windows Driver Model.Microsoft Press,1999


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 商洛市| 天祝| 万载县| 安岳县| 当阳市| 宁强县| 城固县| 满洲里市| 许昌县| 枣庄市| 睢宁县| 太保市| 银川市| 石首市| 汪清县| 新营市| 祁东县| 墨江| 兴安县| 兴隆县| 姚安县| 扎鲁特旗| 紫金县| 成安县| 利辛县| 陕西省| 峨眉山市| 读书| 无为县| 巢湖市| 平邑县| 凤凰县| 增城市| 嵩明县| 岗巴县| 永宁县| 江津市| 永川市| 新乡市| 兰溪市| 镇宁|