《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應用 > 基于VxWorks的PCI總線多功能數(shù)據(jù)采集卡驅(qū)動開發(fā)
基于VxWorks的PCI總線多功能數(shù)據(jù)采集卡驅(qū)動開發(fā)
現(xiàn)代電子技術(shù)
張 原,鄒程帥,張 帥,宋 鵬
摘要: VxWorks是WindRiver(風河)公司開發(fā)的嵌入式實時操作系統(tǒng)(RTOS),由于它的高實時性,所以廣泛地應用于軍事、工業(yè)控制、通信等領(lǐng)域;分析了Vxworks下PCI總線多功能數(shù)據(jù)采集卡的實現(xiàn)方法;以ADLINK的PCI7396數(shù)據(jù)采集卡為例,介紹PCI總線設(shè)備的配置空間,包括它的結(jié)構(gòu)及訪問方法,重點介紹PCI總線設(shè)備在VxWorks下驅(qū)動程序的開發(fā)步驟及編程要點,并對開發(fā)過程中的關(guān)鍵部分給予代碼說明;在某綜合控制系統(tǒng)中,開發(fā)的驅(qū)動程序運行穩(wěn)定、可
Abstract:
Key words :

VxWorks是一種高性能的嵌入式實時操作系統(tǒng)(RTOS),它由WindRiver公司開發(fā),具有小巧的內(nèi)核,可根據(jù)需要進行裁減;它還獲得廣泛的硬件支持,像X86系列的CPU,Motorola 68K系列的CPU,Motorola/IBM Power PC等等;它還具有很高的可靠性和實時性,像美國登陸的火星探測器使用的就是VxWorks操作系統(tǒng);它還有其它的很多優(yōu)點,因此被廣泛地使用在通信、軍事、航空、控制等高精尖技術(shù)以及實時性要求極高的領(lǐng)域中。
PCI總線由于其即插即用、獨立于微處理器、通用性好、具有很高的兼容性等等優(yōu)良的特點,使得它成為運用最廣泛的局部總線標準,而且具有很大的發(fā)展?jié)摿ΑJ顾蔀榫哂泻芎冒l(fā)展?jié)摿Φ木植靠偩€標。多功能數(shù)據(jù)采集卡在工業(yè)控制中有著廣泛的運用,它是信號和嵌入式處理器的有效交互的工業(yè)控制系統(tǒng)中的重要環(huán)節(jié),特別是它的中斷功能能提供很有效的實時性。在Vxworks下,一個重要的問題就是如何開發(fā)出高效率的數(shù)據(jù)采集卡驅(qū)動,只有驅(qū)動穩(wěn)定了,才能使系統(tǒng)高效地運轉(zhuǎn)。文中結(jié)合Adlink公司的7396芯片,探討在VxWorks下基于PENTIUM CPU的PCI多功能數(shù)據(jù)采集卡的驅(qū)動開發(fā)。

1 VxWorks下的設(shè)備驅(qū)動程序
1.1 VxWorks下的I/O系統(tǒng)
I/O系統(tǒng)全稱為(Input/Output)輸入輸出系統(tǒng),在VxWorks系統(tǒng)中,I/O系統(tǒng)向用戶屏蔽了硬件層,為用戶提供了一個統(tǒng)一的標準接口,使得應用層的用戶只要了解I/O系統(tǒng)的標準接口使用方法,就可以正確地操作外部設(shè)備。I/O系統(tǒng)為設(shè)備提供了7個標準的I/O接口函數(shù):creat(...)、delete(...)、open(...)、close(...)、read(...)、write(...)、ioctl(...)。驅(qū)動程序設(shè)計者只要根據(jù)實際項目、工程的需要設(shè)計完成相應功能的接口函數(shù),然后在使用時I/O系統(tǒng)就可以把應用程序的I/O請求轉(zhuǎn)發(fā)給相應的設(shè)計好的設(shè)備驅(qū)動程序進行處理。在VxWorks系統(tǒng)中I/O系統(tǒng)是通過維護文件描述符表、設(shè)備描述符表和驅(qū)動程序列表這3張表格來實現(xiàn)對驅(qū)動程序的管理的。
1.2 VxWorks設(shè)備驅(qū)動程序的分類
在Vxworks系統(tǒng)中,輸入/輸出設(shè)備從宏觀上分為3種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。依據(jù)設(shè)備的類型,VxWorks下設(shè)備驅(qū)動程序的管理也被劃分成3種模塊:字符設(shè)備驅(qū)動程序模塊、塊設(shè)備驅(qū)動程序模塊、網(wǎng)絡(luò)設(shè)備驅(qū)動程序模塊。從架構(gòu)上說,字符設(shè)備驅(qū)動程序的實現(xiàn)相對來說是最簡單的,它向上只是與I/O系統(tǒng)接口,所以只需要提供內(nèi)個接口就可以了。塊設(shè)備驅(qū)動程序相對于字符設(shè)備來說相對的復雜,它還要與中間的文件系統(tǒng)相連,為文件系統(tǒng)提供服務(wù),塊設(shè)備的最大特點就是以“塊”為單位進行操作,在讀取其中的數(shù)據(jù)時,必須將所在塊的數(shù)據(jù)完全讀出。網(wǎng)絡(luò)設(shè)備則提供了另外的接口,相對于字符設(shè)備和塊設(shè)備來說,處于相對底層,這是由網(wǎng)絡(luò)協(xié)議的復雜性決定的。為了更好地支持網(wǎng)絡(luò)設(shè)備,VxWorks在網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)設(shè)備驅(qū)動程序之間增加了MUX接口。
1.3 驅(qū)動程序和I/O系統(tǒng)
驅(qū)動程序的結(jié)構(gòu)包括3個部分:初始化部分,函數(shù)功能部分和中斷服務(wù)程序ISR。初始化部分主要是初始化硬件,分配硬件所需要的系統(tǒng)資源。函數(shù)功能主要是根據(jù)實際的需要,完成系統(tǒng)指定的功能。中斷服務(wù)程序主要是響應外部中斷,使系統(tǒng)能夠快速地對外部交互作出反應,由于中斷服務(wù)程序要求盡可能地反應快,所以中斷服務(wù)程序應該盡可能簡單。

a.JPG


VxWorks中設(shè)備驅(qū)動程序與I/O系統(tǒng)的關(guān)系非常簡單。對于塊設(shè)備來說,應用程序通過I/O系統(tǒng)訪問文件系統(tǒng),而后由文件系統(tǒng)調(diào)用驅(qū)動程序訪問設(shè)備。而其它的非塊設(shè)備則是I/O系統(tǒng)直接調(diào)用驅(qū)動程序訪問設(shè)備。圖1顯示了應用程序、I/O系統(tǒng)和設(shè)備驅(qū)動程序之間的關(guān)系。

2 多功能數(shù)據(jù)采集卡7396簡介
PCI-7396是專門為工業(yè)應用而設(shè)計的96位并行數(shù)字輸入/輸出(DIO)卡。PCI-7396是模擬4個8255可編程外圍接口(PPI)芯片。每個PPI提供3個8位可同步訪問的DIO端口。總共有12個可獨立配置為輸入或輸出的端口。
PCI-7396產(chǎn)品具有通過外部觸發(fā)來鎖定數(shù)字輸入數(shù)據(jù)的特點,同時提供狀態(tài)改變(COS)中斷,這意味著當任何數(shù)字輸入狀態(tài)改變的時候,中斷就會發(fā)生。用戶可以通過用跳線設(shè)置上拉/下拉電阻輕松地以用戶自定義狀態(tài)(高或低)來設(shè)定PCI-7396數(shù)字I/O上電狀態(tài)。
7396有3種類型的寄存器:PCI配置寄存器,它是要實現(xiàn)板卡的功能所要訪問和操作的寄存器;本地配置寄存器,其是它就是操作9050所要訪問的寄存器:還有一個是PCI-6308寄存器。

3 PCI配置空間
PCI(Peripheral Component Interconnect),外部設(shè)備互聯(lián)標準,是由Intel公司提出的一種局部總線標準。每個PCI設(shè)備有3種物理空間:配置空間、存儲器空間和I/O空間。配置空間是長度256字節(jié)的一段連續(xù)空間(16個32位寄存器)其中前64個字節(jié)為頭標,其余192字節(jié)為設(shè)備相關(guān)信息。在64字節(jié)的頭標中,前16字節(jié)的定義是確定的,后48字節(jié)的具體含義因設(shè)備而異。配置空間頭標區(qū)如圖2所示。配置空間中的一個重要部分是基地址寄存器(BaseAddresssRegister),它的內(nèi)容是PCI設(shè)備的地址空間映射到系統(tǒng)地址空間的起始物理地址。其中,bit0=1表示IO空間映射,bit0=0表示存儲器空間映射。所有PCI設(shè)備必須實現(xiàn)存儲器空間映射。通過向BAR寫全1即可確定所需地址空間的大小。在VxWorks下要訪問一個PCI設(shè)備,只需要知道該設(shè)備的廠商號和設(shè)備號。

b.JPG



4 數(shù)據(jù)采集卡設(shè)備驅(qū)動的實現(xiàn)
Adlink公司的7396數(shù)據(jù)采集卡是PCI設(shè)備,PCI設(shè)備驅(qū)動程序?qū)儆赩xWorks體系結(jié)構(gòu)中的I/O系統(tǒng)部分,它往上為應用程序提供API接口,往下通過BSP訪問PCI設(shè)備。基于VxWorks的PCi設(shè)備驅(qū)動程序開發(fā)流程如圖3所示。分為4個步驟:①創(chuàng)建設(shè)備;②根據(jù)PCI設(shè)備的配置參數(shù),對PCI設(shè)備編寫功能函數(shù)程序;③編寫測試程序進行功能測試;④驅(qū)動程序工作正常可靠,即可發(fā)布驅(qū)動程序,將其加載入VxWorks操作系統(tǒng)內(nèi)核,完成驅(qū)動程序的開發(fā)。

c.JPG

在前面的一節(jié)中提到過,要訪問一個PCI設(shè)備,首先要知道它的廠商號和設(shè)備號,在實際工作中,可以通過WinDriver這個在windows平臺下運行的編寫驅(qū)動的軟件獲得,這樣比較方便和直觀,通過它,得到7396的廠商號(Dev7396_VENDOR_ID)為0x144a,設(shè)備號Dev7396_DEVICE_ ID)為0x7396。知道廠商號和設(shè)備號后,就可以利用VxWorks提供的函數(shù)pciFindDevice()獲得設(shè)備的總線號、設(shè)備編號和功能號。然后調(diào)用peiConfigInLong()獲得多功能數(shù)據(jù)采集卡設(shè)備的配置空間、內(nèi)存空間、I/O空間的地址;pciConfigInByte得到設(shè)備中斷號。7396設(shè)備沒有要訪問的內(nèi)存空間,所以沒有涉及到內(nèi)存的映射和操作。主要的實現(xiàn)代碼如下所示:
d.JPG
在讀取設(shè)備的基地址時,要特別注意結(jié)合設(shè)備相關(guān)的說明書進行,在前面的章節(jié)中提到過,7396設(shè)備包含3個寄存器空間(詳見2多功能數(shù)據(jù)采集卡7396簡介),所以讀出來的基地址空間有可能是3個里面的一個。
e.JPG
由于使用的是PENTIUM系列的CPU來進行板卡驅(qū)動的開發(fā),所以在邊接中斷向量的時候,中斷號要加上0x20。
f.JPG
特別要注意操作9050的控制寄存器的偏移為0x4c的地方的操作,它是要實現(xiàn)中斷必須要進行的操作,沒有操作正確的話,中斷是不能夠正確運行的,而且9050的這個寄存器的各個位和9052還是不一樣的,雖然都是PLX公司的產(chǎn)品。
讀取完上面的I/O基地址和相應的中斷后,就可以操作I/O空間了,這要根據(jù)相應板卡說明書上的基地址偏移來操作,而且還要注意設(shè)置端口是輸入端口還是輸出端口。中斷服務(wù)程序在VxWorks下也有嚴格的要求,要注意。

5 結(jié)束語
文中結(jié)合具體的Adlink公司的7396數(shù)據(jù)采集卡,介紹了在VxWorks下編寫PCI設(shè)備驅(qū)動的相關(guān)方法以及要注意的事項,并介紹了VxWorks的I/O系統(tǒng)和驅(qū)動相關(guān)的理論知識,它們是開發(fā)驅(qū)動的基礎(chǔ)。根據(jù)上面方法開發(fā)出的7396驅(qū)動已經(jīng)在某綜合控制系統(tǒng)中穩(wěn)定地運行。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩三级视频| 国产精品久久久久一区二区三区| 亚洲福利电影| 国产欧美日韩亚洲精品| 国产精品高潮呻吟| 国产精品草莓在线免费观看| 欧美日韩直播| 欧美日韩国产色综合一二三四| 欧美电影在线免费观看网站| 免费在线一区二区| 欧美波霸影院| 欧美精品www在线观看| 欧美成在线视频| 欧美韩日亚洲| 欧美成人有码| 欧美激情综合网| 欧美另类视频在线| 欧美日韩和欧美的一区二区| 欧美日韩免费高清| 欧美日韩中文字幕在线| 欧美日韩中文在线| 欧美日韩一区二区免费视频| 欧美乱妇高清无乱码| 欧美日韩亚洲一区二区三区在线观看| 欧美日韩国产免费| 国产精品国产三级国产aⅴ浪潮 | 日韩视频在线一区二区三区| 亚洲精品小视频| 一本一本a久久| 亚洲自拍电影| 久久av老司机精品网站导航| 久久先锋资源| 欧美乱人伦中文字幕在线| 欧美午夜不卡影院在线观看完整版免费 | 亚洲免费电影在线观看| 中文一区二区| 香蕉av福利精品导航| 久久久久国产精品厨房| 另类春色校园亚洲| 欧美日韩不卡在线| 国产精品亚洲一区| 尤物在线精品| 一区二区三区四区国产| 欧美一区二区大片| 亚洲免费观看高清在线观看| 亚洲综合精品一区二区| 久久久国产精品一区二区三区| 欧美二区在线观看| 国产精品美女久久久久av超清| 国产亚洲欧美色| 亚洲欧洲在线视频| 亚洲欧美日韩另类| 亚洲精品一区在线| 欧美一区二区三区免费观看视频| 老司机久久99久久精品播放免费| 欧美日韩在线电影| 狠狠色丁香久久婷婷综合丁香| 日韩亚洲视频| 亚洲第一二三四五区| 亚洲私人黄色宅男| 美女视频黄免费的久久| 国产精品久久久久久一区二区三区 | 久久国产精品一区二区三区四区 | 欧美日韩精品国产| 国模精品娜娜一二三区| 一本色道婷婷久久欧美| 久久精品系列| 亚洲欧美综合精品久久成人| 免费欧美日韩| 亚洲电影在线| 欧美一区二区黄色| 亚洲福利国产| 亚洲一区网站| 欧美成人免费小视频| 国产精品―色哟哟| 亚洲精品色婷婷福利天堂| 亚欧美中日韩视频| 亚洲一区二区三区高清不卡| 蜜桃久久av一区| 国产伦一区二区三区色一情| 亚洲区一区二| 久久国产精彩视频| 香蕉乱码成人久久天堂爱免费| 欧美激情亚洲一区| 国产中文一区| 亚洲综合色激情五月| 日韩天天综合| 美女精品在线观看| 国产日韩亚洲欧美精品| 中文av字幕一区| 亚洲卡通欧美制服中文| 久久九九电影| 国产精品日日摸夜夜摸av| 日韩亚洲欧美一区二区三区| 亚洲日本欧美| 美国成人直播| 国产原创一区二区| 午夜精品美女久久久久av福利| 亚洲综合成人婷婷小说| 欧美日本一道本在线视频| 在线日本成人| 久久精品视频导航| 久久九九热re6这里有精品| 国产精品久久综合| 夜夜嗨av一区二区三区网站四季av| 亚洲人精品午夜| 欧美成人免费观看| 一区在线播放视频| 亚洲国产成人一区| 米奇777超碰欧美日韩亚洲| 狠狠色综合网站久久久久久久| 午夜视频一区二区| 欧美在线高清| 国产色综合网| 欧美在线资源| 久久在线播放| 亚洲欧美日韩精品久久奇米色影视| 欧美在线视频一区二区| 国产模特精品视频久久久久 | 欧美一区二区三区男人的天堂| 欧美在线免费一级片| 日韩午夜剧场| 快射av在线播放一区| 国产一区二区0| 亚洲欧美第一页| 亚洲欧美日韩第一区| 欧美特黄一区| 一区二区三区精品久久久| 一区二区三区 在线观看视频| 欧美精品一级| 亚洲美女av在线播放| 99在线观看免费视频精品观看| 欧美精品久久久久久久免费观看| 亚洲激情第一页| 99精品免费| 欧美性做爰猛烈叫床潮| 国产精品99久久久久久www| 香蕉成人啪国产精品视频综合网| 国产精品五月天| 欧美一区国产在线| 久久躁狠狠躁夜夜爽| 伊人男人综合视频网| 亚洲精品影视在线观看| 欧美久久电影| 宅男噜噜噜66一区二区| 午夜欧美大片免费观看| 国产一区二区三区四区五区美女| 久久精品理论片| 欧美激情精品久久久久| 亚洲精选久久| 亚洲欧美在线免费| 国产欧美在线播放| 亚洲第一综合天堂另类专| 欧美大胆人体视频| 亚洲美女中出| 欧美在线视频全部完| 在线成人小视频| 一本久道久久综合婷婷鲸鱼| 国产精品久久久久免费a∨| 欧美一区日韩一区| 欧美极品一区二区三区| 宅男噜噜噜66一区二区 | 午夜精品999| 国内伊人久久久久久网站视频| 亚洲三级视频在线观看| 国产精品国产三级国产aⅴ入口| 欧美一级在线播放| 欧美激情在线免费观看| 亚洲综合电影| 免费一级欧美片在线播放| 一本色道精品久久一区二区三区| 欧美中文字幕视频在线观看| 亚洲国产99| 欧美亚洲三级| 亚洲国产中文字幕在线观看| 欧美一区二区日韩| 亚洲激情一区二区| 欧美在线视频在线播放完整版免费观看 | 欧美一级视频精品观看| 欧美福利精品| 亚洲欧美国产毛片在线| 欧美丰满少妇xxxbbb| 亚洲欧洲av一区二区三区久久| 欧美成人四级电影| 亚洲免费在线观看视频| 欧美韩日高清| 欧美一级视频精品观看| 欧美日韩一区在线观看视频| 亚洲第一搞黄网站| 国产精品人人做人人爽人人添| 亚洲人成在线影院| 国产农村妇女精品一二区| 亚洲看片网站| 国产综合色在线视频区| 亚洲欧美一区二区原创| 亚洲精品久久久久久下一站| 久久乐国产精品| 亚洲尤物视频网| 欧美午夜视频网站| 日韩午夜视频在线观看|