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

        ?

        基于龍芯1E1F航天應(yīng)用平臺(tái)與VxWorks系統(tǒng)的VxBus型驅(qū)動(dòng)設(shè)計(jì)

        2018-05-23 00:45:49,,,,
        關(guān)鍵詞:服務(wù)程序龍芯中斷

        , ,,,

        (上海微小衛(wèi)星工程中心,上海 201210)

        0 引言

        龍芯1E和1F芯片是龍芯中科科技有限公司研制的具有自主知識(shí)產(chǎn)權(quán)的高性能32位抗輻射芯片,打破了國(guó)外對(duì)我國(guó)航天級(jí)高性能芯片的封鎖。龍芯1E是一個(gè)高性能應(yīng)用處理器SOC,以龍芯1號(hào)處理器為運(yùn)算中心,提供了通用的處理器部件和對(duì)外接口,包含中斷控制器、定時(shí)器、RS232串口控制器、浮點(diǎn)處理器、PCI和存儲(chǔ)器接口(存儲(chǔ)器接口支持SDRAM和FLASH ROM)等。龍芯1E芯片的外部時(shí)鐘頻率不低于66 MHz,功耗3 W。龍芯1F芯片是龍芯1E芯片的配套IO橋芯片,集成了航天領(lǐng)域常用的遙測(cè)遙控功能接口和外圍接口,時(shí)鐘33 MHz,功耗1 W,支持橋片模式和自主模式。龍芯1F芯片的橋片模式分為3種,即PCI總線設(shè)備模式、ISA總線設(shè)備模式和1553B總線簡(jiǎn)易終端設(shè)備模式。龍芯1E和龍芯1F芯片的抗輻射特性為抗總劑量不小于 1×103Gy(Si),單粒子鎖定(SEL)閾值不小于 75MeV·cm2/mg,單粒子翻轉(zhuǎn)(SEU)閾值不小于 37MeV·cm2/mg 或 IGSO 軌道翻轉(zhuǎn)率小于 10-10次/位天[1-2]。

        VxWorks系統(tǒng)由于其優(yōu)秀的實(shí)時(shí)性和可靠性,在航天領(lǐng)域得到了廣泛的應(yīng)用。VxWorks 6.2之后引入了新的基于VxBus的設(shè)備驅(qū)動(dòng)開發(fā)模式。與傳統(tǒng)的設(shè)備驅(qū)動(dòng)程序高度耦合在板級(jí)支持包(BSP)中相比,基于VxBus的設(shè)備驅(qū)動(dòng)開發(fā)可以使BSP的開發(fā)與設(shè)備驅(qū)動(dòng)的開發(fā)相對(duì)分離,使得這兩部分的開發(fā)工作可以并行開展。提高了設(shè)備驅(qū)動(dòng)開發(fā)效率,使得設(shè)備驅(qū)動(dòng)程序開發(fā)更加規(guī)范化,結(jié)構(gòu)化,進(jìn)一步提高了軟件開發(fā)的質(zhì)量和可靠性,并且降低了開發(fā)和測(cè)試成本[3]。

        由于龍芯芯片在商用領(lǐng)域推出較多,在航天領(lǐng)域推出較少,目前對(duì)龍芯應(yīng)用技術(shù)的研究大多集中在商用領(lǐng)域,在航天領(lǐng)域的應(yīng)用技術(shù)的研究尚處于初始階段[4]。在航天領(lǐng)域龍芯的應(yīng)用介紹較少,并且研究?jī)?nèi)容主要著眼于系統(tǒng)引導(dǎo),軟件更新[5]和傳統(tǒng)的VxWorks BSP移植設(shè)計(jì)等方面[6-7],對(duì)如何針對(duì)VxWorks新推出的VxBus型驅(qū)動(dòng)進(jìn)行龍芯應(yīng)用的設(shè)計(jì)介紹較少。

        1 VxBus設(shè)備驅(qū)動(dòng)分析

        VxWorks系統(tǒng)下VxBus型驅(qū)動(dòng)具有設(shè)備可配置以及驅(qū)動(dòng)使用界面化操作的特點(diǎn)。如圖1所示,進(jìn)行VxBus驅(qū)動(dòng)開發(fā)一般要提供驅(qū)動(dòng)頭文件,驅(qū)動(dòng)源代碼文件,驅(qū)動(dòng)說明文件,Makefile編譯文件,cdf驅(qū)動(dòng)配置文件,dr驅(qū)動(dòng)注冊(cè)文件以及dc驅(qū)動(dòng)注冊(cè)文件。這幾個(gè)文件存放的位置各不相同,驅(qū)動(dòng)說明文件,驅(qū)動(dòng)源代碼文件和Makefile編譯配置文件存放在“C: WindRivervxworks-6.8 arget3rdpartyvendorName driveName”路徑下。其中“C: WindRiver”為VxWorks開發(fā)環(huán)境的安裝路徑,vendorName是自定義的驅(qū)動(dòng)供應(yīng)商的名稱,driveName是自定義的驅(qū)動(dòng)的名稱。一個(gè)驅(qū)動(dòng)供應(yīng)商可以對(duì)應(yīng)多個(gè)驅(qū)動(dòng),多個(gè)驅(qū)動(dòng)都以驅(qū)動(dòng)文件夾的方式存放在供應(yīng)商文件夾下。cdf配置文件存放在“C:WindRivervxworks-6.8 argetconfigcomps vxWorks”路徑下,這個(gè)目錄下是專門用來存放驅(qū)動(dòng)配置文件。dc和dr配置文件存放在C:WindRivervxworks-6.8 argetconfigcompssrchwif路徑下,這個(gè)目錄下是專門用來存放VxBus型驅(qū)動(dòng)的注冊(cè)文件。

        VxWorks系統(tǒng)初始化時(shí),首先在sysHwInit()函數(shù)中調(diào)用hardWareInterFaceInit()函數(shù),該函數(shù)完成VxBus型驅(qū)動(dòng)的注冊(cè),并調(diào)用各個(gè)VxBus型驅(qū)動(dòng)的xxxInit()函數(shù),執(zhí)行各個(gè)驅(qū)動(dòng)的第一次初始化。在第一次初始化過程中,VxWorks系統(tǒng)為每個(gè)VxBus型驅(qū)動(dòng)設(shè)備分配了內(nèi)存空間,并且連接了供應(yīng)用層調(diào)用的驅(qū)動(dòng)方法,從BSP的硬件設(shè)備定義文件hwconf.c中獲取每個(gè)硬件設(shè)備的驅(qū)動(dòng)參數(shù)。然后在sysHwInit2()函數(shù)中調(diào)用vxbDevInit()函數(shù),在vxbDevInit ()函數(shù)中調(diào)用各個(gè)VxBus型驅(qū)動(dòng)的xxxInit2()函數(shù),執(zhí)行各個(gè)驅(qū)動(dòng)的第二次初始化,進(jìn)行了VxBus型驅(qū)動(dòng)的中斷服務(wù)函數(shù)的連接和使能。接著建立一個(gè)任務(wù)vxbDevConnect,該任務(wù)執(zhí)行了每個(gè)VxBus型驅(qū)動(dòng)的xxxConnect()函數(shù),在該函數(shù)中將執(zhí)行一些額外的比較費(fèi)時(shí),但是不影響整個(gè)系統(tǒng)初始化的初始化操作[8-9]。整個(gè)VxBus驅(qū)動(dòng)的初始化流程如下圖2所示。

        圖1 VxBus驅(qū)動(dòng)組成圖

        圖2 VxBus驅(qū)動(dòng)初始化流程圖

        2 VxBus設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

        對(duì)于VxWorks系統(tǒng)的基本運(yùn)行,一般需要提供3種必需的驅(qū)動(dòng):時(shí)鐘驅(qū)動(dòng),串口驅(qū)動(dòng)和中斷控制驅(qū)動(dòng)。時(shí)鐘驅(qū)動(dòng)用來驅(qū)動(dòng)VxWorks系統(tǒng)運(yùn)行,如任務(wù)調(diào)度,定時(shí)控制等,串口驅(qū)動(dòng)一般用作調(diào)試時(shí)輸出日志信息,輸入控制命令等,中斷控制驅(qū)動(dòng)用作在系統(tǒng)發(fā)生中斷時(shí)進(jìn)行中斷響應(yīng)。

        1)串口驅(qū)動(dòng)設(shè)計(jì)。

        龍芯1E芯片上提供了2個(gè)RS232串口,串口控制器與NS16550串口控制器在寄存器接口上兼容,并且VxWorks開發(fā)環(huán)境中已經(jīng)提供了基于VxBus型NS16550串口控制驅(qū)動(dòng)的參考源代碼,源代碼文件為vxbNs16550Sio.c。源代碼文件不需要修改,只要在BSP的硬件配置文件hwconf.c中配置各個(gè)串口的寄存器的起始地址,波特率,時(shí)鐘等即可。關(guān)鍵代碼如下。

        首先定義兩個(gè)串口設(shè)備的相關(guān)驅(qū)動(dòng)參數(shù):

        define LSN_UART_DEFAULT_BAUD 115200

        struct hcfResource ns16550Dev0Resources[] = {

        { "regBase", HCF_RES_INT, {(void *)LS1E_UART0_BASE} },

        { "baudRate", HCF_RES_INT, { (void *)LSN_UART_DEFAULT_BAUD }},

        { "clkFreq", HCF_RES_INT, {(void *)BAUD_CLK_FREQ} },

        { "regInterval", HCF_RES_INT, {(void *)UART_DELTA} },

        };

        define ns16550Dev0Num NELEMENTS(ns16550Dev0Re-sources)

        struct hcfResource ns16550Dev1Resources[] = {

        { "regBase", HCF_RES_INT, {(void *)LS1E_UART1_BASE} },

        { "baudRate", HCF_RES_INT, { (void *)LSN_UART_DEFAULT_BAUD }},

        { "clkFreq", HCF_RES_INT, {(void *)BAUD_CLK_FREQ} },

        { "regInterval", HCF_RES_INT, {(void *)UART_DELTA} },

        };

        define ns16550Dev1Num NELEMENTS(ns16550Dev1Re-sources)

        然后在設(shè)備列表中定義2個(gè)串口設(shè)備:

        {"ns16550", 0, VXB_BUSID_PLB, 0, ns16550Dev0Num, ns16550Dev0Resources },

        {"ns16550", 1, VXB_BUSID_PLB, 0, ns16550Dev1Num, ns16550Dev1Resources },

        2)時(shí)鐘驅(qū)動(dòng)設(shè)計(jì)。

        龍芯1E1F開發(fā)板上使用的時(shí)鐘頻率為33 MHz,時(shí)鐘驅(qū)動(dòng)可以使用VxWorks開發(fā)環(huán)境中提供的MIPS R4K時(shí)鐘驅(qū)動(dòng),源文件為vxbMipsR4KTimer.c。需要在BSP的硬件配置文件hwconf.c中定義最小時(shí)鐘,最大時(shí)鐘,cpu頻率等時(shí)鐘驅(qū)動(dòng)參數(shù)。關(guān)鍵代碼如下。

        首先定義時(shí)鐘驅(qū)動(dòng)的相關(guān)驅(qū)動(dòng)參數(shù):

        struct hcfResource r4KTimerDevResources[] =

        {

        {"regBase", HCF_RES_INT, {(void *)0} },

        {"minClkRate", HCF_RES_INT, {(void *)SYS_CLK_RATE_MIN} },

        {"maxClkRate", HCF_RES_INT, {(void *)SYS_CLK_RATE_MAX} },

        {"cpuClkRate", HCF_RES_INT, {(void *) 33000000} }

        };

        define r4TimerDevNum NELEMENTS(r4KTimerDevResources)

        然后在設(shè)備列表中定義時(shí)鐘設(shè)備:

        {"r4KTimerDev",0,VXB_BUSID_PLB,0,r4TimerDevNum,r4KTimerDevResources},

        3)中斷控制驅(qū)動(dòng)設(shè)計(jì)。

        根據(jù)龍芯1E1F平臺(tái)的中斷控制器的特點(diǎn),中斷控制驅(qū)動(dòng)可以分層設(shè)計(jì)[10],將中斷驅(qū)動(dòng)分為3個(gè)層次,如圖3所示。第1層為MIPS中斷控制,共8個(gè)中斷類型,第2層為龍芯1E中斷控制,共32個(gè)中斷類型,第3層為龍芯1F中斷控制,共32個(gè)中斷類型。其中第2層龍芯1E的中斷是作為第1層MIPS中斷的第2種中斷類型進(jìn)行連接,第3層龍芯1F中斷是作為第2層龍芯1E的第17種中斷類型進(jìn)行連接。

        圖3中僅列出了本文涉及的串口中斷,時(shí)鐘中斷,龍芯1E中斷,龍芯1F中斷,SM1553B中斷,其他中斷類型可以參考龍芯芯片數(shù)據(jù)手冊(cè)[11]。

        圖3 龍芯1E1F中斷分層圖

        a)對(duì)MIPS中斷控制的驅(qū)動(dòng)可以使用VxWorks提供的mipsIntCtlr驅(qū)動(dòng),源文件為vxbMipsIntCtlr.c。在BSP的hwconf.c文件中配置MIPS驅(qū)動(dòng)中各個(gè)引腳中斷所屬的中斷服務(wù)設(shè)備。關(guān)鍵代碼如下。

        首先定義MIPS中斷控制設(shè)備的相關(guān)驅(qū)動(dòng)參數(shù):

        const struct intrCtlrInputs mipsIntCtlr0Inputs[] = {

        /* pin, driver, unit, index */

        /* IPI interrupts from IPI controller */

        {0, "legacy", 0, 0},

        {1, "legacy", 0, 0},

        {2, "LS1EIntCtlr", 0, 0},

        {7, "r4KTimerDev", 0, 0},

        };

        const struct hcfResource cpu0Resources[] = {

        { "regBase", HCF_RES_INT, {(void *)TRUE} },

        { "input", HCF_RES_ADDR, {(void *)&mipsIntCtlr0Inputs[0]} },

        { "inputTableSize", HCF_RES_INT, {(void *)NELEMENTS(mipsIntCtlr0Inputs)}}

        };

        define cpu0Num NELEMENTS(cpu0Resources)

        然后在設(shè)備列表中定義MIPS中斷控制器設(shè)備:

        { "mipsIntCtlr", 0, VXB_BUSID_PLB, 0, cpu0Num, cpu0Resources },

        b)對(duì)龍芯1E中斷控制的驅(qū)動(dòng)需要編寫新的VxBus類型的驅(qū)動(dòng)。中斷程序設(shè)計(jì)整體結(jié)構(gòu)上參考MIPS中斷控制程序。對(duì)于中斷服務(wù)程序需要進(jìn)行更改,在中斷服務(wù)程序中,需要首先讀取龍芯1E的中斷狀態(tài)寄存器,然后清除龍芯1E的中斷狀態(tài),防止重復(fù)產(chǎn)生中斷,接著再根據(jù)獲取的龍芯1E的中斷狀態(tài)依次調(diào)用所有發(fā)生中斷的子服務(wù)程序。中斷服務(wù)程序關(guān)鍵代碼如下:

        /*獲取中斷狀態(tài)*/

        vxbMipsLsnIntLevelGet (pInst, &ints);

        /*清除中斷*/

        MIPS_SW32(LS1E_INT_BASE+ LS1E_INT_ CLR, ints);

        /*調(diào)用子服務(wù)程序*/

        if (ints != (UINT32)0)

        {

        for (i = 0;i < LS1E_INT_INPUTS && ints != 0;i++,ints >>= 1)

        {

        if ((ints & 0x01) != 0)

        {

        VXB_INTCTLR_ISR_CALL(&pDrvCtrl->isrHandle, I +pInst->unitNumber * 32);

        }

        }

        }

        在BSP的hwconf.c文件中龍芯1E中斷控制器驅(qū)動(dòng)的配置為:

        定義龍芯1E中斷控制器的驅(qū)動(dòng)參數(shù):

        const struct intrCtlrInputs ls1EIntCtlrInputs0[] = {

        /* pin, driver, unit, index */

        /* interrupts inputs into cpu */

        {11, "ns16550", 0, 0 },

        {12, "ns16550", 1, 0 },

        {17, "LS1FIntCtlr", 0, 0 },

        };

        const struct hcfResource ls1EIntCtlrResources0[] = {

        { "regBase", HCF_RES_INT, {(void *)TRUE} },

        { "input", HCF_RES_ADDR, {(void *)&ls1EIntCtlrInputs0[0]} },

        { "inputTableSize", HCF_RES_INT, {(void *)NELEMENTS(ls1EIntCtlrInputs0)}},

        };

        define ls1EIntCtlrNum0 NELEMENTS(ls1EIntCtlrResources0)

        在設(shè)備列表中定義龍芯1E中斷控制器設(shè)備:

        {"LS1EIntCtlr",0,VXB_BUSID_PLB,0, ls1EIntCtlrNum0, ls1EIntCtlrResources0 },

        c)對(duì)龍芯1F中斷控制器的驅(qū)動(dòng)需要編寫新的VxBus類型的驅(qū)動(dòng)。中斷程序整體結(jié)構(gòu)上參考龍芯1E中斷控制的程序。同樣對(duì)于中斷服務(wù)程序需要進(jìn)行更改。在中斷服務(wù)程序中,需要首先讀取龍芯1F的中斷狀態(tài)寄存器,接著再根據(jù)獲取的龍芯1F的中斷狀態(tài)調(diào)用所有發(fā)生中斷的子服務(wù)程序。與龍芯1E中斷服務(wù)程序不同,在龍芯1F的中斷服務(wù)程序中不需要進(jìn)行中斷清除,某個(gè)引腳的中斷狀態(tài)的清除在被調(diào)用的中斷子服務(wù)程序中單獨(dú)進(jìn)行。中斷服務(wù)程序關(guān)鍵代碼如下:

        /*獲取中斷狀態(tài)*/

        vxbMipsLsn_1fIntLevelGet (pInst, &ints);

        /*調(diào)用子服務(wù)程序*/

        if (ints != (UINT32)0)

        {

        for (i = 0;i < (LS1F_INT_INPUTS) && ints != 0;i++,ints >>= 1)

        {

        if ((ints & 0x01) != 0)

        {

        VXB_INTCTLR_ISR_CALL(&pDrvCtrl->isrHandle,i);

        }

        }

        }

        在BSP的hwconf.c文件中龍芯1F中斷控制器驅(qū)動(dòng)的配置為:

        定義龍芯1F中斷控制器的驅(qū)動(dòng)參數(shù):

        const struct intrCtlrInputs ls1FIntCtlrInputs0[] =

        {

        /* pin, driver, unit, index */

        {31,"LS1F_sm1553b", 0, 0},

        };

        const struct hcfResource ls1FIntCtlrResources0[] = {

        { "regBase", HCF_RES_INT, {(void *)TRUE} },

        { "input", HCF_RES_ADDR, {(void *)& ls1FIntCtlrInputs0[0]} },

        { "inputTableSize", HCF_RES_INT, {(void *)NELEMENTS(ls1FIntCtlrInputs0)}},

        };

        define ls1FIntCtlrNum0 NELEMENTS(ls1FIntCtlrResources0)

        在設(shè)備列表中定義龍芯1F中斷控制器設(shè)備:

        {"LS1FIntCtlr",0,VXB_BUSID_PLB,0,ls1FIntCtlrNum0, ls1FIntCtlrResources0},

        4)龍芯1F芯片的智能1553B功能驅(qū)動(dòng)設(shè)計(jì)。

        首先在“C:WindRivervxworks-6.8 arget 3rdpartyvendorName”路徑下建立一個(gè)新的文件夾用來存放驅(qū)動(dòng)文件,文件夾名稱為L(zhǎng)S1FSM1553B,然后在該文件夾下分別建立vxbLS1F_sm1553b.c,40vxbLS1F_sm1553b.cdf,vxbLS1F_sm1553b.dc,vxbLS1F_sm1553b.dr,Makefile,README等幾個(gè)文件。其中vxbLS1F_sm1553b.c文件中包含了驅(qū)動(dòng)的實(shí)現(xiàn)代碼,是驅(qū)動(dòng)的主要文件。40vxbLS1F_sm1553b.cdf包含了用于vxWorks工程進(jìn)行圖形化配置1553B驅(qū)動(dòng)的描述信息。vxbLS1F_sm1553b.dc,vxbLS1F_sm1553b.dr文件包含1553B驅(qū)動(dòng)的注冊(cè)信息。Makefile文件用于將1553B驅(qū)動(dòng)編譯到目標(biāo)函數(shù)庫文件中,README文件包含了介紹驅(qū)動(dòng)的功能,使用方法等信息。

        在vxbLS1F_sm1553b.c文件中除了包含vxBus型驅(qū)動(dòng)所必需的第一階段初始化函數(shù)xxxinit(),第二階段初始化函數(shù)xxxinit2(),中斷連接與使能函數(shù)xxxConnect(),中斷服務(wù)函數(shù)xxxISR()等函數(shù)外,還對(duì)外提供了一系列的方法供上層應(yīng)用調(diào)用。提供的方法有BC功能初始化方法,BC啟動(dòng)方法,用戶自定義的中斷服務(wù)等。這里為了簡(jiǎn)便起見,在BC啟動(dòng)方法里面也完成了BC消息塊的設(shè)置和BC消息數(shù)據(jù)的設(shè)置。實(shí)際應(yīng)用中需要將BC消息塊的設(shè)置和BC數(shù)據(jù)的設(shè)置分別設(shè)計(jì)為可供上層應(yīng)用調(diào)用的驅(qū)動(dòng)方法,以增強(qiáng)驅(qū)動(dòng)的靈活性和適應(yīng)能力。

        源代碼文件和配置文件編輯完成后在VxWorks shell中使用編譯命令make CPU=MIPSI32R2 TOOL=gnule,將最新的智能1553B驅(qū)動(dòng)增加到庫文件中。其中MIPSI32R2表示將驅(qū)動(dòng)編譯成適合架構(gòu)為MIPS的32位R2類型CPU,gnule表示驅(qū)動(dòng)使用gnu編譯器編譯,并且編譯成小端模式。

        接著將40vxbLS1F_sm1553b.cdf拷貝到“C:WindRivervxworks-6.8 argetconfigcompsvxWorks”路徑下。然后將vxbLS1F_ sm1553b.dc,vxbLS1F_sm1553b.dr文件拷貝到“C:WindRivervxworks-6.8 argetconfigcompssrchwif”路徑下。完成驅(qū)動(dòng)在Wind River Workbench開發(fā)環(huán)境中的配置。更新驅(qū)動(dòng)文件后需要重新啟動(dòng)Workbench開發(fā)環(huán)境,并且重新建立工程才能使用新的驅(qū)動(dòng)程序。

        3 實(shí)驗(yàn)驗(yàn)證

        1)實(shí)驗(yàn)環(huán)境。

        目標(biāo)機(jī):龍芯1E1F開發(fā)板。

        宿主機(jī):研華工控機(jī)(i7處理器,16G內(nèi)存,2TB硬盤),Alta PCI 1553B 雙通道 仿真卡(用于模擬RT以及總線數(shù)據(jù)監(jiān)控),windows 7 x64,vxWorks6.8開發(fā)環(huán)境Workbench 3.2,On Chip Debugger ICE2(用于下載程序),AltaView Bus Analyzer(Alta PCI 1553B 雙通道 仿真卡的應(yīng)用軟件)。

        設(shè)備連接圖如圖4。

        圖4 龍芯1E1F實(shí)驗(yàn)連接圖

        2)實(shí)驗(yàn)過程。

        首先在workbench開發(fā)環(huán)境中創(chuàng)建一個(gè)VxWorks Image型工程,選擇相應(yīng)的支持龍芯1E1F的BSP,然后在工程的內(nèi)核模塊配置界面上將上文提到的ns16550串口,mips r4k 時(shí)鐘,mips中斷控制器,龍芯1E中斷控制器,龍芯1F中斷控制器,智能1553B等驅(qū)動(dòng)模塊都選擇上,然后保存工程。接著在usrAppInit.c文件中usrAppInit()函數(shù)內(nèi)添加應(yīng)用層代碼。通過調(diào)用智能1553B驅(qū)動(dòng)提供的一些方法,進(jìn)行1553B的BC功能和相關(guān)驅(qū)動(dòng)的功能測(cè)試。關(guān)鍵代碼如下:

        a)調(diào)用BC init方法執(zhí)行BC的初始化。

        methodLS1FBCInit = vxbDevMethodGet(devID,DEVMETHOD_CALL(ls1fbcInit));

        if(NULL != methodLS1FBCInit)

        {

        methodLS1FBCInit(devID,0);

        }

        b)添加用戶自定義的中斷服務(wù)函數(shù)。

        methodLS1FBCSetISR = vxbDevMethodGet(devID,DEVMETHOD_CALL(ls1fbcSetISR));

        if(NULL != methodLS1FBCSetISR)

        {

        methodLS1FBCSetISR(devID,sm1553bISR);

        }

        其中sm1553bISR內(nèi)部只進(jìn)行一個(gè)打印輸出:

        logMsg("1F 1553b new ISR, ",0,0,0,0,0,0);

        c)啟動(dòng)一個(gè)任務(wù)進(jìn)行每秒啟動(dòng)一次BC消息幀。

        taskSpawn("tBC-Test",100, 0,5000, (FUNCPTR) task_1F_BC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

        任務(wù)task_1F_BC中首先獲取SM1553b驅(qū)動(dòng)的ls1fbcStart方法,然后設(shè)計(jì)了一個(gè)while循環(huán)模塊,在循環(huán)中調(diào)用ls1fbcStart方法,然后通過taskDelay等待1秒鐘,再進(jìn)行下一個(gè)循環(huán)。主要代碼如下:

        VXB_DEVICE_ID devID = NULL;

        STATUS (*methodLS1FBCStart)(VXB_DEVICE_ID devID,void * pArg);

        devID = vxbInstByNameFind("LS1F_sm1553b",0);

        if(NULL != devID)

        {

        methodLS1FBCStart = vxbDevMethodGet ( devID,DEVMETHOD_CALL ( ls1fbcStart));

        }

        while(NULL != methodLS1FBCStart)

        {

        methodLS1FBCStart(devID,0);

        /*等待1秒,1秒 60個(gè)tick,*/

        taskDelay(60);

        }

        3)實(shí)驗(yàn)結(jié)果。

        系統(tǒng)啟動(dòng)后在串口終端運(yùn)行vxBusShow命令顯示當(dāng)前系統(tǒng)的驅(qū)動(dòng)和設(shè)備。從串口輸出可知當(dāng)前系統(tǒng)注冊(cè)的驅(qū)動(dòng)有mipsIntCtlr中斷控制器驅(qū)動(dòng),LS1F_sm1553b驅(qū)動(dòng),LS1FIntCtlr中斷控制器驅(qū)動(dòng),LS1EIntCtlr中斷控制器驅(qū)動(dòng),ns16550驅(qū)動(dòng),r4KTimerDev時(shí)鐘驅(qū)動(dòng)等,已經(jīng)與驅(qū)動(dòng)匹配的設(shè)備有LS1F_sm1553b unit0,mipsIntCtlr0,LS1FIntCtlr unit0,LS1EIntCtlr unit0,ns16550 unit0,ns16550 unit1,r4KTimerDev unit0等。

        BC運(yùn)行后,觀察串口輸出內(nèi)容(見圖5),每秒執(zhí)行了一次BC幀,并且響應(yīng)中斷2次,進(jìn)入了用戶自定義的中斷服務(wù)函數(shù)2次。表明中斷響應(yīng)過程正常。

        圖5 中斷響應(yīng)串口輸出圖

        通過Alta 1553B仿真卡提供的RT和BM功能可以監(jiān)控到1553B總線上進(jìn)行了從BC到RT4的消息傳輸,分別為子地址1,子地址2,子地址3,數(shù)據(jù)內(nèi)容與數(shù)據(jù)頻率與前面的BC消息塊設(shè)置一致。

        4 結(jié)論

        本文基于龍芯1E1F平臺(tái)和VxWorks系統(tǒng),對(duì)VxBus型驅(qū)動(dòng)設(shè)計(jì)技術(shù)進(jìn)行了詳細(xì)介紹,對(duì)串口、時(shí)鐘,中斷控制器和智能1553B的驅(qū)動(dòng)進(jìn)行了設(shè)計(jì),并通過實(shí)驗(yàn)驗(yàn)證,證明了VxBus型驅(qū)動(dòng)設(shè)計(jì)技術(shù)結(jié)構(gòu)更加清晰,能夠更好的進(jìn)行底層技術(shù)封裝,對(duì)上層應(yīng)用軟件開發(fā)提供了更加友好的接口。對(duì)未來航天領(lǐng)域基于龍芯和Vxworks系統(tǒng)的開發(fā)設(shè)計(jì)具有較高的參考價(jià)值。

        參考文獻(xiàn):

        [1]龍芯中科技術(shù)有限公司,龍芯1E處理器數(shù)據(jù)手冊(cè)[Z]. 北京:龍芯中科技術(shù)有限公司,2016.

        [2]龍芯中科技術(shù)有限公司,龍芯1F處理器用戶手冊(cè)[Z] . 北京:龍芯中科技術(shù)有限公司,2015.

        [3]向昱丞,周加誼,淺談VxBus的設(shè)備驅(qū)動(dòng)開發(fā)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2016,29(2):57-58.

        [4]王 雷,樊曉椏,王黨輝,龍芯3A平臺(tái)Vxworks移植的研究和實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2012,29(2):86-90.

        [5]史毅龍, 薛長(zhǎng)斌,基于“龍芯”的VxWorks系統(tǒng)函數(shù)在軌更新研究[J].電子設(shè)計(jì)工程,2015,23(21):106-109.

        [6]楊 曄,安軍社,VxWorks在龍芯處理器上移植與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,26(12-2):31-33.

        [7]陳學(xué)兵,沈毅南,張振華,VxWorks5.5在龍芯2號(hào)處理器的移植和性能分析[J].計(jì)算機(jī)測(cè)量與控制,2012,20(9):2542-2545.

        [8]Wind River.Device Driver Developer’s Guide Volume 1:Fundamentals of Writing Device Drivers 6.8,Wind River[Z].2009.

        [9]Wind River.Device Driver Developer’s Guide Volume 2: Writing Class-Specific Device Drivers 6.8,Wind River[Z].2009.

        [10]徐 騫,VxWorks下龍芯3A中斷控制技術(shù)的研究[J].現(xiàn)代電子技術(shù),2017,40(14):36-39.

        [11]龍芯中科技術(shù)有限公司,龍芯1E 1F開發(fā)手冊(cè)[Z] . 北京:龍芯中科技術(shù)有限公司, 2017.

        猜你喜歡
        服務(wù)程序龍芯中斷
        基于國(guó)產(chǎn)化龍芯的動(dòng)環(huán)數(shù)據(jù)采集系統(tǒng)
        基于移動(dòng)終端的人事信息員工自助服務(wù)系統(tǒng)設(shè)計(jì)
        基于C#的進(jìn)程守護(hù)程序的設(shè)計(jì)
        視聽(2020年3期)2020-06-11 14:28:18
        跟蹤導(dǎo)練(二)(5)
        千里移防,衛(wèi)勤保障不中斷
        解放軍健康(2017年5期)2017-08-01 06:27:44
        “龍芯之父”胡偉武
        龍芯發(fā)布新一代處理器產(chǎn)品
        水利工程施工監(jiān)理服務(wù)程序及質(zhì)量控制
        AT89C51與中斷有關(guān)的寄存器功能表解
        FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
        国产亚洲日韩在线三区| 丝袜美腿国产一区二区| 精品无码av无码专区| 久久久久波多野结衣高潮| 欧美色综合高清视频在线| 亚洲国产免费公开在线视频| 亚洲av激情一区二区| 国产精久久一区二区三区| 国产精品99久久久久久宅男| 99国产综合精品-久久久久| 日韩中文字幕熟女人妻| 人妻无码一区二区三区| 亚洲中文字幕无码mv| 亚洲国产成a人v在线观看| 精品人妻av中文字幕乱| 欧美成人秋霞久久aa片| 亚洲综合精品成人| 精品的一区二区三区| 亚洲av乱码一区二区三区人人| 门卫又粗又大又长好爽| 精品一品国产午夜福利视频| 中文字幕亚洲区第一页| 中文字幕久久久人妻人区| 久久久无码人妻精品无码| 欧美色欧美亚洲另类二区不卡| 一本大道综合久久丝袜精品 | 亚洲a无码综合a国产av中文| 白又丰满大屁股bbbbb| 国产成人av在线影院无毒| 懂色av一区二区三区网久久| 人妻洗澡被强公日日澡电影| 人人妻人人添人人爽日韩欧美 | 优优人体大尺大尺无毒不卡| 爱情岛永久地址www成人| 日本岛国精品中文字幕| 高清在线有码日韩中文字幕| 国产人与zoxxxx另类| 激情五月天伊人久久| 日韩伦理av一区二区三区| 欧美性xxxxx极品老少| 无码一区二区三区老色鬼|