基于S698PM处理器的VxWorks操作系统1553B总线模块应用与开发
2017-01-05沈祖崮龚永红许怡冰
沈祖崮,龚永红,许怡冰
(珠海欧比特控制工程股份有限公司,珠海 519080)
沈祖崮,龚永红,许怡冰
(珠海欧比特控制工程股份有限公司,珠海 519080)
以S698PM处理器为平台,从1553B总线模块的底层驱动程序入手,详细介绍了VxWorks操作系统中1553B总线模块的应用和开发,结合驱动应用程序,分析介绍了1553B三种不同控制器方式BC、RT和BM的工作方式。
VxWorks;1553B;驱动程序;S698PM
引 言
19世纪60年代,飞机机载电子系统没有标准的通用数据通道,各个电子设备单元之间的连接需要大量的电缆,随着机载电子系统的不断复杂化,这种通信方式所用的电缆占用了很大的空间,费用较高。为了解决这一问题,美国SAE A2K委员会在军方和工业界的支持下于1968年决定开发标准的信号多路传输系统,并于1973年公布了MIL-STD-1553标准。
经过30多年的发展,1553B多路传输数据总线成为现代军机采用的技术,取代了在传感器、计算机、指示器和其他飞机设备间传递数据的庞大设备,大大减轻了飞机的重量。
S698PM是珠海欧比特控制工程股份有限公司开发的基于SPARC V8架构的内部集成处理器,其内部提供了1553B模块。VxWorks操作系统作为一种嵌入式实时操作系统(RTOS),高性能的内核以及友好的用户开发环境已使VxWorks操作系统发展为当今流行的嵌入式系统,其应用遍布通信、国防、工业控制和医疗设备等多个嵌入式领域。本文以S698PM为平台,从底层驱动程序入手,详细讲述了VxWorks操作系统1553B模块的应用和开发。
本文分三个步骤来讲述基于S698PM处理器的VxWorks操作系统1553B模块应用与开发:创建VIP工程(VxWorks Image Project)、S698PM 1553B驱动应用编程和S698PM 1553B驱动应用程序执行结果。创建的VIP工程不仅添加了1553B功能所需要的全部组件,并且将应用程序也编译进来,方便用户进行调试。驱动应用编程详细介绍了应用层对底层驱动程序的调用和函数说明,让用户能更好地了解1553B驱动程序的结构,最后还给出了应用程序执行的结果,方便用户验证程序的可行性。
1 创建VIP工程
打开Workbench,通过“File -> New -> VxWorks Image Project”创建新的VIP工程。输入工程名S698PM_1553B,根据S698PM开发板硬件信息选择“wrleon23mmu _sparcleon”BSP包和“gnuv8”编译工具,由于S698PM具有SMP,因此还必须配置内核对SMP的支持。
Workbench提供了工程模板,在“Profile”选项框中可以选择相应的kernel配置模板,本文选择PROFILE_DEVELOPMENT开发型模板进行VxWorks开发。点击Next和Finish即可完成VIP工程的创建。
完成工程的创建之后还需对内核进行配置。在Workbench左侧的Project Explorer窗口中点击创建的工程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开发板上的硬件信息修改以下参数:在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。
2 S698PM 1553B驱动应用编程
1553B不同于一般设备,其工作方式主要通过对寄存器的配置来实现,因此其操作方式和普通的设备也不一样,VxWorks操作系统的底层驱动针对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总线控制和管理,也是所有信息传输动作的发起者,任何时刻总线上只有一个总线控制器,其负责发送命令、参与数据传输、接收状态响应和检测总线系统。
从代码可以看出BC控制器方式的工作流程,首先利用函数Embc_SetMode( )设置1553B的控制器方式为BC模式,再利用函数Embc_BCInit( )对其初始化,初始化之前必须对初始化的内容进行配置。在完成初始化之后,就可以进行命令字和状态字的配置,利用函数Embc_BCMinorFrm( )设置消息块,在上述代码中,BC模式每次只发一条消息。完成上述的配置之后,就可以利用函数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作为远程终端,主要是对接收到的有效命令作出响应,发送状态字,完成相应的动作。RT的配置方式相对BC来讲稍微简单一点,从代码可以看出,它只需利用函数Embc_SetMode( )设置模式和Embc_RTInit( )初始化相应的模式内容就可以读取数据了,读取的数据包括块状态字、时间标志字、数据块起始地址指针和接收到的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模式主要实现对总线上的数据流进行有选择的监听,其工作模式流程为:首先利用Embc_SetMode( )和Embc_MTInit( )完成MT控制器模式的配置和初始化工作,再利用Embc_BcAndMtStart( )进行MT模式的启动;启动完成之后就与RT模式一样了,利用Embc_MTReadMsg( )监听消息。
上述几个代码清单中用到的函数,具体函数说明略——编者注。
3 S698PM 1553B驱动应用执行结果
利用耦合连接器将S698PM和PCI进行连接,连接方式为端口1的A通道。
(1) BC测试结果
当S698PM设置为BC控制器模式时,S698PM发送数据,PCI作为RT端接收数据,从图4中可以看出,PCI接收到的数据正常,说明S698PM BC控制器模式工作正常。
图4 VxWorks 1553B BC控制器模式测试
(2) RT测试结果
当S698PM设置为RT控制器模式时,PCI应该为BC模式,此时,PCI发送数据,S698PM接收数据,测试结果如图5所示。
图5 VxWorks 1553B RT控制器模式测试
可以看出,S698PM接收到的数据正常,说明S698PM作为RT控制器模式时工作正常。
(3) MT测试结果
当S698PM设置为MT工作模式时,其目的是监听总线上的数据流,此时把PCI设置为BC模式,S698PM设置为MT模式,PCI发送数据,S698PM监听发送的数据并接收,测试结果如图6所示。
图6 VxWorks 1553B MT控制器模式测试
可以看出,当S698PM为MT模式时,能够正常监听总线上的数据流,从而说明S698PM为MT控制器模式时工作正常。
结 语
VxWorks作为目前流行的嵌入式操作系统,其稳定性能为1553B模块提供了强大的开发空间,对于需要移植操作系统又同时具备1553B功能的设备来说意义重大。本文从基本的驱动程序入手,详细讲述了上层应用如何调用驱动程序,并给出了详细的代码以供参考,最后还给出了实际应用程序的执行结果。在本文的基础上,可以继续研究1553B的其他功能。
[1] 徐惠民.基于VxWorks的嵌入式系统及实验[M].北京:北京邮电大学出版社,2006.
[2] 孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2001.
[3] Li,Q.嵌入式系统的实时概念[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)