沈祖崮,龔永紅,許怡冰
(珠海歐比特控制工程股份有限公司,珠海 519080)
?
沈祖崮,龔永紅,許怡冰
(珠海歐比特控制工程股份有限公司,珠海 519080)
以S698PM處理器為平臺,從1553B總線模塊的底層驅動程序入手,詳細介紹了VxWorks操作系統(tǒng)中1553B總線模塊的應用和開發(fā),結合驅動應用程序,分析介紹了1553B三種不同控制器方式BC、RT和BM的工作方式。
VxWorks;1553B;驅動程序;S698PM
19世紀60年代,飛機機載電子系統(tǒng)沒有標準的通用數據通道,各個電子設備單元之間的連接需要大量的電纜,隨著機載電子系統(tǒng)的不斷復雜化,這種通信方式所用的電纜占用了很大的空間,費用較高。為了解決這一問題,美國SAE A2K委員會在軍方和工業(yè)界的支持下于1968年決定開發(fā)標準的信號多路傳輸系統(tǒng),并于1973年公布了MIL-STD-1553標準。
經過30多年的發(fā)展,1553B多路傳輸數據總線成為現代軍機采用的技術,取代了在傳感器、計算機、指示器和其他飛機設備間傳遞數據的龐大設備,大大減輕了飛機的重量。
S698PM是珠海歐比特控制工程股份有限公司開發(fā)的基于SPARC V8架構的內部集成處理器,其內部提供了1553B模塊。VxWorks操作系統(tǒng)作為一種嵌入式實時操作系統(tǒng)(RTOS),高性能的內核以及友好的用戶開發(fā)環(huán)境已使VxWorks操作系統(tǒng)發(fā)展為當今流行的嵌入式系統(tǒng),其應用遍布通信、國防、工業(yè)控制和醫(yī)療設備等多個嵌入式領域。本文以S698PM為平臺,從底層驅動程序入手,詳細講述了VxWorks操作系統(tǒng)1553B模塊的應用和開發(fā)。
本文分三個步驟來講述基于S698PM處理器的VxWorks操作系統(tǒng)1553B模塊應用與開發(fā):創(chuàng)建VIP工程(VxWorks Image Project)、S698PM 1553B驅動應用編程和S698PM 1553B驅動應用程序執(zhí)行結果。創(chuàng)建的VIP工程不僅添加了1553B功能所需要的全部組件,并且將應用程序也編譯進來,方便用戶進行調試。驅動應用編程詳細介紹了應用層對底層驅動程序的調用和函數說明,讓用戶能更好地了解1553B驅動程序的結構,最后還給出了應用程序執(zhí)行的結果,方便用戶驗證程序的可行性。
打開Workbench,通過“File -> New -> VxWorks Image Project”創(chuàng)建新的VIP工程。輸入工程名S698PM_1553B,根據S698PM開發(fā)板硬件信息選擇“wrleon23mmu _sparcleon”BSP包和“gnuv8”編譯工具,由于S698PM具有SMP,因此還必須配置內核對SMP的支持。
Workbench提供了工程模板,在“Profile”選項框中可以選擇相應的kernel配置模板,本文選擇PROFILE_DEVELOPMENT開發(fā)型模板進行VxWorks開發(fā)。點擊Next和Finish即可完成VIP工程的創(chuàng)建。
完成工程的創(chuàng)建之后還需對內核進行配置。在Workbench左側的Project Explorer窗口中點擊創(chuàng)建的工程S698PM_1553B,再雙擊Kernel Configuration進入到內核配置界面,如圖1所示。
此時利用快捷鍵Ctrl+F進入到組件搜索界面, 輸入*diab,雙擊Matcupport routines(編譯工具,不能和GNU共存,所以要刪除),找到組件Diab compiler support routines,右擊選擇Exclude (quick exclude),將Diab組件去掉。然后用相同的操作,分別搜索built-in symbol table、shell banner,將這些組件添加(include)進來。
完成上述基本的配置之后,編譯項目就能實現一個簡單的VxWorks鏡像文件。為了讓編譯的鏡像文件具有1553B功能,需添加1553B組件,利用上述方法,找到組件obtWrMem for VxBus,并將其添加,如圖2所示。
圖2 添加1553B組件
完成上述操作后,依據S698PM開發(fā)板上的硬件信息修改以下參數:在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不同于一般設備,其工作方式主要通過對寄存器的配置來實現,因此其操作方式和普通的設備也不一樣,VxWorks操作系統(tǒng)的底層驅動針對1553B給出了Embc_SetMode()、Embc_BcAndMtStart()、Embc_BCReadMsg()、Embc_RTReadMsg()、Embc_MTReadMsg()、Embc_BCMinorFrm()、Embc_BCWriteMsg()、Embc_BCInit()、Embc_RTInit()、Embc_MTInit()等函數,供上層用戶調用,在本文的應用程序代碼中會介紹如何使用這些函數。
編程思想:S698PM具有兩個1553B端口0和1,每個端口又對應兩個通道A和B,本文利用1端口的A通道,通過設置芯片的三種控制器方式BC、RT以及BM與PCI進行通信。具體流程如圖3所示。
圖3 1553B應用編程流程圖
1553B應用編程實例如下:
(1) BC控制器方式
測試BC控制器應用程序:
{
……
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ā)起者,任何時刻總線上只有一個總線控制器,其負責發(fā)送命令、參與數據傳輸、接收狀態(tài)響應和檢測總線系統(tǒng)。
從代碼可以看出BC控制器方式的工作流程,首先利用函數Embc_SetMode( )設置1553B的控制器方式為BC模式,再利用函數Embc_BCInit( )對其初始化,初始化之前必須對初始化的內容進行配置。在完成初始化之后,就可以進行命令字和狀態(tài)字的配置,利用函數Embc_BCMinorFrm( )設置消息塊,在上述代碼中,BC模式每次只發(fā)一條消息。完成上述的配置之后,就可以利用函數Embc_BcAndMtStart( )啟動BC了。
(2) RT控制器方式
測試RT控制器應用程序:
{
……
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作為遠程終端,主要是對接收到的有效命令作出響應,發(fā)送狀態(tài)字,完成相應的動作。RT的配置方式相對BC來講稍微簡單一點,從代碼可以看出,它只需利用函數Embc_SetMode( )設置模式和Embc_RTInit( )初始化相應的模式內容就可以讀取數據了,讀取的數據包括塊狀態(tài)字、時間標志字、數據塊起始地址指針和接收到的16位命令字。
(3) BM控制器方式
測試BM控制器應用程序:
{
……
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模式主要實現對總線上的數據流進行有選擇的監(jiān)聽,其工作模式流程為:首先利用Embc_SetMode( )和Embc_MTInit( )完成MT控制器模式的配置和初始化工作,再利用Embc_BcAndMtStart( )進行MT模式的啟動;啟動完成之后就與RT模式一樣了,利用Embc_MTReadMsg( )監(jiān)聽消息。
上述幾個代碼清單中用到的函數,具體函數說明略——編者注。
利用耦合連接器將S698PM和PCI進行連接,連接方式為端口1的A通道。
(1) BC測試結果
當S698PM設置為BC控制器模式時,S698PM發(fā)送數據,PCI作為RT端接收數據,從圖4中可以看出,PCI接收到的數據正常,說明S698PM BC控制器模式工作正常。
圖4 VxWorks 1553B BC控制器模式測試
(2) RT測試結果
當S698PM設置為RT控制器模式時,PCI應該為BC模式,此時,PCI發(fā)送數據,S698PM接收數據,測試結果如圖5所示。
圖5 VxWorks 1553B RT控制器模式測試
可以看出,S698PM接收到的數據正常,說明S698PM作為RT控制器模式時工作正常。
(3) MT測試結果
當S698PM設置為MT工作模式時,其目的是監(jiān)聽總線上的數據流,此時把PCI設置為BC模式,S698PM設置為MT模式,PCI發(fā)送數據,S698PM監(jiān)聽發(fā)送的數據并接收,測試結果如圖6所示。
圖6 VxWorks 1553B MT控制器模式測試
可以看出,當S698PM為MT模式時,能夠正常監(jiān)聽總線上的數據流,從而說明S698PM為MT控制器模式時工作正常。
VxWorks作為目前流行的嵌入式操作系統(tǒng),其穩(wěn)定性能為1553B模塊提供了強大的開發(fā)空間,對于需要移植操作系統(tǒng)又同時具備1553B功能的設備來說意義重大。本文從基本的驅動程序入手,詳細講述了上層應用如何調用驅動程序,并給出了詳細的代碼以供參考,最后還給出了實際應用程序的執(zhí)行結果。在本文的基礎上,可以繼續(xù)研究1553B的其他功能。
[1] 徐惠民.基于VxWorks的嵌入式系統(tǒng)及實驗[M].北京:北京郵電大學出版社,2006.
[2] 孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2001.
[3] Li,Q.嵌入式系統(tǒng)的實時概念[M].王安生,譯.北京:北京航空航天大學出版社,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)