
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于vxbus設(shè)備驅(qū)動程序架構(gòu)的設(shè)備驅(qū)動開發(fā)vxbus是風(fēng)河公司新的設(shè)備驅(qū)動程序架構(gòu),是新增的特性,它是在vxworks6.2及以后版本被增強(qiáng)到vxworks中的。在以前的版本中,驅(qū)動程序并沒有和工程配置集成到一起,假如要配置設(shè)備驅(qū)動,就要通過修改bsp名目下的config.h和syslib.c文件來完成。而基于vxbus架構(gòu)模型的益處是允許驅(qū)動的集成和配置在workbench工程中完成。這就意味著在workbench環(huán)境下,每個驅(qū)動程序都能通過可視化環(huán)境舉行配置,都能夠按要求添加或刪除設(shè)備。本文結(jié)合基于pci2040數(shù)據(jù)采集卡驅(qū)動的開發(fā)過程,分析了vxbus架構(gòu)下驅(qū)動的設(shè)計實現(xiàn)。1 vxbu
2、s簡介vxbus是指在vxworks中用于支持設(shè)備驅(qū)動的特有的架構(gòu),這種架構(gòu)包含對minimal bsp的支持。它包括以下功能:允許設(shè)備驅(qū)動匹配對應(yīng)設(shè)備;提供驅(qū)動程序拜訪硬件的機(jī)制;軟件其他部分拜訪設(shè)備功能;在vxworks系統(tǒng)中,實現(xiàn)設(shè)備驅(qū)動的模塊化。vxbus在控制器驅(qū)動程序服務(wù)的支持下,能在總線上發(fā)覺設(shè)備,并執(zhí)行一些初始化工作,使驅(qū)動與硬件設(shè)備之間正常的通訊。圖1是vxbus 在囫圇系統(tǒng)中的位置暗示圖。從圖1中可以看到,vxbus起到了輔助總線的作用,提供了對總線控制驅(qū)動的支持。在vxworks6.2版本發(fā)布前,設(shè)備驅(qū)動并不能被集成到vxworks工程配置當(dāng)中,為了添加或移出設(shè)備驅(qū)動,需
3、要有豐盛的bsp和驅(qū)動開發(fā)相關(guān)的學(xué)問。并且在驅(qū)動被添加或移出時要去做一些管理vxworks 工程的額外的工作。作為vxworks系統(tǒng)組件的一部分,vxbus消退了上面碰到的一些難題,各種驅(qū)動和支持組件的添加與刪除徹低可以在workbench工程中舉行,而不需要bsp和驅(qū)動相關(guān)的學(xué)問,也不會在添加、刪除驅(qū)動時增強(qiáng)管理vxworks工程的額外工作。因此大大便利了bsp的開發(fā)。2 硬件介紹ti公司推出的pci2040是一款用于實現(xiàn)pci局部總線與之間無縫鏈接的專用芯片。在vxworks實時操作系統(tǒng)環(huán)境下實現(xiàn)主機(jī)與dsp的通訊,系統(tǒng)利用pci2040實現(xiàn)tms320vc5410與主機(jī)的通訊。因為pci
4、2040是ti的配套專用芯片,硬件級的銜接比較容易,將對應(yīng)的引腳銜接即可。需要注重的是,未用的輸入信號線需要通過上拉上拉至有效規(guī)律電平。tms320vc5410的mcbsp0與tlc2548 銜接,實現(xiàn)8路12位a/d數(shù)據(jù)的采集。tms320vc5410將采集到的數(shù)據(jù)通過pci2040傳輸?shù)街鳈C(jī)上,數(shù)據(jù)在主機(jī)上得到進(jìn)一步的處理。硬件銜接框圖2所示。3 驅(qū)動開發(fā)基于vxbus架構(gòu)下pci2040設(shè)備驅(qū)動的開發(fā)主要包括設(shè)備的初始化、設(shè)備控制以及設(shè)備驅(qū)動如何以組件形式添加到workbench配置界面中。下面分步介紹它的實現(xiàn)。3.1設(shè)備驅(qū)動初始化設(shè)備的初始化,包含在bsp的初始化過程中,主要分三個階段
5、,3所示。3.1.1內(nèi)核預(yù)初始化階段系統(tǒng)上電啟動,cpu在上電時跳轉(zhuǎn)到一個指定的地址 ,開頭執(zhí)行命令,初始化內(nèi)存和cpu,然后是vxworks 的初始化處理。在vxworks內(nèi)核預(yù)初始化早期,bsp的syshwinit( )函數(shù)被執(zhí)行,在這個函數(shù)中,設(shè)備驅(qū)動初始化工作第一步被執(zhí)行。syshwinit( )函數(shù)執(zhí)行一些早期的初始化,調(diào)用hardwareinterfaceinit( )函數(shù),執(zhí)行初始化硬件內(nèi)存分配機(jī)制,這步允許在系統(tǒng)內(nèi)存池初始化之前,限制為設(shè)備驅(qū)動分配內(nèi)存,這個函數(shù)接著調(diào)用hardwareinterfacebusinit( ),在hardwareinterfacebusinit(
6、)函數(shù)中完成全部設(shè)備驅(qū)動和模塊的注冊工作。pci2040的注冊函數(shù)是vxbpci2040register()。vxbpci2040register()通過數(shù)據(jù)結(jié)構(gòu),向系統(tǒng)注冊一些設(shè)備初始化函數(shù)。其中涉及到三個數(shù)據(jù)結(jié)構(gòu):local struct drvbusfuncs pcifuncs =pci2040instinit, /* devinstanceinit */pci2040instinit2, /* devinstanceinit2 */pci204instconnect /* devconnect */在這個結(jié)構(gòu)中,包含了初始化階段要調(diào)用的函數(shù)。下面的初始化過程會用到這些函數(shù)。local
7、struct vxbdevicemethod pci2040methods =devmethod(readhpid, pci2040readhpid),devmethod(writehpid, pci2040writehpid),devmethod(readhpia, pci2040readhpia),devmethod(writehpia, pci2040writehpia),devmethod(readh, pci2040readhpic),devmethod(writehpic, pci2040writehpic),devmethod(read, pci2040readcsr),devm
8、ethod(writecsr, pci2040writecsr), 0, 0 這個結(jié)構(gòu)提供了應(yīng)用軟件操作硬件的一些函數(shù)及辦法。local struct vxbpciregister pci2040devpciregistration =null, /* pnext */vxb_devid_device, /* devid */vxb_busid_pci, /* busid = pci */vxb_ver_4_0_0, /* vxbversion */lnpci_name, /* drvname */&pci2040funcs, /* 總線驅(qū)動函數(shù)*/pci2040methods, /*
9、 設(shè)備辦法結(jié)構(gòu) */pci2040probe, /* 設(shè)備探測函數(shù) */pci2040paramdefaults /* 參數(shù)*/,nelements(pcipci204devidlist),pcipci204devidlist /*設(shè)備資源列表*/;最后這個結(jié)構(gòu)在vxbpci2040registe()中被用法。這個結(jié)構(gòu)包括幾個驅(qū)動的初始化入口,其中pci2040probe()是pci2040采集卡的硬件探測函數(shù),該函數(shù)在vxbus初始化過程中檢測采集卡的數(shù)量,當(dāng)檢測到采集卡時,將采集卡與驅(qū)動結(jié)合,形成設(shè)備的一個實例,以便應(yīng)用程序用法。pci204instanceinit( )函數(shù)在vxbus初
10、始化的第一階段被調(diào)用, pci204instanceinit( )函數(shù)只是容易地確保設(shè)備的中斷被禁止。當(dāng)全部驅(qū)動在vxworks注冊之后,hardwareinterfacebusinit( )和hardwareinterfaceinit( ) 函數(shù)返回,syshwinit( ) 完成非vxbus 驅(qū)動的初始化并返回。syshwinit( ) 函數(shù)返回后,vxworks內(nèi)核被初始化。3.1.2 內(nèi)核自檢在這個階段,內(nèi)核在syshwinit2( )中執(zhí)行,bsp調(diào)用pci2040instanceinit2( )函數(shù)。在這個函數(shù)中,建立系統(tǒng)內(nèi)存到設(shè)備空間的映射。關(guān)鍵部分代碼如下:local void
11、 pci204instinit2(vxb_device_id pdev)for (i = 0; i vxb_maxbars; i+)if (pdev-regbaseflags i = vxb_reg_io)break;if (i = vxb_maxbars)return;pdrvctrl-pci2040bar = pdev-pregbase i;vxbregmap (pdev, i, &pdrvctrl-pci2040handle);/設(shè)備i/o映射到系統(tǒng)內(nèi)存此時,完成內(nèi)核服務(wù)初始化,并可以被驅(qū)動拜訪。但是,中間層的服務(wù)仍然無效。3.1.3 應(yīng)用程序初始化驅(qū)動部分在devinstanc
12、einit2( )函數(shù)最后,創(chuàng)建用戶的運行任務(wù),并完成設(shè)備驅(qū)動的初始化。在這個階段,pci2040instanceconnect( )函數(shù)被調(diào)用,完成最后的初始化工作,在這個函數(shù)中,主要是建立中斷與中斷服務(wù)程序的銜接。至此,設(shè)備驅(qū)動的初始化完成。3.2驅(qū)動程序的配置采納vxbus驅(qū)動的一個主要優(yōu)點是:設(shè)備的驅(qū)動程序可以被看成vxworks 系統(tǒng)的一個組件,通過集成的workbench開發(fā)環(huán)境來配置設(shè)備驅(qū)動。為了實現(xiàn)這一功能,開發(fā)的驅(qū)動需要增強(qiáng)一些額外的擴(kuò)展文件。標(biāo)準(zhǔn)vxworks設(shè)備驅(qū)動有一個最小的文件集,對于大多數(shù)vxworks設(shè)備驅(qū)動,最小的設(shè)備驅(qū)動集要求有6個單獨的文件。pci2040數(shù)
13、據(jù)采集卡需要有以下文件:· 一個驅(qū)動源文件pci2040.c,執(zhí)行驅(qū)動運行規(guī)律,包括pci2040驅(qū)動的實現(xiàn)代碼。· 一個組件描述文件pci2040.cdf,允許集成驅(qū)動到vxworks開發(fā)工具workbench當(dāng)中。· 一個pci2040.dc文件,提供驅(qū)動注冊函數(shù)原型。· 一個pci2040.dr文件,提供一個調(diào)用注冊函數(shù)的代碼段。· 一個readme文件 ,提供版本信息。· 一個makefile 文件,提供建立驅(qū)動的編譯規(guī)章。當(dāng)上述文件在workbench環(huán)境下舉行相應(yīng)的配置后,pci2040的設(shè)備驅(qū)動就會以組件的形式浮現(xiàn)在開發(fā)
14、工程的kernel configuration選項中,可以便利地舉行pci2040驅(qū)動配置。4 應(yīng)用程序與驅(qū)動的通信為了使設(shè)備和驅(qū)動能夠在vxworks系統(tǒng)中用法,讓應(yīng)用程序、中間件、vxworks內(nèi)核模塊拜訪設(shè)備,執(zhí)行一些操作,最基本的辦法是在vxworks中采納vxbus辦法來實現(xiàn)硬件設(shè)備的拜訪。vxbus辦法是在驅(qū)動中藏匿一個入口,使vxbus中api函數(shù)可以調(diào)用這些入口函數(shù)。在pci2040初始化階段,pci2040methods結(jié)構(gòu)中注冊的函數(shù)就是在驅(qū)動中藏匿的函數(shù),用于對pci2040的操作。例如,通過pci2040 完成對dsp數(shù)據(jù)寄存器的拜訪struct vxbdriverco
15、ntrol ctrl;vxbdevmethodrun(devmethod_call(readhpid),vxbdevmethodrun( )函數(shù)夠被用于調(diào)用一個指定的驅(qū)動辦法,這個函數(shù)反復(fù)查找全部的實例,并檢查每一個,看是否有指定藏匿申明的辦法,假如實例有指定的辦法,vxbdevmethodrun( )調(diào)用辦法函數(shù)。為了避開重復(fù)遍歷在系統(tǒng)上的全部實例,可以用 vxbdevmethodget( )函數(shù)找出驅(qū)動函數(shù)相對應(yīng)的驅(qū)動辦法 ,然后通過下面代碼完成函數(shù)調(diào)用。status (*methodfunc)(vxb_device_id devid, void * parg);methodfunc =
16、bdevmethodget(devid,devmethod_call(readhpid);if(methodfunc != null )(*methodfunc)(devid, parg);在pci2040的數(shù)據(jù)采集卡中,通常是dsp在采集完數(shù)據(jù)后,通過中斷通知主機(jī),去讀取數(shù)據(jù)。下面是中斷服務(wù)相關(guān)代碼。void pci2040isr() temp=*(pci2040. instid.pregister+0x4); /讀中斷寄存器if(tempr&0x1)!0) /檢查是否是該實例中斷 *(pci2040. instid.pregister +0x4)=0x1;temp= *(pci2040. instidpdsphpicregiste
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年唐山道路貨運駕駛員從業(yè)資格證考試題庫完整
- 萬達(dá)城住宅地室外管網(wǎng)工程施工方案
- 企業(yè)員工股權(quán)激勵協(xié)議
- 2024年夫妻離婚離婚協(xié)議
- 在歡送會上的發(fā)言稿
- 信息安全防護(hù)與管理指南
- 教師團(tuán)結(jié)發(fā)言稿
- 建筑設(shè)計規(guī)范與設(shè)計要素閱讀題
- 遠(yuǎn)程教育發(fā)展前景與教育策略分析
- 手房分期付款買賣合同
- 2024年2型糖尿病中醫(yī)防治指南解讀課件
- 2024年遼寧省中考物理試題
- 2024年南京信息職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- VDA6.3-2023過程審核檢查表
- 2024年湖南電氣職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 2024-汽車噴漆外包協(xié)議
- 大班語言活動:我驕傲-我是中國娃
- CJJ 82-2012 園林綠化工程施工及驗收規(guī)范
- 數(shù)據(jù)庫原理及應(yīng)用(第3版)
- 預(yù)防流感健康知識講座總結(jié)
- 國際標(biāo)準(zhǔn)《風(fēng)險管理指南》(ISO31000)的中文版
評論
0/150
提交評論