亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于龍芯宇航級芯片的BSP開發(fā)和移植*

        2020-05-04 06:53:54林寶軍劉迎春
        關(guān)鍵詞:龍芯中斷串口

        徐 帥,林寶軍,劉迎春,趙 帥

        (1.中國科學(xué)院空天信息創(chuàng)新研究院,北京 100094;2.中國科學(xué)院大學(xué),北京 100094;3.中國科學(xué)院微小衛(wèi)星創(chuàng)新研究院,上海201203;4.上??萍即髮W(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201203)

        1 引言

        2018年,北斗三號導(dǎo)航衛(wèi)星系統(tǒng)完成19顆衛(wèi)星發(fā)射、組網(wǎng)基本系統(tǒng)的建成,可以向全球提供服務(wù)[1]。至2020年底,北斗導(dǎo)航系統(tǒng)將全面建成,30顆衛(wèi)星在軌組網(wǎng)運(yùn)行,向全球提供定時(shí)、測速、授時(shí)的導(dǎo)航功能。北斗三號衛(wèi)星配備了Ka頻段星間鏈路,1顆衛(wèi)星可與多顆衛(wèi)星建鏈[2],未來可能還會搭載通信速率更快的激光星間鏈路,使得星間通信速率從幾百Kb/s提升至1 Gb/s。隨著星間鏈路的廣泛應(yīng)用,大量的遙控、遙測、導(dǎo)航和測量等數(shù)據(jù)由星間鏈路傳輸至每一顆衛(wèi)星的星載計(jì)算機(jī)內(nèi)進(jìn)行處理,衛(wèi)星網(wǎng)絡(luò)也需要傳輸和處理網(wǎng)絡(luò)管理信息,這些都對星上計(jì)算機(jī)系統(tǒng)的性能提出了更高要求。文獻(xiàn)[3]中提出了基于星間鏈路的集中式自主導(dǎo)航算法,配合星間鏈路的高速率數(shù)據(jù)傳輸,在同等周期下,星載計(jì)算機(jī)需要處理和存儲更多的數(shù)據(jù),配備更快的通信接口。這些都對現(xiàn)有CPU的頻率、存儲、數(shù)據(jù)接口提出了挑戰(zhàn),軟件方面也需要設(shè)計(jì)復(fù)雜算法,搭建高速數(shù)據(jù)存儲交互的基礎(chǔ)環(huán)境。

        2018年中國科協(xié)年會中楊長風(fēng)總設(shè)計(jì)師提出了北斗導(dǎo)航系統(tǒng)未來瞄準(zhǔn)PNT(Positioning Navigation Timing)體系[4],實(shí)現(xiàn)更高精度的導(dǎo)航,信息更多元化,空天地一體化??梢灶A(yù)見,北斗衛(wèi)星的星載計(jì)算機(jī)處理能力仍將不斷提升。

        國產(chǎn)星載計(jì)算機(jī)的發(fā)展比國外起步晚,最早多采用運(yùn)行能力只有幾MIPS的處理器,目前中國科學(xué)院研制的北斗衛(wèi)星在軌星載計(jì)算機(jī),采用一種基于核心部件全部自主可控的高運(yùn)算性能和高數(shù)據(jù)傳輸性能的方案,即以龍芯中科公司生產(chǎn)的龍芯1E高性能宇航級處理器芯片為主構(gòu)建硬件環(huán)境,采用32位龍芯2號處理器,2 MB Flash和128 MB SDRAM存儲架構(gòu),以1553B總線為通信接口。

        星載操作系統(tǒng)經(jīng)過了由簡單順序執(zhí)行的無系統(tǒng)模式到功能強(qiáng)大的實(shí)時(shí)操作系統(tǒng)VxWorks的發(fā)展過程,其優(yōu)越的實(shí)時(shí)性和可裁剪內(nèi)核等優(yōu)勢使其在星載操作系統(tǒng)中成為標(biāo)桿。目前,星載操作系統(tǒng)多運(yùn)行在較低頻率和小存儲空間的星載計(jì)算機(jī)中[5],在設(shè)備驅(qū)動(dòng)方面,外設(shè)驅(qū)動(dòng)采用由應(yīng)用程序直接調(diào)用的管理方式,需要設(shè)計(jì)更多面向高頻高速多接口的星載計(jì)算機(jī)操作系統(tǒng)管理方案。

        為適應(yīng)類似新需求,星載計(jì)算機(jī)將采用升級的新型龍芯1E高性能處理器芯片,通信峰值速率提升100倍,處理峰值速度提升2倍[6]。在軟件方面,對星上軟件和操作系統(tǒng)VxWorks 6.8進(jìn)行移植,同時(shí)為配合衛(wèi)星網(wǎng)絡(luò)通信需求,并保證其可靠性、獨(dú)立性,將外設(shè)驅(qū)動(dòng)修改為由內(nèi)核管理,為多線程多任務(wù)運(yùn)行創(chuàng)建軟件基礎(chǔ)。

        本文將對VxWorks 6.8進(jìn)行板級支持包BSP(Board Support Package)開發(fā)[7]、移植操作系統(tǒng)到新型1E芯片,在設(shè)備驅(qū)動(dòng)開發(fā)中采用新型VxBus型架構(gòu)[8],并配置操作系統(tǒng)組件。

        2 BSP移植背景和需求

        新型龍芯1E芯片具有頻率更高、處理速度更快等優(yōu)點(diǎn),處理器核采用64位雙發(fā)射龍芯2號GS232,峰值頻率由以前的100 MHz提升到200 MHz,定點(diǎn)峰值性能從200 MIPS提升到400 MIPS,較上一代芯片處理速度有成倍的提升;SDRAM空間提升至256 MB;通信接口方面除傳統(tǒng)的1553B外,還配備了SpaceWire高速通信接口,峰值速度從1 Mb/s提升到200 Mb/s。SpaceWire和DMA相結(jié)合,可實(shí)現(xiàn)遠(yuǎn)程訪問內(nèi)存的功能。

        軟件需采用一個(gè)較好的解決方案實(shí)現(xiàn)相應(yīng)的移植開發(fā):

        (1)軟件開發(fā)環(huán)境、編譯方法。

        星上軟件目前開發(fā)環(huán)境為代碼閱讀器+命令行編譯。該方式有以下缺點(diǎn):對復(fù)雜工程管理不足,對應(yīng)用程序開發(fā)和調(diào)試不友好,對VxWorks內(nèi)核和驅(qū)動(dòng)等組件添加、刪除不方便等。并且未來星載計(jì)算機(jī)發(fā)展到多核CPU后,該編譯方式不能支持VxWorks對稱多處理器SMP(Symmetrical Multi-Processing)編譯。對于VxWorks 6.8的編譯,風(fēng)河公司推出WorkBench編譯器作為開發(fā)工具,該編譯器界面友好,方便對BSP[8]、內(nèi)核、驅(qū)動(dòng)、應(yīng)用程序?qū)崿F(xiàn)相互獨(dú)立開發(fā),適合管理復(fù)雜的星載軟件工程。在系統(tǒng)組件方面可以實(shí)現(xiàn)一鍵添加和刪除,大大提升了開發(fā)效率。

        (2)驅(qū)動(dòng)程序管理方式。

        星載計(jì)算機(jī)驅(qū)動(dòng)程序管理方式分為3類:應(yīng)用程序直接管理、通過內(nèi)核調(diào)用驅(qū)動(dòng)、通過系統(tǒng)擴(kuò)展模塊調(diào)用驅(qū)動(dòng)程序(例如網(wǎng)絡(luò))。文獻(xiàn)[9]中指出由應(yīng)用程序直接管理代碼效率高,實(shí)時(shí)性較高,但面向多核多線程運(yùn)算時(shí)這種驅(qū)動(dòng)模式可能會造成緩存數(shù)據(jù)沖突,產(chǎn)生死鎖等問題。本文采用風(fēng)河公司推出的VxBus型驅(qū)動(dòng)架構(gòu)管理驅(qū)動(dòng)程序,該架構(gòu)對設(shè)備管理結(jié)構(gòu)更清晰,開發(fā)更簡便,可在WorkBench編譯器中配置,在層次上VxBus型驅(qū)動(dòng)和內(nèi)核、應(yīng)用程序獨(dú)立,為其他層次提供統(tǒng)一接口,具有更好的可靠性、可移植性等優(yōu)點(diǎn),為應(yīng)用層開發(fā)提供便利。

        (3)對新型1E芯片硬件環(huán)境適配。

        本文硬件平臺選用新型芯片,在操作系統(tǒng)移植過程中,對硬件環(huán)境做相應(yīng)的適配:配合更大數(shù)據(jù)存儲和計(jì)算需求,內(nèi)存管理增加VxWorks 任務(wù)棧、中斷??臻g等VxWorks系統(tǒng)管理空間,并采用VxBus型驅(qū)動(dòng)管理中斷驅(qū)動(dòng),在系統(tǒng)啟動(dòng)時(shí)對相應(yīng)組件和中斷向量表進(jìn)行配置。為支持自主導(dǎo)航算法中大量浮點(diǎn)等復(fù)雜計(jì)算和C++編譯環(huán)境,在VxWorks啟動(dòng)階段配置協(xié)處理器開啟浮點(diǎn)計(jì)算,在操作系統(tǒng)初始化階段添加C++組件。

        3 BSP介紹及移植思路

        3.1 BSP介紹

        板級支持包BSP,顧名思義,它是應(yīng)用于操作系統(tǒng)和硬件資源之間的相關(guān)軟件集合。其主要功能是配置硬件,為操作系統(tǒng)屏蔽硬件,使得上層軟件開發(fā)不需配置底層,并且在此基礎(chǔ)上,BSP要完成操作系統(tǒng)的引導(dǎo)和啟動(dòng),外設(shè)驅(qū)動(dòng)和內(nèi)核初始化等任務(wù),使得操作系統(tǒng)可以運(yùn)行在不同的硬件環(huán)境中。從層次上分,BSP也屬于操作系統(tǒng)的一部分,如圖1所示。

        Figure 1 VxWorks operating system structure圖1 VxWorks操作系統(tǒng)結(jié)構(gòu)圖

        3.2 VxWorks啟動(dòng)流程

        考慮到本文開發(fā)的BSP應(yīng)用在星載系統(tǒng)中,在保證安全有效存儲操作系統(tǒng)鏡像前提下,對開發(fā)做出以下前提聲明:

        如圖2所示,BootLoad存放在NandFlash中,通過BootLoad下載并引導(dǎo)操作系統(tǒng),引導(dǎo)過程中,將操作系統(tǒng)拷貝到RAM_LOW_ADRS的位置運(yùn)行。引導(dǎo)結(jié)束后,將執(zhí)行權(quán)交給VxWorks操作系統(tǒng),開始進(jìn)行系統(tǒng)初始化[10]。

        Figure 2 Storage structure of VxWorks圖2 VxWorks存儲結(jié)構(gòu)

        圖3所示為從函數(shù)級描述操作系統(tǒng)啟動(dòng)過程,BootLoad將程序指針跳轉(zhuǎn)到RAM_LOW_ADRS后執(zhí)行sysInit(),對CPU進(jìn)行基礎(chǔ)初始化,進(jìn)而在usrInit()中通過接口sysHwInit()和KernelInit()對硬件設(shè)備和操作系統(tǒng)內(nèi)核進(jìn)行初始化,之后運(yùn)行usrRoot()完成內(nèi)核組件創(chuàng)建并跳到應(yīng)用層,執(zhí)行應(yīng)用程序[11]。

        Figure 3 VxWorks startup process圖3 VxWorks啟動(dòng)流程

        3.3 移植思路

        本文采用風(fēng)河公司推出的VxWorks 6.8操作系統(tǒng),編譯環(huán)境采用適用于復(fù)雜項(xiàng)目管理、具有良好調(diào)試功能的WorkBench 3.2,滿足星載系統(tǒng)軟件開發(fā)需求。在系統(tǒng)啟動(dòng)階段,啟動(dòng)新型龍芯1E芯片的協(xié)處理器1,以增強(qiáng)浮點(diǎn)運(yùn)算能力,并添加C++、VxBus等系統(tǒng)組件,為復(fù)雜算法搭建軟件基礎(chǔ)。采用VxBus型驅(qū)動(dòng)架構(gòu)管理串口等外部設(shè)備。在中斷管理方面,利用VxBus型架構(gòu)分層管理中斷驅(qū)動(dòng)。將內(nèi)存分配為VxWorks管理和靜態(tài)管理2部分,并增加VxWorks管理區(qū)域,充分利用新型1E龍芯芯片的存儲空間。

        4 BSP移植實(shí)踐及關(guān)鍵技術(shù)

        4.1 VxWorks BSP相關(guān)組件編寫方案

        在VxWorks BSP開發(fā)中,從文件角度需要編寫以下組件:

        (1)Config.h。

        Config.h是缺省配置文件,在操作系統(tǒng)啟動(dòng)和初始化過程中,將會根據(jù)Config.h的參數(shù)來對操作系統(tǒng)進(jìn)行配置。開發(fā)人員在該文件中對BSP基本配置選項(xiàng)進(jìn)行設(shè)置,例如系統(tǒng)時(shí)鐘頻率、內(nèi)存起始地址、Cache模式等,通過#define、#undef的宏命令來對BSP的組件進(jìn)行添加和裁剪。必須的組件配置需要寫入該文件中,其他的可選組件可以在WorkBench開發(fā)中進(jìn)行添加。

        在Config.h中更改RAM_LOW_ADRS鏡像起始地址,通過設(shè)置LOCAL_MEM_SIZE規(guī)定VxWorks操作系統(tǒng)管理內(nèi)存區(qū)域大小,并添加對VxBus型驅(qū)動(dòng)架構(gòu)的支持,添加編寫的驅(qū)動(dòng)模塊,例如串口、中斷、時(shí)鐘。配置操作系統(tǒng)對浮點(diǎn)操作和C、C++的支持。

        (2)Makefile。

        Makefile是BSP的編譯文件,在該文件中指定編譯VxWorks鏡像時(shí)所要使用的編譯器和函數(shù)庫。另外需要指定根啟動(dòng)設(shè)備ROM大小和地址、增加的目標(biāo)模塊、編譯應(yīng)用層軟件所需要的源碼文件。

        (3)sysAlib.s。

        在sysAlib.s中改寫sysInit(),該程序?yàn)閂xWorks啟動(dòng)的入口程序,其主要功能是初始化協(xié)處理器,建立環(huán)境啟動(dòng)usrInit()。下面以偽代碼形式介紹本文方案:

        sysInit(){

        使能協(xié)處理器0,1;

        清空中斷;

        清空協(xié)處理器0的CAUSE、WIRED寄存器;

        啟動(dòng)向量入口地址控制,置協(xié)處理器0 ERL為1;

        清空TLB,建立堆棧;

        建立全局偏移量表指針;

        初始化處理器時(shí)鐘計(jì)數(shù)器、計(jì)時(shí)器中斷控制器;

        將usrInit()入棧并執(zhí)行;

        }

        (4)sysLib.c。

        該文件主要提供目標(biāo)板硬件資源的初始化接口。通過編寫sysHwInit()、sysHwInit2()函數(shù),實(shí)現(xiàn)對目標(biāo)板的硬件初始化。操作系統(tǒng)對VxBus驅(qū)動(dòng)的支持也是在這2個(gè)函數(shù)中完成。在sysHwInit()對VxBus架構(gòu)進(jìn)行第1次初始化,調(diào)用hardWareInterFaceInit()接口,初始化硬件設(shè)備表的數(shù)據(jù)結(jié)構(gòu),對VxBus型設(shè)備掛接的虛擬總線PLB進(jìn)行初始化,注冊VxBus型設(shè)備。在sysHwInit2()中,調(diào)用vxbDevInit()進(jìn)行設(shè)備第2次初始化,包括設(shè)置設(shè)備的寄存器和內(nèi)存緩存區(qū)等,并向應(yīng)用層提供接口。最后在vxbDevConnect()中完成中斷掛接,至此硬件設(shè)備驅(qū)動(dòng)初始化完成。

        (5)hwconf.c。

        VxWorks在該文件中定義hcfDeviceList[]列表來描述VxBus驅(qū)動(dòng)架構(gòu)的所有硬件設(shè)備。hcfDeviceList[]列表是由一個(gè)個(gè)設(shè)備結(jié)構(gòu)體構(gòu)成的,所有與硬件相關(guān)的設(shè)置都在設(shè)備結(jié)構(gòu)體中完成,進(jìn)而在注冊設(shè)備驅(qū)動(dòng)時(shí)被寫入驅(qū)動(dòng)程序中。在設(shè)備結(jié)構(gòu)體中需要定義設(shè)備寄存器基地址、中斷號、設(shè)備引腳號等。本文中ns16550串口、MIPS中斷、R4K時(shí)鐘在hwconf.c中注冊。

        4.2 中斷管理方案

        本文中硬件環(huán)境是MIPS架構(gòu)的龍芯1E芯片,對于中斷采用VxBus驅(qū)動(dòng)的方式管理。在硬件結(jié)構(gòu)上,MIPS的芯片采取分層次管理。第1層為MIPS中斷控制,共有8個(gè)類型,第2層為龍芯1E中斷控制,共有32個(gè)中斷[12],本文中涉及時(shí)鐘中斷和串口中斷。在編寫軟件時(shí),本文采用分層次的方式管理中斷。

        第1層MIPS中斷控制,可利用自帶的VxBus型中斷控制驅(qū)動(dòng)。在hwconf.c中添加所需要控制的中斷設(shè)備引腳說明,將引腳2設(shè)置為龍芯1E中斷,將引腳7設(shè)置為時(shí)鐘中斷。第2層的中斷為板級中斷,將引腳11、12設(shè)置為串口0、1中斷并更新向量表。然后在hwconf.c中添加龍芯1E的中斷:

        Const Struct intrCtlrInputsmipsLSIntCtlrInputs[]{

        {11,”ns16550”,0,0},

        {12,”ns16550”,1,0}

        }

        const struct hcfResourcemipsLSResources[]={

        {“regBase”,HCF_RES_INT,(void *)TRUE},

        {“input”,HCF_RES_ADDR,((void *)mipsLSIntCtlrInputs[0])},

        {“inputTableSize”,HCF_RES_INT,{(void *)

        NELEMENTS(mipsLSIntCtlrInputs)}}

        }

        #definecpuNumNELEMENTS(mipsLSResources)

        在設(shè)備列表中添加中斷設(shè)備:

        {“mipsLSIntCtlr”,0,VXB_BUSID_PLB,0,cpu0Num,mipsLSResources}

        4.3 內(nèi)存管理方案

        從硬件角度看,在32位MIPS存儲器架構(gòu)中,對程序空間地址映射分為4大區(qū)域:kuseg,kseg0~kseg2。本文將地址空間的kseg0和kseg1直接映射到物理地址空間的最低0.5 GB??紤]到星載軟件對實(shí)時(shí)性和安全性的要求,將內(nèi)存分為靜態(tài)管理和動(dòng)態(tài)管理2部分。本文將操作系統(tǒng)映射到kseg0區(qū)域,將200 MB分配給操作系統(tǒng)作為動(dòng)態(tài)內(nèi)存使用,即:0x80000000~0x8C800000用于系統(tǒng)運(yùn)行、局部變量存儲等。剩下的地址空間作為靜態(tài)內(nèi)存使用,重啟不刷新,用于存儲遙測數(shù)據(jù)等。

        圖4為用于動(dòng)態(tài)存儲的內(nèi)存空間分配圖。在本文中,低端內(nèi)存區(qū)域存放中斷向量表、bootline、exception message等信息。RAM_LOW_ADRS=0x801000000,VxWorks區(qū)域存放操作系統(tǒng)映像的代碼段、數(shù)據(jù)段和BSS(Block Started Symbol)段。WDB(Wind deBug)內(nèi)存池在前期開發(fā)時(shí)使用,主要用于動(dòng)態(tài)下載目標(biāo)模塊、傳遞參數(shù)等。VxWorks可用內(nèi)存區(qū)域主要用于動(dòng)態(tài)內(nèi)存分配(malloc等)、任務(wù)和中斷堆棧等。

        Figure 4 Dynamic memory allocation圖4 動(dòng)態(tài)內(nèi)存分配圖

        靜態(tài)存儲起始地址為0x8C800000,至SDRAM結(jié)束。在操作系統(tǒng)運(yùn)行時(shí),可由應(yīng)用程序直接向這段區(qū)域?qū)懭霐?shù)據(jù),省去了系統(tǒng)調(diào)度等過程,提供了很好的實(shí)時(shí)性和可靠性。具體的分配策略可根據(jù)應(yīng)用層程序的需要進(jìn)行分配,以達(dá)到最好的內(nèi)存利用狀態(tài)。

        4.4 時(shí)鐘管理方案

        時(shí)鐘管理關(guān)系著操作系統(tǒng)任務(wù)調(diào)度、超時(shí)處理、時(shí)鐘計(jì)時(shí)、時(shí)鐘中斷等。本文中新型龍芯芯片通過配置PLL分倍頻參數(shù)將系統(tǒng)時(shí)鐘設(shè)置為180 MHz,其高頻PLL結(jié)構(gòu)圖如圖5所示,輸入的時(shí)鐘Fin經(jīng)過輸入分頻后得到Fref時(shí)鐘,該時(shí)鐘送到倍頻器,得到Fvco,然后在輸出前除以1個(gè)分頻系數(shù),得到 PLL 輸出時(shí)鐘Fout。轉(zhuǎn)換方式如式(1)和式(5)所示:

        Fout=Fin/ref*ldf/odf

        (1)

        Figure 5 Clock PLL structure圖5 高頻PLL結(jié)構(gòu)圖

        在操作系統(tǒng)中采用VxWorks所提供的MIPS R4K的VxBus型驅(qū)動(dòng)管理時(shí)鐘。在Config.h中包含#define DRV_TIMER_MISR4K驅(qū)動(dòng)組件并將系統(tǒng)時(shí)鐘設(shè)置為180 MHz。在hwconf.h中設(shè)置時(shí)鐘參數(shù):最小時(shí)鐘、最大時(shí)鐘、CPU頻率等。關(guān)鍵代碼如下所示:

        Const Struct hcfResourcer4KTimerDevResources[]{

        {“regBase”,HCF_RES_INT,(void *)0},

        {“minClkRate”,HCF_RES_INT,(void *)SYS_CLK_RATE_MIN},

        {“maxClkRate”,HCF_RES_INT,(void *)SYS_CLK_RATE_MIN},

        {“cpuClkRate”,HCF_RES_INT,(void *)180000000},

        };

        #definer4TimerDevNumNELEMENTS(r4KTimerDevResources)

        在設(shè)備列表中添加時(shí)鐘設(shè)備:

        {“r4KTimerDev”,0,VXB_BUSID_PLB,0,r4TimerDevNum,r4KTimerDevResources}

        5 VxBus型串口驅(qū)動(dòng)編寫

        VxWorks系統(tǒng)提供了VxBus型驅(qū)動(dòng)來管理I/O設(shè)備,本文以常用的ns16550串口為基礎(chǔ),編寫驅(qū)動(dòng)軟件。

        5.1 串口數(shù)據(jù)結(jié)構(gòu)定義

        編寫VXBNS165550.h文件,定義串口寄存器地址、中斷類型等變量并構(gòu)建結(jié)構(gòu)體NS16550VXB_CHAN,把串口抽象成1個(gè)組件,以方便對設(shè)備的操作設(shè)置和管理。

        在hwconf.c中,對串口設(shè)備進(jìn)行基礎(chǔ)的初始化定義,并把串口設(shè)備添加到VxBus設(shè)備表中,定義串口寄存器基地址、波特率、時(shí)鐘頻率、寄存器間隔空間,關(guān)鍵代碼如下所示:

        Struct hcfResourceNS16550Dev0Resources[]={

        {“regBase”,HCF_RES_INT,0xbf004080},

        {“baudRate”,HCF_RES_INT,152100},

        {“clkFreq”,HCF_RES_INT,(void *)BAUD_CLK_FREQ},

        {“regInterval”,HCF_RES_INT,(void *)UART_DELTA},

        };

        #defineNS16550Dev0NumNELEMENTS(NS16550Dev0Resources)

        Const StructhcfDevice_hcfDeviceList[]={

        {“NS16550”,0,VXB_BUSID_PLB,0,NS16550Dev0Num,NS16550Dev0Resources}}

        5.2 串口驅(qū)動(dòng)程序?qū)崿F(xiàn)

        創(chuàng)建VXBNS16550.c驅(qū)動(dòng)源碼文件,實(shí)現(xiàn)串口設(shè)備的初始化、中斷以及各種操作,如圖6所示。

        Figure 6 Method of serial port driver圖6 串口驅(qū)動(dòng)方法圖

        串口NSvxbRegister()、NSvxbInstInit()2個(gè)函數(shù)在內(nèi)核初始化過程中完成。NSvxbRegister()創(chuàng)建串口設(shè)備,并將串口設(shè)備掛接到虛擬總線PLB。

        NSvxbInstInit()初始化NS16550VXB_CHAN數(shù)據(jù)結(jié)構(gòu),將串口的波特率、通道號、時(shí)鐘頻率、串口基地址、寄存器間隔空間參數(shù)從hwconf.h中加載到驅(qū)動(dòng)中,并聲明以下2個(gè)方法:

        LOCALdevice_method_tNS16550VXB_methods[] =

        {

        DEVMETHOD(sioChanGet,NS16550SioChanGet);

        DEVMETHOD(sioChanConnect,NS16550SioChan-Connect)};

        NS16550SioChanGet()方法為上層提供通過通道號找到串口設(shè)備的接口,NS16550SioChanConnect()用于串口中斷的掛接和使能。

        NSvxbDevInit()實(shí)現(xiàn)2部分初始化,第1部分配置UART通道,包括LCR線路控制寄存器,配置端口8字節(jié),1個(gè)停止位無校驗(yàn),波特率115 200,設(shè)置Modem控制寄存器為回環(huán)模式中連到RI輸入。第2部分聲明串口操作方法,包括NSvxbIoctl()、NSvxbTxstartup()、NSvxbCallbackInstall()。

        NSvxbIoctl()為串口控制函數(shù),包括設(shè)定串口波特率、停止位奇偶校驗(yàn)、打開串口、Modem控制寄存器。NSvxbTxstartup()使能發(fā)送的中斷。NSvxbCallbackInstall()完成中斷后接受和發(fā)送的函數(shù)連接安裝。

        在sysHwInit2中調(diào)用vxbDevConnect()連接和使能串口中斷,將串口中斷處理程序NSvxInt()掛接到中斷向量中。在本文中串口工作模式為中斷觸發(fā),在中斷處理程序中使用NSIntWr()和NSIntRd()對串口循環(huán)緩存區(qū)進(jìn)行讀寫操作。至此,串口初始化完成,設(shè)備以相應(yīng)的結(jié)構(gòu)體掛接到VxBus設(shè)備樹中,并開啟中斷。

        5.3 掛接中間層TTY

        如圖7所示,操作系統(tǒng)通過中間層TTY管理串口設(shè)備:虛擬設(shè)備TTY作為I/O設(shè)備向I/O系統(tǒng)注冊。在usrRoot()中將TTY設(shè)備加入IO系統(tǒng):

        ttyDevCreate(tyName,sysSerialChanGet(channelNo),512,512);

        consoleFd=open(tyName,O_RDWR,0);

        Figure 7 I/O device management圖7 I/O設(shè)備管理

        在ttyDevCreate函數(shù)中,iosDrvinstall()和iosDevAdd()將串口以TTY設(shè)備添加進(jìn)系統(tǒng)驅(qū)動(dòng)表和系統(tǒng)設(shè)備表中。用open()申請consoleFd為設(shè)備文件描述符。至此,串口設(shè)備被掛接到I/O系統(tǒng)中,驅(qū)動(dòng)開發(fā)完成。

        6 測試方法與結(jié)果

        6.1 測試環(huán)境和方案

        本文采用新型龍芯1E系列開發(fā)板作為驗(yàn)證和測試的目標(biāo)機(jī),采用研華工控機(jī)作為宿主機(jī)。龍芯1E串口0和工控機(jī)相連,將串口信息發(fā)送到工控機(jī)中。操作程序鏡像通過串口1從工控機(jī)下載到開發(fā)板中。

        測試分為3部分:第1部分,通過系統(tǒng)運(yùn)行,在VxWorks shell中輸入VxBusShow檢驗(yàn)VxBus驅(qū)動(dòng)啟動(dòng)是否成功。第2部分,在應(yīng)用層編寫串口收發(fā)測試程序,通過串口收發(fā)數(shù)據(jù)各1 500次驗(yàn)證VxBus型串口驅(qū)動(dòng)在實(shí)際應(yīng)用中的可靠性。第3部分,分別在新型龍芯1E芯片和在軌星載計(jì)算機(jī)上創(chuàng)建相同應(yīng)用程序,檢驗(yàn)在復(fù)雜運(yùn)算過程中,BSP的表現(xiàn)情況和BSP性能對比。

        6.2 實(shí)驗(yàn)過程

        Figure 8 Diagram of drive device hook up圖8 驅(qū)動(dòng)設(shè)備掛接圖

        Figure 9 Operation diagram of serial port receiving data圖9 串口接收數(shù)據(jù)運(yùn)行圖

        (1)在WorkBench開發(fā)環(huán)境中創(chuàng)建1個(gè)VxWorks Image型工程,選擇編輯本文實(shí)現(xiàn)的BSP。編譯鏡像生成可執(zhí)行文件VxWorks。通過串口將鏡像下載到開發(fā)板中運(yùn)行。在shell中輸入VxBusShow顯示當(dāng)前系統(tǒng)的驅(qū)動(dòng)和設(shè)備,可看到當(dāng)前VxBus串口驅(qū)動(dòng)、中斷驅(qū)動(dòng)、時(shí)鐘驅(qū)動(dòng)成功注冊。如圖8所示。

        (2)創(chuàng)建VxWorks Image型工程,在usrAppInit()中創(chuàng)建任務(wù):①通過串口接收數(shù)據(jù)1 500次,并將數(shù)據(jù)進(jìn)行比對,輸出接收總次數(shù)、接收數(shù)據(jù)成功次數(shù)、接收數(shù)據(jù)錯(cuò)誤次數(shù)。②通過串口發(fā)送數(shù)據(jù)到宿主機(jī)1 500次,宿主機(jī)接收后在SSCOM串口中輸出。圖9為串口接收數(shù)據(jù)運(yùn)行結(jié)果圖。

        由圖9結(jié)果得出,分別接收和發(fā)送1 500次數(shù)據(jù),均未出現(xiàn)誤碼等情況,實(shí)踐證明VxBus型驅(qū)動(dòng)具有很好的可靠性。

        (3)創(chuàng)建VxWorks Image型工程,在usrAppInit()中創(chuàng)建1個(gè)任務(wù):

        voidusrAppInit(void){

        logMsg(“----usrAppInit,---- ”,0,0,0,0,0,0);

        taskSpawn(“test”,100,0x01000000,2000000,(FUNCTPTR)main,0,0,0,0,0,0,0,0,0,0);

        }

        Figure 10 Results of the program running on the on-board computer圖10 在軌星載計(jì)算機(jī)中程序運(yùn)行結(jié)果圖

        Figure 11 Results of the program running on the new Godson 1E圖11 新型龍芯1E中程序運(yùn)行結(jié)果圖

        并將任務(wù)分別運(yùn)行在移植成功的新型龍芯1E芯片和在軌星載計(jì)算機(jī)中,將2款計(jì)算機(jī)設(shè)置為相同CPU頻率,通過運(yùn)行時(shí)間對比驗(yàn)證其性能提升。該任務(wù)為武漢大學(xué)編寫的導(dǎo)航衛(wèi)星自主定軌的模擬程序,用C++語言編寫,并用到大量的浮點(diǎn)運(yùn)算,包括協(xié)方差計(jì)算,讀取存儲12*12的矩陣,算法復(fù)雜度高,可以很好地檢測BSP的運(yùn)行狀態(tài)和進(jìn)行性能對比。如圖10所示為模擬程序在目前在軌星載衛(wèi)星系統(tǒng)中運(yùn)行截圖,如圖11所示為模擬程序在新型龍芯1E中運(yùn)行截圖。

        由運(yùn)行結(jié)果可知操作系統(tǒng)已啟動(dòng)且運(yùn)行狀態(tài)良好。運(yùn)行1次模擬程序在軌星載計(jì)算機(jī)系統(tǒng)的時(shí)間為38 s,在新型1E芯片中的時(shí)間為21 s。以運(yùn)行時(shí)間為衡量標(biāo)準(zhǔn),移植后程序運(yùn)行速度提升了81%,性能提升明顯,可以滿足執(zhí)行復(fù)雜應(yīng)用的需求。

        7 結(jié)束語

        本文在新型龍芯1E開發(fā)平臺上,針對硬件升級所提出的需求,完整開發(fā)了VxWorks操作系統(tǒng)的BSP包,包括內(nèi)存分配、中斷管理、時(shí)鐘管理、串口VxBus型驅(qū)動(dòng)設(shè)計(jì),并基于工程實(shí)踐的星載計(jì)算機(jī),設(shè)計(jì)了可靠合理的測試方案,測試結(jié)果說明操作系統(tǒng)移植成功,計(jì)算性能得到了提升,具備承擔(dān)未來多樣化星載軟件任務(wù)的可行性,同時(shí)為未來SpaceWire高速通信接口應(yīng)用開發(fā)奠定了技術(shù)基礎(chǔ)。

        猜你喜歡
        龍芯中斷串口
        基于國產(chǎn)化龍芯的動(dòng)環(huán)數(shù)據(jù)采集系統(tǒng)
        淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
        跟蹤導(dǎo)練(二)(5)
        千里移防,衛(wèi)勤保障不中斷
        解放軍健康(2017年5期)2017-08-01 06:27:44
        “龍芯之父”胡偉武
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無線通信
        地礦測繪(2015年3期)2015-12-22 06:27:26
        龍芯發(fā)布新一代處理器產(chǎn)品
        基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
        AT89C51與中斷有關(guān)的寄存器功能表解
        国产v综合v亚洲欧美大天堂 | 精品黑人一区二区三区| 精品国产又大又黄又粗av| 国产老熟女伦老熟妇露脸| 把女人弄爽特黄a大片| 97精品依人久久久大香线蕉97| 亚洲黄色性生活一级片| 亚州中文字幕乱码中文字幕| 国产亚洲精品第一综合另类| 青草国产精品久久久久久| 2020亚洲国产| 日本一区二区三区丰满熟女 | 伊人网在线视频观看| 亚洲综合网中文字幕在线| 伊人久久这里只有精品| 最近中文字幕视频完整版在线看| 无码日韩人妻AV一区免费| 最新国产一区二区三区| 红桃av一区二区三区在线无码av | 久久婷婷五月综合色丁香| 亚洲中文无码永久免| 国产精品亚洲A∨无码遮挡| 极品尤物在线精品一区二区三区| 国产精品亚洲а∨无码播放不卡| 亚洲欲色欲香天天综合网| 西西少妇一区二区三区精品| 男女av一区二区三区| 国产男女猛烈视频在线观看| 日本a在线天堂| 99精品久久精品一区| 欧美人妻少妇精品久久黑人| 91福利国产在线观看一区二区| av一区二区三区高清在线看| 亚洲1区第2区第3区在线播放 | 国产福利视频在线观看| 热久久网站| 日本免费三片在线视频| 五月四房播播| 亚洲男人的天堂网站| 日本免费a一区二区三区 | 成熟丰满熟妇av无码区|