国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于DSP 的PCI 設備Windows 驅動程序設計

2020-10-13 08:58:48楊再明崔恒武曹洪龍
現代計算機 2020年25期
關鍵詞:采集卡驅動程序內核

楊再明,崔恒武,曹洪龍

(1.92001 部隊,青島266000;2.蘇州大學電子信息學院,蘇州215006)

0 引言

在現代航空航天和航海領域,通常需要同時監(jiān)測多個信號并根據各個信號的狀態(tài)和時序進行工作狀態(tài)監(jiān)測,從而為整體系統(tǒng)正常運轉提供保障。例如,采用便攜式多路開關量信號檢測儀同時對多路電磁繼電器通斷信號進行檢測,很好的解決了多路開關量信號的并行實時檢測和計時問題[1]。在這類儀器設計中主要采用上位機+下位機的系統(tǒng)模式,其中上位機通常采用Windows 系統(tǒng)的計算機,下位機為定制的信號采集板卡,考慮通信速率和實時性要求上位機和下位機采用PCI 協議通信的方式被廣泛應用。該系統(tǒng)的軟件開發(fā)主要分為上位機Windows 應用程序開發(fā)、下位機嵌入式軟件開發(fā)和Windows 驅動開發(fā)三部分。對于Win?dows XP 或Windows 7 系統(tǒng),微軟公司(Microsoft)提供Windows 驅動程序開發(fā)包WDK(Windows Driver Kit)簡化了Windows 驅動程序開發(fā)過程,可用于開發(fā)支持即插即用功能的WDM(Windows Driver Mode)驅動程序,實現上位機Windows 應用程序基于PCI 協議通過驅動訪問下位機的功能[2-4]。

1 基于DSP的信號采集PCI設備

1.1 系統(tǒng)架構

為滿足信號采集、處理等功能的實時性要求,數字信號處理器(DSP,Digital Signal Processor)被廣泛應用在實時數字信號處理領域,TI TMS320C54x DSP 憑借其低功耗、高性價比的優(yōu)點在信號采集PCI 設備領域廣泛應用。圖1 是基于TMS320C54x DSP 的信號采集PCI 設備系統(tǒng)架構框圖,主要由上位機和下位機兩部分組成,上位機和下位機PCI 協議進行通信,實現信號采集、實時分析、處理、存儲和顯示等功能。其中下位機為信號采集卡,其核心處理器可以選用TMS320C54x DSP,主要完成信號采集、實時分析處理。由于TMS320C54x DSP 本身不支持PCI 協議,需要協議轉換芯片PCI2040 實現DSP 的HPI 接口與上位機(計算機)的PCI 接口之間相互轉換。信號采集卡采用PCI金手指方式插入上位機主板上的PCI 插槽實現上位機和下位機的互聯互通。

如圖1 所示,上位機運行Windows 系統(tǒng),具有可擴展性,支持新的硬件。為確保Windows 系統(tǒng)的健壯性和可靠性,Windows 系統(tǒng)從總體上分為內核模式和用戶模式。Windows 系統(tǒng)內核工作在內核模式,可以訪問底層硬件(訪問物理映射內存、設備端口等),因此要增加新硬件則必須增加Windows 內核內容,模塊化的驅動程序相當于Windows 內核的“積木”件,通過安裝驅動程序可以實現Windows 內核對新硬件(例如圖1的信號采集卡)的操作訪問。用戶應用程序(本例中為信號采集應用程序)工作在用戶模式,無法直接訪問底層硬件(本例為PCI 型的信號采集卡),需要安裝驅動后通過驅動實現訪問。

圖1 基于DSP的信號采集PCI設備系統(tǒng)架構框圖

1.2 驅動程序的工作方案

由圖1 可見信號采集卡驅動程序在整個系統(tǒng)中起到聯通作用,實現了運行在Windows 系統(tǒng)下的應用程序與信號采集卡(PCI 插卡)之間的通信,其具體的工作方案如圖2 所示。在系統(tǒng)上電后驅動受限對其進行枚舉識別,上位機用戶應用程序啟動后通過驅動可以查詢有效的信號采集卡并獲得訪問句柄。由于TI TMS320C54x DSP 內部沒有可固化用戶DSP 程序的存儲器,從節(jié)約成本和低功耗方面考慮選用HPI 自舉模式由上位機在啟用信號采集卡時灌DSP 程序,因此圖2 驅動工作方案中主要分為初始化信號采集卡和數據采集2 部分。

當上位機用戶應用程序要采集數據時,必須先通過驅動灌DSP 程序到信號采集卡。驅動在接收到灌DSP 程序的信息后,首先通過控制DSP 復位管腳電平觸發(fā)DSP 硬件復位中斷,通過查詢DSP 復位管腳電平來確認信號采集卡是否成功進入HPI 自舉模式;確認DSP 進入HPI 自舉模式后,驅動通知上位機用戶程序可以灌DSP 程序,并在接收到DSP 程序自舉列表后按地址加載到DSP 的程序空間和數據空間;信號采集卡HPI 自舉成功后將運行加載的DSP 程序采用中斷方式通知驅動,驅動處理中斷事務通過讀取信號采集卡工作狀態(tài)確認其初始化是否成功,記錄且同時通知上位機用戶應用程序。

用戶應用程序接收到驅動通知確認信號采集卡正常工作后,可以發(fā)送采集命令通過驅動通知信號采集卡開啟采集功能。為提高信號采集、處理和顯示、存儲的實時性,用戶應用程序將啟用事件(Event)監(jiān)聽線程,通過WaitForSingleObject 函數或WaitForMultipleOb?jects 函數監(jiān)聽與驅動共享的Event 狀態(tài)實現實時處理;PCI 驅動程序在接收到采集命令后,通過中斷服務函數(ISR)實時響應信號采集卡向驅動發(fā)送的中斷,利用內核函數KeInitializeDpc 啟用延遲過程調用例程(DPC)搬移數據提高ISR 響應的實時性;信號采集卡連續(xù)采集信號,且每完成一幀信號采集、分析、處理將發(fā)送中斷通知驅動搬移數據。當驅動接收到停止采集命令后,通知信號采集卡停止數據采集進入低功耗狀態(tài)。

圖2 PCI驅動程序工作方案

2 基于WDM的PCI設備Windows驅動設計

2.1 基于WDM的Windows驅動程序基本框架

PCI 設備一般選用WDM(Windows Driver Mode)驅動程序類型支持即插即用,其入口函數為DriverEntry函數。Windows 內核中的I/O 管理器調用DriverEntry函數并通過形參pDO 傳入驅動對象,形參RegistryPath為驅動在注冊表中的鍵值[5],具體示例代碼如下。代碼中用Extern"C"修飾DriverEntry 函數是為了指示編譯器該函數按C 語言的方式進行編譯。

●AddDevice 回調函數,本例設置Pci2040AddDe?vice 為回調函數,主要負責創(chuàng)建設備對象、初始化設備擴展數據結構、創(chuàng)建符號鏈接和初始化DPC 處理函數,等等。

●DriverUnload 回調函數,本例設置Pci2040Un?load 為回調函數,即注冊卸載例程,但在WDM 中卸載處理工作一般放在PNP 相關的回調函數中處理。

●IRP(I/O Request Packet)派遣函數,Windows 系統(tǒng)中I/O 管理器是用戶模式和內核模式之間通信的橋梁,即工作在用戶模式的應用程序發(fā)出I/O 請求時,由I/O 管理器捕獲并轉化為IRP 請求發(fā)送給驅動,驅動即調用對應的派遣函數進行處理。表1 中列出了一些主要IRP 派遣函數。

表1 WDM 驅動主要的IRP 回調函數

2.2 PCI設備驅動程序設計

開發(fā)基于WDM 的PCI 驅動程序主要是在WDM框架上實現IRP 派遣函數,實現應用程序、驅動和采集卡之間的相互通信。其中,應用程序可以通過Creat?File、ReadFile、WriteFile、DeviceIoCtrol 等函數與驅動程序進行交互,其對應的IRP 類型見表1。實現PCI 設備驅動程序的難點是驅動程序與采集卡之間的交互,重點是資源訪問操作和中斷處理,這需要在了解板卡硬件原理圖的基礎上實現。

以圖1 為例,驅動對設備的訪問相當于借助PCI2040 芯片轉換進行HPI 訪問,訪問HPI 映射的物理存儲空間需要調用內核函數READE_REGIS?TER_ULONG 和WRITE_REGISTER_ULONG 該系列函數,主要通過控制C54x DSP 的管腳狀態(tài)實現表2 所示4 種模式的HPI 寄存器訪問操作,進而封裝成對HPI映射的物理存儲空間的4 種訪問方法[6]。

●DspMemReadNoInc 驅動函數,功能是讀取指定C54x DSP 的RAM 地址的1 個16 位數據,具體操作方法是采用表2 中模式2 先向HPIA 寄存器寫入地址,然后采用表2 中的模式3 讀取HPID 的數據。

●DspMemWriteNoInc 驅動函數,功能是向C54x DSP 的RAM 地址寫入1 個數據,具體操作方法是采用表2 中模式2 先向HPIA 寄存器寫入地址,然后采用表2 中的模式3 向HPID 寫入數據。

●DspMemReadInc 驅動函數,功能是讀取指定C54x DSP 的RAM 地址的連續(xù)N(N≥1)個16 位數據,具體操作方法是采用表2 中模式1 先向HPIA 寄存器寫入地址,然后采用表2 中的模式1 連續(xù)執(zhí)行N 次HPID 讀操作,可以讀取從HPIA 中的地址開始的連續(xù)N 個16 位數據。

●DspMemWriteInc 驅動函數,功能是向C54x DSP的RAM 地址連續(xù)寫入N(N≥1)個16 位數據,具體操作方法是采用表2 中模式1 先向HPIA 寄存器寫入初始地址(目標地址-1),然后采用表2 中的模式1 連續(xù)執(zhí)行N 次HPID 寫操作,實現以目標地址為起始地址連續(xù)寫入N 個16 位數據。

表2 C54x DSP HPI 訪問方式

此外,可以通過調用內核函數WRITE_REGIS?TER_ULONG 該系列函數運用表2 中的工作模式0 向HPIC 寄存器寫入數據,實現驅動觸發(fā)DSP 的主機中斷、配置HPI 通信方式等功能。

采集卡亦可以發(fā)送中斷信號,WDM 驅動程序采用如下步驟處理中斷事件:

(1)在IRP_MJ_PNP 的派遣函數Pci2040Pnp 中處理次級的IRP_MN_START_DEVICE 類型時,調用內核函數IoConnectInterrupt 將中斷注冊到系統(tǒng),并指定中斷服務函數(例如OnInterrupt)。

(2)自定義中斷服務函數(例如OnInterrupt)實時處理中斷,主要方法是讀取中斷標志,清除中斷標志位,根據讀取到的中斷標志進行相應的處理。

(3)由于中斷服務程序運行在高的設備中斷請求級(DIRQL),執(zhí)行時間不易過長,因此通常代碼量盡量少,必要情況將不重要的代碼放置DPC 函數中執(zhí)行。DPC 函數運行在在相對較低的DISPATCH_LEVEL 級別,調用方法是在中斷服務函數中利用內核函數IoRe?questDpc 調用在AddDevice 回調函數中初始化的DPC函數處理。

2.3 基于WDK的驅動實現

微軟提供Windows 驅動開發(fā)套件(WDK,Windows Driver Kit),包括了WDM 驅動開發(fā)工具、例程和幫助文檔,可用于用戶開發(fā)Windows 驅動程序,其官方提供的最新版本為7.1,安裝后可以編譯鏈接C 源程序生成驅動。利用WDK 生成驅動程序的步驟如下:

(1)編寫MAKEFILE 文件(無擴展名),內容固定不變,詳細內容見WDK 例程。

(2)編寫Sources 文件(無擴展名),定義驅動名稱、類型和源程序文件,例如:

注意:MAKEFILE、Sources 和源程序文件在同一文件夾下。

(1)在開始菜單的“所有程序”中選擇WDK 下的“Build Environments”,選擇操作系統(tǒng)版本(例如Win?dows XP)下X86 Checked Build Environment 快捷方式進入命令行形式的工具窗口。

(2)利用CD 命令進入Sources 等文件所在目錄(英文路徑),然后執(zhí)行build 命令,若無誤將生成驅動程序pci2040Examples.sys。

3 PCI設備驅動測試程序

采用VC++開發(fā)測試程序如圖3 所示,基于DSP的信號采集PCI 設備實現了對多路開關量信號的采集和狀態(tài)變化判斷。設計的驅動使Windows 系統(tǒng)可以識別該設備,并為測試程序提供了對該設備的讀、寫和中斷響應等接口。設計圖3 所示測試程序時,主要采用以下方法:

圖3 基于DSP的信號采集PCI設備測試程序界面

●利用Windows API 函數SetupDiGetClassDevs 對該PCI 設備進行枚舉。

●利用Windows API 函數DeviceIoControl 發(fā)起IRP 與驅動交互。

●利用Windows API 函數ReadFile 和WriteHan?dle 函數與驅動交互。

●開啟獨立線程采用Windows API 函數WaitForS?ingleObject 或WaitForMultipleObjects 接收驅動發(fā)送的事件中斷,提高上位機的響應實時性。

4 結語

本文給出了基于WDM 的Windows 驅動程序設計方法,以基于DSP 的信號采集PCI 設備為例主要介紹了WDM 驅動程序設計框架、PCI 驅動程序設計過程和基于WDK 的驅動程序生成方法,并給出了進行開關量信號采集的PCI 設備測試程序實例,為開發(fā)基于WDM的PCI 驅動程序提供了參考。

猜你喜歡
采集卡驅動程序內核
萬物皆可IP的時代,我們當夯實的IP內核是什么?
現代裝飾(2022年4期)2022-08-31 01:41:24
高精度AD采集卡性能測試及評價方法研究
中國測試(2022年2期)2022-03-19 09:57:30
強化『高新』內核 打造農業(yè)『硅谷』
基于嵌入式Linux內核的自恢復設計
Linux內核mmap保護機制研究
面向數控機床的多通道傳感數據采集卡設計
并行高速采樣在地震物理模擬采集中的應用
PCI-e高速數據采集卡的驅動與上位機軟件設計
電子器件(2015年5期)2015-12-29 08:43:12
驅動程序更新與推薦
驅動程序更新與推薦
鸡泽县| 信宜市| 伊吾县| 增城市| 临安市| 凭祥市| 拜泉县| 武汉市| 日喀则市| 洞头县| 禹州市| 聂荣县| 海宁市| 资兴市| 邹城市| 北流市| 杨浦区| 房产| 太保市| 小金县| 苍山县| 沭阳县| 涿鹿县| 广宁县| 福建省| 嘉黎县| 绥滨县| 堆龙德庆县| 苍梧县| 明水县| 香格里拉县| 安丘市| 隆安县| 来宾市| 大渡口区| 舒兰市| 清丰县| 乐昌市| 宜城市| 东海县| 武安市|