VB環(huán)境下實(shí)現(xiàn)PCI設(shè)備底層訪問的兩種方法
發(fā)布時(shí)間:2007/8/29 0:00:00 訪問次數(shù):617
摘要:介紹了在VB開發(fā)環(huán)境下,對(duì)PCI設(shè)備進(jìn)行底層訪問的兩種方法:一種是通過用用戶自己編寫的動(dòng)態(tài)連接庫(DLL)實(shí)現(xiàn),二是利用WINDRIVER提供的VB運(yùn)行庫編寫直接訪問硬件接口函數(shù),并對(duì)兩種方法行了比較。
關(guān)鍵詞:WINDRIVER PCI 動(dòng)態(tài)連接庫 應(yīng)用程序接口
VB集成化編程語言一種功能強(qiáng)大而容易上手的開發(fā)工具,在用戶界面、數(shù)據(jù)庫、多媒體、網(wǎng)絡(luò)編程等方面,VB可謂得心應(yīng)手。然而VB有限的硬件編程能力以又使得許多硬件開發(fā)者對(duì)此深感無奈。尤其在工業(yè)控制,測(cè)控技術(shù)等領(lǐng)域,自行設(shè)計(jì)開發(fā)的I/O卡,數(shù)據(jù)采集卡等在WIN32下的驅(qū)動(dòng)常常需要借助DDK,VtooIsD等工具進(jìn)行艱苦而又長(zhǎng)期的內(nèi)核模式開發(fā)。本文介紹了在VB開發(fā)環(huán)境下訪問PCI設(shè)備的方法。對(duì)于其他設(shè)備,方法與此大同小異。
在VB開發(fā)環(huán)境下,用戶要訪問諸如數(shù)據(jù)采集卡之類硬件上的PCI設(shè)備,一般來說有兩種途徑:一是直接訪問,即用VB直接編寫訪問PCI設(shè)備的接口函數(shù)(這種方法要有相關(guān)軟件的支持);二是間接訪問,即VB調(diào)用其它編程語言(如匯編,C/C++等)寫的底層驅(qū)動(dòng)模塊(一般封裝成動(dòng)態(tài)連接庫DLL的形式)實(shí)現(xiàn)。
1 PCI總線的配置空間
PCI規(guī)范定義了三種地址空間,除了存儲(chǔ)器和I/O地址空間外,為支持PCI設(shè)備系統(tǒng)資源的自動(dòng)配置,還定義了配置地址空羊。
PCI總線的配置空間由256個(gè)字節(jié)組成,分為預(yù)定首區(qū)和設(shè)備關(guān)聯(lián)區(qū)。預(yù)定首區(qū)包括開始64個(gè)字節(jié),對(duì)所有的PCI設(shè)備來說,都必須支持該區(qū)的設(shè)置;設(shè)備關(guān)聯(lián)區(qū)的寄存器有不同的的PCI設(shè)備廠家自己定義。
配置空間的預(yù)定的首區(qū)分兩個(gè)部分,前16個(gè)字節(jié)的定義對(duì)各類PCI設(shè)備而言都是相同的,后48個(gè)字節(jié)空間根據(jù)設(shè)備支持的功能有不同的分配。首區(qū)類型定義了該空間的分配情況(目前只有一種類型00H)。表1是首區(qū)的組織結(jié)構(gòu)。
所有的PCI設(shè)備必須支持首區(qū)的供應(yīng)商ID、設(shè)備ID、指令和狀態(tài)區(qū)。對(duì)于其他寄存器的使用可根據(jù)設(shè)備的楞能來選擇。對(duì)于不同的PCI設(shè)備,其供應(yīng)商ID由PCI SIG分配以確保唯一性,而設(shè)備ID則由供應(yīng)商自己分配。
2 PCI設(shè)備的配置過程
PCI總線的配置空間規(guī)范保證了所有PCI設(shè)備對(duì)“即插即用”的支持。
系統(tǒng)在上電后,“即插即用”BIOS通過隔離算法讀取每一個(gè)“即插即用”設(shè)備的資源申請(qǐng)數(shù)據(jù),并分配相應(yīng)的系統(tǒng)資源,同時(shí)檢查資源的沖突情況,然后引導(dǎo)、加載操作系統(tǒng),并將控制權(quán)交給操作系統(tǒng);如果加載的是“即插即用”操作系統(tǒng)(WINDOWS 95及以后版本),那么操作系統(tǒng)將接管系統(tǒng)的資源管理權(quán),它首先從BIOS讀取“即插即用”設(shè)備的資源配置信息,并仲載資源沖突情況,然后配置BIOS尚未配置的“即插即用”設(shè)備,將設(shè)備的配置信息寫入配置管理器,最后激活無資源沖突的“即插即用”設(shè)備,裝載相應(yīng)的設(shè)備驅(qū)動(dòng)程序。
對(duì)于PCI設(shè)備來說,系統(tǒng)完成引導(dǎo)之后,除了將資源的分配寫入系統(tǒng)的配置管理器外,還寫入了相應(yīng)的PCI配置寄存器。程序可以通過直接讀取設(shè)備的配置寄存器來得到設(shè)備的I/O,存儲(chǔ)器等資源配置情況。
3 VB下PCI設(shè)備的訪問
驅(qū)動(dòng)程序訪問PCI設(shè)備的過程一般包括掃描PCI總線,相找指定的PCI設(shè)備,確定I/O等資源分配情況,進(jìn)行I/O、存儲(chǔ)器、中斷以及DMA等操作。VB本身并不能實(shí)現(xiàn)上述對(duì)PCI設(shè)備的訪問過程,下面介紹在VB下通過其他途徑實(shí)現(xiàn)對(duì)PCI設(shè)備的訪問。
3.1 VB直接訪問
WINDRIVER為VB只提供了非常有限的I
摘要:介紹了在VB開發(fā)環(huán)境下,對(duì)PCI設(shè)備進(jìn)行底層訪問的兩種方法:一種是通過用用戶自己編寫的動(dòng)態(tài)連接庫(DLL)實(shí)現(xiàn),二是利用WINDRIVER提供的VB運(yùn)行庫編寫直接訪問硬件接口函數(shù),并對(duì)兩種方法行了比較。
關(guān)鍵詞:WINDRIVER PCI 動(dòng)態(tài)連接庫 應(yīng)用程序接口
VB集成化編程語言一種功能強(qiáng)大而容易上手的開發(fā)工具,在用戶界面、數(shù)據(jù)庫、多媒體、網(wǎng)絡(luò)編程等方面,VB可謂得心應(yīng)手。然而VB有限的硬件編程能力以又使得許多硬件開發(fā)者對(duì)此深感無奈。尤其在工業(yè)控制,測(cè)控技術(shù)等領(lǐng)域,自行設(shè)計(jì)開發(fā)的I/O卡,數(shù)據(jù)采集卡等在WIN32下的驅(qū)動(dòng)常常需要借助DDK,VtooIsD等工具進(jìn)行艱苦而又長(zhǎng)期的內(nèi)核模式開發(fā)。本文介紹了在VB開發(fā)環(huán)境下訪問PCI設(shè)備的方法。對(duì)于其他設(shè)備,方法與此大同小異。
在VB開發(fā)環(huán)境下,用戶要訪問諸如數(shù)據(jù)采集卡之類硬件上的PCI設(shè)備,一般來說有兩種途徑:一是直接訪問,即用VB直接編寫訪問PCI設(shè)備的接口函數(shù)(這種方法要有相關(guān)軟件的支持);二是間接訪問,即VB調(diào)用其它編程語言(如匯編,C/C++等)寫的底層驅(qū)動(dòng)模塊(一般封裝成動(dòng)態(tài)連接庫DLL的形式)實(shí)現(xiàn)。
1 PCI總線的配置空間
PCI規(guī)范定義了三種地址空間,除了存儲(chǔ)器和I/O地址空間外,為支持PCI設(shè)備系統(tǒng)資源的自動(dòng)配置,還定義了配置地址空羊。
PCI總線的配置空間由256個(gè)字節(jié)組成,分為預(yù)定首區(qū)和設(shè)備關(guān)聯(lián)區(qū)。預(yù)定首區(qū)包括開始64個(gè)字節(jié),對(duì)所有的PCI設(shè)備來說,都必須支持該區(qū)的設(shè)置;設(shè)備關(guān)聯(lián)區(qū)的寄存器有不同的的PCI設(shè)備廠家自己定義。
配置空間的預(yù)定的首區(qū)分兩個(gè)部分,前16個(gè)字節(jié)的定義對(duì)各類PCI設(shè)備而言都是相同的,后48個(gè)字節(jié)空間根據(jù)設(shè)備支持的功能有不同的分配。首區(qū)類型定義了該空間的分配情況(目前只有一種類型00H)。表1是首區(qū)的組織結(jié)構(gòu)。
所有的PCI設(shè)備必須支持首區(qū)的供應(yīng)商ID、設(shè)備ID、指令和狀態(tài)區(qū)。對(duì)于其他寄存器的使用可根據(jù)設(shè)備的楞能來選擇。對(duì)于不同的PCI設(shè)備,其供應(yīng)商ID由PCI SIG分配以確保唯一性,而設(shè)備ID則由供應(yīng)商自己分配。
2 PCI設(shè)備的配置過程
PCI總線的配置空間規(guī)范保證了所有PCI設(shè)備對(duì)“即插即用”的支持。
系統(tǒng)在上電后,“即插即用”BIOS通過隔離算法讀取每一個(gè)“即插即用”設(shè)備的資源申請(qǐng)數(shù)據(jù),并分配相應(yīng)的系統(tǒng)資源,同時(shí)檢查資源的沖突情況,然后引導(dǎo)、加載操作系統(tǒng),并將控制權(quán)交給操作系統(tǒng);如果加載的是“即插即用”操作系統(tǒng)(WINDOWS 95及以后版本),那么操作系統(tǒng)將接管系統(tǒng)的資源管理權(quán),它首先從BIOS讀取“即插即用”設(shè)備的資源配置信息,并仲載資源沖突情況,然后配置BIOS尚未配置的“即插即用”設(shè)備,將設(shè)備的配置信息寫入配置管理器,最后激活無資源沖突的“即插即用”設(shè)備,裝載相應(yīng)的設(shè)備驅(qū)動(dòng)程序。
對(duì)于PCI設(shè)備來說,系統(tǒng)完成引導(dǎo)之后,除了將資源的分配寫入系統(tǒng)的配置管理器外,還寫入了相應(yīng)的PCI配置寄存器。程序可以通過直接讀取設(shè)備的配置寄存器來得到設(shè)備的I/O,存儲(chǔ)器等資源配置情況。
3 VB下PCI設(shè)備的訪問
驅(qū)動(dòng)程序訪問PCI設(shè)備的過程一般包括掃描PCI總線,相找指定的PCI設(shè)備,確定I/O等資源分配情況,進(jìn)行I/O、存儲(chǔ)器、中斷以及DMA等操作。VB本身并不能實(shí)現(xiàn)上述對(duì)PCI設(shè)備的訪問過程,下面介紹在VB下通過其他途徑實(shí)現(xiàn)對(duì)PCI設(shè)備的訪問。
3.1 VB直接訪問
WINDRIVER為VB只提供了非常有限的I
熱門點(diǎn)擊
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- 超低功耗角度位置傳感器參數(shù)技術(shù)
- 四路輸出 DC/DC 降壓電源
- 降壓變換器和升降壓變換器優(yōu)特點(diǎn)
- 業(yè)界首創(chuàng)可在線編程電源模塊 m
- 可編程門陣列 (FPGA)智能 電源解決方案
- 高效先進(jìn)封裝工藝
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究