基于PCI總線模塊的多路串行數據采集系統
同步串行通信對時鐘的同步要求非常嚴格,設計時應該注意收/發兩方必須使用同一時鐘來控制數據的傳輸。另外,PCI_T32內存讀寫分為單周期模式和突發模式。突發模式即在給出首地址后主設備連續讀寫多個數據,這在FPGA中需要用戶端地址每周期自動增1的操作。
3 系統軟件開發
3.1 驅動程序
PCI設備的硬件資源由Windows操作系統根據PC機中所有設備對資源的占有來統一分配。為了保證系統的安全和穩定性,在Windows2000及其后的微軟操作系統中,運行在ring3層的用戶應用程序無法直接訪問硬件,而必須通過運行于ring0層的設備驅動程序來訪問。設備驅動不僅要實現對硬件的操作,還要為用戶應用程序提供專用的API函數庫,以方便用戶實現對硬件的操作訪問。
Windows XP操作系統下的驅動程序一般是基于WDM(Windows Driver Model)模型開發的。該模型中的上層應用程序通過調用Win32 API函數發出對設備的訪問請求,I/O管理器則根據這個請求構造合適的IRP(I/O Request Packet,I/O請求包),并將其傳給設備驅動程序,接著由驅動程序直接訪問硬件完成IRP處理,最后由I/O管理器把數據和結構返回給應用程序。
WDM驅動比較常用的有以下三種方法:
第一種是直接使用Windows DDK(Device
Driver Kit,驅動程序開發包)開發的驅動程序面向Windows內核,該方法工作穩定,效率更高。但必須精通Windows內部體系結構及設備驅動程序的體系結構等,因此開發難度較大。
第二種是使用DriverStudio。此工具軟件已經做了很多基礎性工作,也進行了一些封裝。
第三種是使用WinDriver,使用該方法時,開發者只需要在用戶模式下編寫程序來調用它提供的通用驅動即可。其中Drvier Wizard可以進行硬件診斷和自動代碼生成。另外還可以將對速度要求較高的模塊插入內核運行來獲取更好的性能。本系統即采用WinDriver開發方法。
3.2 WinDriver中的重要函數
利用WinDriver開發驅動程序通常有兩種方法:第一種是利用Driver Wizard生成的代碼進行修改;第二種是直接利用WinDriver提供的API函數來編寫自己的程序。本系統即采用這種方法,開發時首先要注意包含所有相關的頭文件。其基本驅動程序的結構及API函數如下:

3.3 中斷實現
PCI總線的通信方式有查詢和中斷兩種方式。查詢方式實現簡單,但是難以適應實時性要求較高的場合,而且上位機軟件資源占用率過大
評論