基于USB的LDT實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
2.2 驅(qū)動(dòng)程序設(shè)計(jì)
USB系統(tǒng)驅(qū)動(dòng)程序采用分層驅(qū)動(dòng)模型:USB設(shè)備驅(qū)動(dòng)程序、USB函數(shù)層。其中函數(shù)層由通用串行總線驅(qū)動(dòng)程序模塊(USBD)和主控制器驅(qū)動(dòng)程序模塊(HCD)組成。它由Windows98提供,負(fù)責(zé)管理USB設(shè)備驅(qū)動(dòng)程序和USB控制器之間的通信;加載及卸載USB驅(qū)動(dòng)程序;與USB設(shè)備通用端點(diǎn)建立通信來(lái)執(zhí)行設(shè)備配置、數(shù)據(jù)與USB協(xié)議框架和打包格式的雙向轉(zhuǎn)換任務(wù)。
USB設(shè)備驅(qū)動(dòng)程序是開(kāi)發(fā)USB外設(shè)的一個(gè)關(guān)鍵,它的設(shè)計(jì)是基于WDM(Win-dows Driver Model,Windows驅(qū)動(dòng)程序模型)。目前,Win-dows98提供了多種USB設(shè)備驅(qū)動(dòng)程序,但并不針對(duì)實(shí)時(shí)數(shù)據(jù)采集設(shè)備,需要Win-dows98/NT/2000 DDK開(kāi)發(fā)包和SoftICE等調(diào)試工具?! ∷捎?個(gè)模塊實(shí)現(xiàn):初始化模塊、即插即用管理模塊、電源管理模塊以及I/O功能實(shí)現(xiàn)模塊。
初始化模塊提供一個(gè)Driver Entry入口函數(shù),來(lái)對(duì)所有的I/O請(qǐng)求包IRP(I/ORequest Packet)處理例程作定義。電源管理模塊負(fù)責(zé)設(shè)備的掛起與喚醒。
當(dāng)USB設(shè)備上電時(shí),主機(jī)會(huì)向USB控制器發(fā)送獲得設(shè)備描述的命令,設(shè)備描述符是一個(gè)固定長(zhǎng)度為18字節(jié)的數(shù)字序列,反映了該USB設(shè)備的基本屬性。當(dāng)USB控制器從USB總線檢測(cè)到這一命令時(shí),USB控制器以中斷方式將此請(qǐng)求通知到TMS320F240。TMS320F240通過(guò)訪問(wèn)USB控制器的控制寄存器和數(shù)據(jù)寄存器,獲得各種參數(shù),向主機(jī)返回配置所包含的所有接口和接口所包含的所有端點(diǎn)的描述符。主機(jī)獲得后,設(shè)備與主機(jī)的“握手”就初步完成了。
即插即用管理模塊實(shí)現(xiàn)USB設(shè)備的熱插拔及動(dòng)態(tài)配置。當(dāng)硬件檢測(cè)到USB設(shè)備接入時(shí),Win-dows98查找相應(yīng)的驅(qū)動(dòng)程序,并調(diào)用它的Driver En-try例程,即插即用管理器調(diào)用驅(qū)動(dòng)程序的Add De-vice例程,告訴它添加了一個(gè)設(shè)備;然后,驅(qū)動(dòng)程序?yàn)閁SB設(shè)備建立一個(gè)FDO(功能設(shè)備對(duì)象),在此處理工程中,驅(qū)動(dòng)程序收到一個(gè)IRP-MN-START-DE-VICE的IRP,包括設(shè)備分配的資源信息。至此,設(shè)備被正確設(shè)置,驅(qū)動(dòng)程序開(kāi)始與硬件對(duì)話。當(dāng)然,設(shè)備運(yùn)行過(guò)程中,如果設(shè)備的狀態(tài)發(fā)生變化(暫停、拔出等),即插即用管理器也同樣發(fā)出相應(yīng)的IRP,由驅(qū)動(dòng)程序進(jìn)行相應(yīng)的處理。
I/O功能實(shí)現(xiàn)模塊完成I/O請(qǐng)求的大部分工作。當(dāng)應(yīng)用程序提出I/O請(qǐng)求時(shí),它調(diào)用Win32 API函數(shù)DeviceIoControl來(lái)向設(shè)備發(fā)出命令。然后,由I/O管理器構(gòu)造一個(gè)IRP,并設(shè)置其MajorFunction域?yàn)镮RP-MJ-DEVICE-CONTROL。USB設(shè)備驅(qū)動(dòng)程序收到該IRP后,根據(jù)其中的控制碼,構(gòu)造相應(yīng)的USB請(qǐng)求塊,并把它放到一個(gè)新的IRP,此IRP被傳遞到USBD模塊。USBD模塊根據(jù)此IRP執(zhí)行相應(yīng)的操作,并把結(jié)果通過(guò)IRP返回給USB功能驅(qū)動(dòng)程序。USB功能驅(qū)動(dòng)程序接到此IRP后,將操作結(jié)果再通過(guò)IRP返回給I/O管理器。并由I/O管理器將結(jié)果最終返回給應(yīng)用程序,至此,對(duì)USB設(shè)備的一次I/O操作完成。
2.3 應(yīng)用程序設(shè)計(jì)
PC主機(jī)是實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的中心,其基本功能有開(kāi)啟或閉合USB設(shè)備、檢測(cè)USB設(shè)備、設(shè)置USB數(shù)據(jù)傳輸管道、設(shè)置A/D狀態(tài)和數(shù)據(jù)采集端口、實(shí)時(shí)從USB接口采集數(shù)據(jù)、顯示數(shù)據(jù)。
此外,具有數(shù)據(jù)分析功能包括數(shù)字濾波模塊、線性化處理模塊、解調(diào)模塊、PLL鎖相環(huán)倍頻模塊、標(biāo)度變換模塊、與下位機(jī)的通信模塊、下位機(jī)的控制字生成模塊和數(shù)據(jù)庫(kù)的管理模塊等幾個(gè)部分。
3 結(jié)束語(yǔ)
為了提高設(shè)計(jì)質(zhì)量,所設(shè)計(jì)的激光多普勒測(cè)量實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)通過(guò)了測(cè)試USB外設(shè)功能的一系列軟件如Bwqlinst,USBComp等,完成了高精度數(shù)據(jù)采集和高速數(shù)據(jù)傳送。
評(píng)論