技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于PCI2040的VxWorks BSP開發(fā)

基于PCI2040的VxWorks BSP開發(fā)

時(shí)間:2006-11-15 15:52:00來源:wangj

導(dǎo)語(yǔ):?本文介紹了在VxWorks實(shí)時(shí)操作系統(tǒng)環(huán)境下開發(fā)基于x86CPU目標(biāo)機(jī)的支持PCI2040的板級(jí)支持包(BSP)和應(yīng)用程序
本文介紹了在VxWorks實(shí)時(shí)操作系統(tǒng)環(huán)境下開發(fā)基于x86CPU目標(biāo)機(jī)的支持PCI2040的板級(jí)支持包(BSP)和應(yīng)用程序,并解決Tornado在調(diào)試過程中不支持常用網(wǎng)卡rtl81x9的問題。 VxWorks操作系統(tǒng)是美國(guó)風(fēng)河(Wind River System)公司開發(fā)的高性能實(shí)時(shí)操作系統(tǒng)(RTOS)。VxWorks以其良好的可靠性、卓越的實(shí)時(shí)性和方便的可裁減性被廣泛地應(yīng)用在通訊、軍事、航空等高端科技以及實(shí)時(shí)性要求很高地領(lǐng)域中。Tornado是風(fēng)河公司為VxWorks操作系統(tǒng)推出的開發(fā)調(diào)試環(huán)境,是交叉開發(fā)環(huán)境中運(yùn)行在主機(jī)上的部分。BSP的開發(fā)工作主要是在Tornado開發(fā)調(diào)試環(huán)境下進(jìn)行的。 TI公司推出的PCI2040是一款用于實(shí)現(xiàn)PCI局部總線與DSP之間無縫鏈接的專用芯片。在VxWorks實(shí)時(shí)操作系統(tǒng)環(huán)境下實(shí)現(xiàn)PC與DSP的通訊,就需要開發(fā)針對(duì)目標(biāo)機(jī)x86的板級(jí)支持包BSP(Board Support Package)。 1 BSP基本概念 BSP是介于主板硬件和操作系統(tǒng)之間的軟件支持包,是屬于操作系統(tǒng)的一部分。其主要功能是屏蔽硬件,提供操作系統(tǒng)的驅(qū)動(dòng)和硬件驅(qū)動(dòng);主要目的是為了支持操作系統(tǒng),使之能夠更好的運(yùn)行于硬件主板。針對(duì)不同的目標(biāo)機(jī)的CPU,VxWorks具有不同的BSP。即使對(duì)于同一CPU,由于外設(shè)的不同(如外部擴(kuò)展DRAM的大小、類型不同),BSP相應(yīng)的地方也不一樣。BSP在VxWorks操作系統(tǒng)中的地位如圖1所示。 圖1 BSP在VxWorks中的位置 BSP和PC上的BIOS有很大的區(qū)別,BIOS主要是負(fù)責(zé)在電腦開啟時(shí)檢測(cè)、初始化系統(tǒng)設(shè)備(設(shè)置棧指針,中斷分配,內(nèi)存初始化等)、裝入操作系統(tǒng)并調(diào)度操作. 系統(tǒng)向硬件發(fā)出的指令,把操作系統(tǒng)由硬盤加載到內(nèi)存,并傳遞一些硬件接口設(shè)置給系統(tǒng)。在操作系統(tǒng)正常運(yùn)行后,BIOS的作用基本上也就完成了。PC機(jī)BIOS的作用更象嵌入式系統(tǒng)中的Bootloader(最底層的引導(dǎo)軟件,初始化主板的基本設(shè)置,為接收外部程序做硬件上的準(zhǔn)備)。與Bootloader不同的是BIOS在裝載操作系統(tǒng)的同時(shí),還傳遞一些參數(shù)設(shè)置(中斷端口定義等),而Bootloader只是簡(jiǎn)單的裝載系統(tǒng)。BSP是和操作系統(tǒng)綁在一起運(yùn)行在主板上的,BSP的開始部分和BIOS所做的工作類似,但是BSP還包含和系統(tǒng)有關(guān)的基本驅(qū)動(dòng)(串口,網(wǎng)口等),此外程序員還可以編程修改BSP,在BSP中任意添加一些和系統(tǒng)無關(guān)的驅(qū)動(dòng)或程序,甚至可以把上層開發(fā)的統(tǒng)統(tǒng)放到BSP中。 2 VxWorks 映象(Image)和啟動(dòng)過程 2.1 VxWorks映象 VxWorks映象是在Tornado開發(fā)環(huán)境下編譯生 圖2 VxWorks BSP啟動(dòng)順序 圖3 PCI2040配置空間頭區(qū)域 成的引導(dǎo)程序和VxWorks操作系統(tǒng)。VxWorks映象可大致分為兩類:可引導(dǎo)映象(Bootable Image)和可下載映象(Loadable Image)??梢龑?dǎo)映象又分成不駐留ROM的映象(Rom-based Image)和駐留ROM的映象(Rom-resident Image)。不駐留Rom的映象再分成壓縮和不壓縮兩種。 對(duì)于x86目標(biāo)機(jī)來說一般采用可下載映象,它通過VxWorks引導(dǎo)映象(VxWorks BootRom Image) 加載到目標(biāo)機(jī)的RAM 中運(yùn)行。本文采用軟盤來啟動(dòng)VxWork系統(tǒng),BootRom一般選擇bootrom_uncmp格式。在主機(jī)上插入空白軟盤,拷貝 BSP目錄下編譯好的bootrom_uncmp.bin文件到host\x86-win32\bin目錄下,并在DOS環(huán)境中,在此目錄下用"mkboot a:bootrom_uncmp"命令生成引導(dǎo)盤。將目標(biāo)機(jī)設(shè)置成從軟盤啟動(dòng),此引導(dǎo)盤將通過事先設(shè)定好的某種耦合方式(串口或者網(wǎng)絡(luò))將主機(jī)上的VxWorks映象下載到目標(biāo)機(jī)上運(yùn)行。下載時(shí)需要對(duì)Tornado2.2上面的Target Server進(jìn)行配置,并且打開FTP Server。做成獨(dú)立系統(tǒng)的時(shí)候需將硬盤格式化成FAT16以下格式。并制作一個(gè)DOS啟動(dòng)盤,上面包括運(yùn)行"mkboot c:"命令時(shí)所需文件和boot.hex文件。在DOS環(huán)境下,在目標(biāo)機(jī)上運(yùn)行"mkboot c:",這樣就可以通過硬盤來啟動(dòng)VxWorks Boot了。修改BSP包中的config.h將其中的啟動(dòng)方式改成硬盤啟動(dòng)(ata(0,0)),并將#undef include_ATA改成#define include_ATA。重新編譯后啟動(dòng)目標(biāo)機(jī),VxWorks映象被下載到硬盤,這樣就做成了硬盤的獨(dú)立系統(tǒng)。 BootRom Image和VxWorks Image都對(duì)硬件進(jìn)行初始化,但是內(nèi)容不盡相同。BootRom映象的主要目的是通過網(wǎng)絡(luò)或者串口下載VxWorks系統(tǒng),所以它只是初始化很少的硬件系統(tǒng)如網(wǎng)絡(luò)接口、串口來滿足下載VxWorks系統(tǒng)的要求。一旦VxWorks系統(tǒng)下載完畢,這些初始化過的硬件的作用也就完成了。而VxWorks啟動(dòng)的時(shí)候會(huì)重新對(duì)幾乎所有的硬件設(shè)備進(jìn)行完全的初始化,來滿足VxWorks操作系統(tǒng)運(yùn)行的需要。 2.2 VxWorks啟動(dòng)流程 VxWorks Image的運(yùn)行方式分為在ROM中和在RAM中兩種。兩者啟動(dòng)順序的區(qū)別是在RAM中運(yùn)行的VxWorks 要調(diào)用sysInit()函數(shù);而在ROM中運(yùn)行不需要。如圖2 所示,sysInit()主要是初始化RAM用的,采取RAM運(yùn)行方式系統(tǒng)將直接跳到RAM的首地址運(yùn)行VxWorks。如果VxWorks在ROM中運(yùn)行,生成的映像是Rom-resident Image。其優(yōu)點(diǎn)是節(jié)約RAM空間,缺點(diǎn)是運(yùn)行速度慢。如果VxWorks在RAM中運(yùn)行,生成的映像Rom-based Image或Loadable Image。目標(biāo)機(jī)為x86時(shí),VxWorks運(yùn)行在內(nèi)存中。 3 PCI2040芯片簡(jiǎn)介 3.1 PCI2040芯片特點(diǎn) PCI2040符合PCI局部總線2.2規(guī)范,能夠?qū)崿F(xiàn)PCI 局部總線與TMS320C54X(或TMS320C6X)的HPI(Host Port Interface)接口的無縫鏈接。一片PCI2040可以同時(shí)與4片DSP的HPI接口相連。PCI2040還提供了一個(gè)16位的通用總線(General-Purpose Bus)接口(提供JATG的無縫接口),可以兼容3.3V和5V信號(hào)環(huán)境。 3.2 PCI2040與TMS320VC5409連接 系統(tǒng)利用PCI2040實(shí)現(xiàn)TMS320VC5409與PC機(jī)的通訊。由于PCI2040是TI的配套專用芯片,硬件級(jí)的連接比較簡(jiǎn)單,將對(duì)應(yīng)的引腳連接即可。需要注意的是,未用的輸入信號(hào)線需要通過上拉電阻上拉至有效邏輯電平。TMS320VC5409將得到的數(shù)據(jù)經(jīng)過處理后,通過PCI2040傳輸?shù)絇C機(jī)的PCI局部總線,數(shù)據(jù)在PC機(jī)上得到進(jìn)一步的處理,并顯示在屏幕上。 3.3 PCI2040配置空間 定義一個(gè)PCI總線配置空間的目的在于提供一套適當(dāng)?shù)呐渲么胧?,使之?shí)現(xiàn)完全的設(shè)備再定位;無需用戶干預(yù)安裝、配置和引導(dǎo);并由與設(shè)備無關(guān)的軟件進(jìn)行系統(tǒng)地址映射。在系統(tǒng)上電時(shí),操作系統(tǒng)將PCI配置空間映射到PC的內(nèi)存中,操作系統(tǒng)通過對(duì)內(nèi)存相應(yīng)位置的讀寫來實(shí)現(xiàn)對(duì)PCI配置空間的訪問。PCI總線的一個(gè)物理設(shè)備可能包含一個(gè)或多個(gè)PCI功能設(shè)備,也稱邏輯設(shè)備。每個(gè)PCI功能設(shè)備都有64個(gè)配置雙字用于實(shí)現(xiàn)配置寄存器。PCI協(xié)議定義了開頭16個(gè)雙字的格式和用途,稱為設(shè)備的配置頭區(qū)域,其他48個(gè)雙字的用途與設(shè)備有關(guān)。圖3是PCI2040配置空間頭區(qū)域結(jié)構(gòu)。其中在基地址寄存器中HPI CSR memory base address表示將PCI2040中的HPI CSR寄存器映射到存儲(chǔ)器空間的基地址,Control space base address表示將PCI2040中的32K字節(jié)的控制空間映射到存儲(chǔ)器空間的基地址。數(shù)據(jù)的傳輸是在后者區(qū)域內(nèi)進(jìn)行的。 4 基于PCI2040的BSP開發(fā) BSP一定要按照某種CPU的BSP定義形式來編寫,大多數(shù)情況下是在某一個(gè)成型的BSP模板上進(jìn)行修改。本文所使用的開發(fā)編譯環(huán)境是Tornado2.2/VxWorks5.5,目標(biāo)機(jī)CPU是x86系統(tǒng)中的Pentium3。在Tornado2.2中,其對(duì)應(yīng)的BSP位于Tornado2.2\target\config\pcPentium3文件夾下。 4.1 realtek81x9網(wǎng)卡驅(qū)動(dòng)在BSP中的配置 本系統(tǒng)采用網(wǎng)絡(luò)接口的方法從主機(jī)上下載VxWorks系統(tǒng)到目標(biāo)機(jī)上。Tornado2.2本身對(duì)網(wǎng)卡類型的支持并不包括常用的realtek(瑞昱)網(wǎng)卡,需要在相應(yīng)的BSP包中增加對(duì)realtek81x9網(wǎng)卡驅(qū)動(dòng)的支持,使得VxWorks系統(tǒng)能夠被目標(biāo)機(jī)上的realtek81x9網(wǎng)卡下載。Realtek公司提供面向Tornado2.2的realtek81x9網(wǎng)卡驅(qū)動(dòng),其中包括6個(gè)文件。將其中的sysNet.c、sysRtl91x9End.c、config.h、configNet.h四個(gè)文件拷貝到Torna-do2.2\target\config\pcPentium3目錄下,替換原來的同名文件和增加文件;將rtl81x9.c文件拷貝到Tornado2.2\target\src\drv\end\unsupported目錄下;將rtl81x9.h文件拷貝到Tornado2.0\ta-rget\h\drv\end\unsupported目錄下。創(chuàng)建一個(gè)downloadable工程文件,選擇pcPentium3參數(shù),將拷貝到unsupported目錄下的rtl81x9.c文件加入到工程中,并設(shè)置編譯參數(shù),這樣編譯產(chǎn)生的BootRom映象便可以支持realtek81x9網(wǎng)卡從主機(jī)上把VxWorks系統(tǒng)下載到目標(biāo)機(jī)上運(yùn)行。 4.2 BSP中增加對(duì)PCI2040的驅(qū)動(dòng)支持 在Tornado2.0\target\configpcPentium3BSP目錄下編寫pci2040Drv.c和sysPci2040.c兩個(gè)文件。前者負(fù)責(zé)尋找和初始化PCI設(shè)備,后者按照PCI配置空間中的基址寄存器的值在VxWorks操作系統(tǒng)中映射和分配空間。 在pci2040Drv.c文件中首先定義一個(gè)結(jié)構(gòu)體用來記錄尋找到的PCI2040信息。可以如下定義: typedef struct pci2040Dev { DEV_HDR devHdr; int BusNo; int DeviceNo; int FuncNo; ULONG membase0;ULONG membase1;unsigned char irq;int irqvec; } PCI2040_DEV; 接下來使用pciFindDevice()函數(shù)根據(jù)給定的PCI2040的Vendor ID(0x104C)和Device ID(0xAC60)來尋找設(shè)備。接下來可以用 pciConfig-InLong()函數(shù)來查看PCI2040的配置空間,并且最好使用pciHeaderShow()函數(shù)打印出所查看到的值來確認(rèn)設(shè)備是否被找到。然后調(diào)用iosDrvInstall()函數(shù)將各種I/O服務(wù)與我們編寫的驅(qū)動(dòng)服務(wù)例程掛接起來,并將驅(qū)動(dòng)賦值后加到驅(qū)動(dòng)列表中。接下來編寫pci2040DevCreate()服務(wù)例程來創(chuàng)建PCI2040驅(qū)動(dòng),這里可以對(duì)PCI2040的各個(gè)寄存器定位和初始化。例如,以下語(yǔ)句就是對(duì)DSP上的HPID寄存器的定位: pDspHpiDatawaRegister=pci2040Dev[0].membase1 + 0x800; 在這個(gè)文件里可以編寫讀、寫服務(wù)例程和中斷服務(wù)例程,也可以將這三者放到應(yīng)用程序里面編寫。 在sysPci2040.c函數(shù)中應(yīng)用sysMmuMapAdd()函數(shù)來進(jìn)行地址映射,將VxWorks操作系統(tǒng)能夠管理的內(nèi)存與PCI2040和DSP上面的寄存器相互對(duì)應(yīng)起來,并定義一個(gè)PCI橋結(jié)構(gòu)記錄PCI2040的信息,以提供給系統(tǒng)辨識(shí)。 除了這兩個(gè)函數(shù)的編寫以外,還需要對(duì)BSP中的一些文件設(shè)置進(jìn)行修改。如在文件config.h中加入語(yǔ)句 #define INCLUDE_PCI (添加PCI模塊),在文件sysLib.c中加入語(yǔ)句# include "sysBrdg.c"(支持PCI橋設(shè)備)等。 4.2 編寫應(yīng)用程序和編譯操作系統(tǒng) 在建立的downloadable工程文件中編寫usrAppInit.c應(yīng)用程序。其主要是調(diào)用BSP中編寫的函數(shù)來完成數(shù)據(jù)的傳輸、處理和對(duì)中斷的響應(yīng)。例如,中斷服務(wù)例程如下: void pci2040Isr() { 。。。 tempChar=*(pRegister+0x4); if((tempChar&0x1)!=0) { *(pRegister+0x4)=0x1; tempV= *(pDspRegister); *(pDspRegister)=tempV|0x0808; Printf("Interrupt happened !!!\n"); semGive(semForInt); } } 其中if((tempChar&0x1)!=0)語(yǔ)句用來判斷HPI CSR寄存器中的中斷位是否被置1。如果被置1的話表示有中斷發(fā)生,用*(pRegister+ 0x4)=0x1語(yǔ)句清除中斷,并用*(pDspRe-gister)=tempV|0x0808語(yǔ)句清除HPIC中DSP對(duì)PC的置位,并設(shè)置旗語(yǔ)semForInt,以便調(diào)用中斷來進(jìn)行數(shù)據(jù)傳輸和處理。 在Tornado環(huán)境下對(duì)工程進(jìn)行編譯,完畢后在BSP目錄下將生成VxWorks文件(沒有后綴名),這個(gè)文件也就是要下載到目標(biāo)機(jī)上運(yùn)行的VxWorks映象。 5 總結(jié) VxWorks實(shí)時(shí)操作系統(tǒng)采用開放標(biāo)準(zhǔn),使開發(fā)者在進(jìn)行系統(tǒng)優(yōu)化的時(shí)候具有更高的效率;并且引入了基于MMU的內(nèi)存保護(hù)技術(shù),使系統(tǒng)可靠性顯著提高。PCI局部總線是目前PC和工控機(jī)上的總線標(biāo)準(zhǔn),其帶寬可以滿足高速數(shù)據(jù)傳輸?shù)男枰?。開發(fā)VxWorks系統(tǒng)下的PCI驅(qū)動(dòng)程序,可以滿足各個(gè)系統(tǒng)中對(duì)數(shù)據(jù)傳輸速度增長(zhǎng)的需求。對(duì)本文相應(yīng)地方進(jìn)行修改便能開發(fā)針對(duì)不同PCI橋接芯片的BSP包。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于交流位置伺服控制原理的...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)