沈祖崮,龔永紅,許怡冰
(珠海歐比特控制工程股份有限公司,珠海 519080)
?
沈祖崮,龔永紅,許怡冰
(珠海歐比特控制工程股份有限公司,珠海 519080)
以S698PM處理器為平臺,從1553B總線模塊的底層驅(qū)動程序入手,詳細介紹了VxWorks操作系統(tǒng)中1553B總線模塊的應(yīng)用和開發(fā),結(jié)合驅(qū)動應(yīng)用程序,分析介紹了1553B三種不同控制器方式BC、RT和BM的工作方式。
VxWorks;1553B;驅(qū)動程序;S698PM
19世紀60年代,飛機機載電子系統(tǒng)沒有標準的通用數(shù)據(jù)通道,各個電子設(shè)備單元之間的連接需要大量的電纜,隨著機載電子系統(tǒng)的不斷復(fù)雜化,這種通信方式所用的電纜占用了很大的空間,費用較高。為了解決這一問題,美國SAE A2K委員會在軍方和工業(yè)界的支持下于1968年決定開發(fā)標準的信號多路傳輸系統(tǒng),并于1973年公布了MIL-STD-1553標準。
經(jīng)過30多年的發(fā)展,1553B多路傳輸數(shù)據(jù)總線成為現(xiàn)代軍機采用的技術(shù),取代了在傳感器、計算機、指示器和其他飛機設(shè)備間傳遞數(shù)據(jù)的龐大設(shè)備,大大減輕了飛機的重量。
S698PM是珠海歐比特控制工程股份有限公司開發(fā)的基于SPARC V8架構(gòu)的內(nèi)部集成處理器,其內(nèi)部提供了1553B模塊。VxWorks操作系統(tǒng)作為一種嵌入式實時操作系統(tǒng)(RTOS),高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境已使VxWorks操作系統(tǒng)發(fā)展為當(dāng)今流行的嵌入式系統(tǒng),其應(yīng)用遍布通信、國防、工業(yè)控制和醫(yī)療設(shè)備等多個嵌入式領(lǐng)域。本文以S698PM為平臺,從底層驅(qū)動程序入手,詳細講述了VxWorks操作系統(tǒng)1553B模塊的應(yīng)用和開發(fā)。
本文分三個步驟來講述基于S698PM處理器的VxWorks操作系統(tǒng)1553B模塊應(yīng)用與開發(fā):創(chuàng)建VIP工程(VxWorks Image Project)、S698PM 1553B驅(qū)動應(yīng)用編程和S698PM 1553B驅(qū)動應(yīng)用程序執(zhí)行結(jié)果。創(chuàng)建的VIP工程不僅添加了1553B功能所需要的全部組件,并且將應(yīng)用程序也編譯進來,方便用戶進行調(diào)試。驅(qū)動應(yīng)用編程詳細介紹了應(yīng)用層對底層驅(qū)動程序的調(diào)用和函數(shù)說明,讓用戶能更好地了解1553B驅(qū)動程序的結(jié)構(gòu),最后還給出了應(yīng)用程序執(zhí)行的結(jié)果,方便用戶驗證程序的可行性。
打開Workbench,通過“File -> New -> VxWorks Image Project”創(chuàng)建新的VIP工程。輸入工程名S698PM_1553B,根據(jù)S698PM開發(fā)板硬件信息選擇“wrleon23mmu _sparcleon”BSP包和“gnuv8”編譯工具,由于S698PM具有SMP,因此還必須配置內(nèi)核對SMP的支持。
Workbench提供了工程模板,在“Profile”選項框中可以選擇相應(yīng)的kernel配置模板,本文選擇PROFILE_DEVELOPMENT開發(fā)型模板進行VxWorks開發(fā)。點擊Next和Finish即可完成VIP工程的創(chuàng)建。
完成工程的創(chuàng)建之后還需對內(nèi)核進行配置。在Workbench左側(cè)的Project Explorer窗口中點擊創(chuàng)建的工程S698PM_1553B,再雙擊Kernel Configuration進入到內(nèi)核配置界面,如圖1所示。
此時利用快捷鍵Ctrl+F進入到組件搜索界面, 輸入*diab,雙擊Matcupport routines(編譯工具,不能和GNU共存,所以要刪除),找到組件Diab compiler support routines,右擊選擇Exclude (quick exclude),將Diab組件去掉。然后用相同的操作,分別搜索built-in symbol table、shell banner,將這些組件添加(include)進來。
完成上述基本的配置之后,編譯項目就能實現(xiàn)一個簡單的VxWorks鏡像文件。為了讓編譯的鏡像文件具有1553B功能,需添加1553B組件,利用上述方法,找到組件obtWrMem for VxBus,并將其添加,如圖2所示。
圖2 添加1553B組件
完成上述操作后,依據(jù)S698PM開發(fā)板上的硬件信息修改以下參數(shù):在Component Configuration窗口中選擇hardware (default)->memory (default)->BSP Memory Configuration。修改其中的RAM high Address為0x6200 3000;RAM low Address為0x6000 3000;local memory address修改為0x6000 0000;VX_SMP_NUM_CPUS修改為4。
在Project Explorer窗口中選擇S698PM_1553B工程下的wrleon23mmu_sparcleon,雙擊打開目錄下的config.h文件,修改RAM_HIGH_ADRS為0x6200 3000;RAM_LOW_ADRS為0x6000 3000;修改LOCAL_MEM_LOCAL_ADRS為0x6000 0000。
編譯整個工程,通過GRMON下載到目標板上運行。打開cygwin終端,進入工程目錄,連接GRMON并將生成的Image文件下載到目標板。步驟如下:
$grmon-i-u -nb-regmem-freq 70
$ lo vxWorks
$ run
運行VxWorks。
1553B不同于一般設(shè)備,其工作方式主要通過對寄存器的配置來實現(xiàn),因此其操作方式和普通的設(shè)備也不一樣,VxWorks操作系統(tǒng)的底層驅(qū)動針對1553B給出了Embc_SetMode()、Embc_BcAndMtStart()、Embc_BCReadMsg()、Embc_RTReadMsg()、Embc_MTReadMsg()、Embc_BCMinorFrm()、Embc_BCWriteMsg()、Embc_BCInit()、Embc_RTInit()、Embc_MTInit()等函數(shù),供上層用戶調(diào)用,在本文的應(yīng)用程序代碼中會介紹如何使用這些函數(shù)。
編程思想:S698PM具有兩個1553B端口0和1,每個端口又對應(yīng)兩個通道A和B,本文利用1端口的A通道,通過設(shè)置芯片的三種控制器方式BC、RT以及BM與PCI進行通信。具體流程如圖3所示。
圖3 1553B應(yīng)用編程流程圖
1553B應(yīng)用編程實例如下:
(1) BC控制器方式
測試BC控制器應(yīng)用程序:
{
……
Embc_SetMode(BCMODE);
bcconf = (BcInitHand)malloc(sizeof(BcInitType));
bcconf->isretry = true;
bcconf->num = doubled;
bcconf->resptime =RESPONSE_19;
bcconf->ttr = TIMETAG_64;
bcconf->autorepeat = 0;
Embc_BCInit(bcconf);
memset(msg,0,sizeof(MsgBlock));
msg->ControlWord = CW_CHANNELA;
for(i=0;i<32;i++)
msg->Data[i]=senddata[i];
msg->CmdWord1.word = 0x30;
Embc_SetValue(BCErrType,BCErrSta,pre);
Embc_BCWriteMsg(0, msg);
Embc_BCMinorFrm(1);
Embc_BcAndMtStart();
Embc_BCReadMsg(0,msg);
}
BC總線控制器對1553B總線控制和管理,也是所有信息傳輸動作的發(fā)起者,任何時刻總線上只有一個總線控制器,其負責(zé)發(fā)送命令、參與數(shù)據(jù)傳輸、接收狀態(tài)響應(yīng)和檢測總線系統(tǒng)。
從代碼可以看出BC控制器方式的工作流程,首先利用函數(shù)Embc_SetMode( )設(shè)置1553B的控制器方式為BC模式,再利用函數(shù)Embc_BCInit( )對其初始化,初始化之前必須對初始化的內(nèi)容進行配置。在完成初始化之后,就可以進行命令字和狀態(tài)字的配置,利用函數(shù)Embc_BCMinorFrm( )設(shè)置消息塊,在上述代碼中,BC模式每次只發(fā)一條消息。完成上述的配置之后,就可以利用函數(shù)Embc_BcAndMtStart( )啟動BC了。
(2) RT控制器方式
測試RT控制器應(yīng)用程序:
{
……
Embc_SetMode(RTMODE);
rtconf = (RtInitHand)malloc(sizeof(RtInitType));
rtconf->rtaddr = 5;
rtconf->ttr = 10;
rtconf->busy = false;
rtconf->cleartt = true;
rtconf->dynbus = false;
rtconf->loadtt = true;
rtconf->rxmode16 = true;
rtconf->service = false;
rtconf->subsys = false;
rtconf->terflag = false;
rtconf->resptime = RESPONSE_19;
if(Embc_RTInit(rtconf)==0)
printf("RT Init Success! ");
else
printf("RT Init Fault! ");
msgcount = 0;
while(1){
Embc_RTGetMsgNum(&msgcount);
if(msgcount > 0){
break;
}
}
Embc_RTReadMsg(0,msg);
printf("blk%x,cmm%x,%d ",msg->BlockStatus.word,msg->CmdWord1.word,msg->DataLength);
for(i = 0;i
printf("data %d is %x ",i,msg->Data[i]);
}
}
RT作為遠程終端,主要是對接收到的有效命令作出響應(yīng),發(fā)送狀態(tài)字,完成相應(yīng)的動作。RT的配置方式相對BC來講稍微簡單一點,從代碼可以看出,它只需利用函數(shù)Embc_SetMode( )設(shè)置模式和Embc_RTInit( )初始化相應(yīng)的模式內(nèi)容就可以讀取數(shù)據(jù)了,讀取的數(shù)據(jù)包括塊狀態(tài)字、時間標志字、數(shù)據(jù)塊起始地址指針和接收到的16位命令字。
(3) BM控制器方式
測試BM控制器應(yīng)用程序:
{
……
Embc_SetMode(MTMODE);
MtInitHand mtconf;
mtconf = (MtInitHand)malloc(sizeof(MtInitType));
mtconf->resptime = RESPONSE_19;
for(i=0;i<32;i++)
mtconf->tx[i] = true;
for(i=0;i<32;i++)
mtconf->rx[i] = true;
if(Embc_MTInit(mtconf)==0)
printf("MT Init Success!");
else
printf("MT Init Fault!");
free(mtconf);
Embc_BcAndMtStart();
while(1){
Embc_MTGetMsgNum(&msgcount);
if(msgcount > 0){
break;
}
}
printf("read read read ");
Embc_MTReadMsg(0,msg);
printf("blk%x,cmm%x,len%d ",msg->BlockStatus.word,msg->CmdWord1.word,msg->DataLength);
for(i = 0;i
printf("data %d is %x ",i,msg->Data[i]);
}
}
MT模式主要實現(xiàn)對總線上的數(shù)據(jù)流進行有選擇的監(jiān)聽,其工作模式流程為:首先利用Embc_SetMode( )和Embc_MTInit( )完成MT控制器模式的配置和初始化工作,再利用Embc_BcAndMtStart( )進行MT模式的啟動;啟動完成之后就與RT模式一樣了,利用Embc_MTReadMsg( )監(jiān)聽消息。
上述幾個代碼清單中用到的函數(shù),具體函數(shù)說明略——編者注。
利用耦合連接器將S698PM和PCI進行連接,連接方式為端口1的A通道。
(1) BC測試結(jié)果
當(dāng)S698PM設(shè)置為BC控制器模式時,S698PM發(fā)送數(shù)據(jù),PCI作為RT端接收數(shù)據(jù),從圖4中可以看出,PCI接收到的數(shù)據(jù)正常,說明S698PM BC控制器模式工作正常。
圖4 VxWorks 1553B BC控制器模式測試
(2) RT測試結(jié)果
當(dāng)S698PM設(shè)置為RT控制器模式時,PCI應(yīng)該為BC模式,此時,PCI發(fā)送數(shù)據(jù),S698PM接收數(shù)據(jù),測試結(jié)果如圖5所示。
圖5 VxWorks 1553B RT控制器模式測試
可以看出,S698PM接收到的數(shù)據(jù)正常,說明S698PM作為RT控制器模式時工作正常。
(3) MT測試結(jié)果
當(dāng)S698PM設(shè)置為MT工作模式時,其目的是監(jiān)聽總線上的數(shù)據(jù)流,此時把PCI設(shè)置為BC模式,S698PM設(shè)置為MT模式,PCI發(fā)送數(shù)據(jù),S698PM監(jiān)聽發(fā)送的數(shù)據(jù)并接收,測試結(jié)果如圖6所示。
圖6 VxWorks 1553B MT控制器模式測試
可以看出,當(dāng)S698PM為MT模式時,能夠正常監(jiān)聽總線上的數(shù)據(jù)流,從而說明S698PM為MT控制器模式時工作正常。
VxWorks作為目前流行的嵌入式操作系統(tǒng),其穩(wěn)定性能為1553B模塊提供了強大的開發(fā)空間,對于需要移植操作系統(tǒng)又同時具備1553B功能的設(shè)備來說意義重大。本文從基本的驅(qū)動程序入手,詳細講述了上層應(yīng)用如何調(diào)用驅(qū)動程序,并給出了詳細的代碼以供參考,最后還給出了實際應(yīng)用程序的執(zhí)行結(jié)果。在本文的基礎(chǔ)上,可以繼續(xù)研究1553B的其他功能。
[1] 徐惠民.基于VxWorks的嵌入式系統(tǒng)及實驗[M].北京:北京郵電大學(xué)出版社,2006.
[2] 孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2001.
[3] Li,Q.嵌入式系統(tǒng)的實時概念[M].王安生,譯.北京:北京航空航天大學(xué)出版社,2004.
[4] 珠海歐比特控制工程股份有限公司.V8mon使用手冊,2009.
[5] wr_workbench_users_guide_3.1.pdf[EB/OL].[2016-06].http://www.windriver.com.
[6] 珠海歐比特控制工程股份有限公司.OBT1553_MT-IP核用戶手冊,2008.
Shen Zugu,Gong Yonghong,Xu Yibing
(Zhuhai Oubita Control Engineering Co.,Ltd.,Zhuhai 519080,China)
Based on the processor of S698PM,the development and application of 1553B bus in the VxWorks operating system are introduced from the bottom driver of 1533B bus module.Combined with the driver application,the working ways of BC,RT and BM are analyzed and introduced in this paper.
VxWorks;1553B;drive program;S698PM
TP316
A
?士然
2016-06-29)