您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

基于VxWorks的嵌入式系统复合通信模式

时间:2007-1-20栏目:电子通信论文

  
  3复合通信方式的实现与关键技术
  
  由于本文的讨论与单板机生产商所提供的板级支持包有关,而不同类型的单板机所提供的板
  
  
  
  级支持包(BSP、ESP)也会略有不同,为了不失一般性同时具有一定先进性,本文采用英国Radstone公司生产的PPCx系列单板机作示例。PPCx系列单板机功能集成度高、扩展性强、性能稳定,可以添加多种外围存储设备、支持高分辨显示,是一种理想的单板机系统。
  
  3.1基于VME总线的DMA通信方式
  
  在VME总线上,每个单板机如果要访问其它单板机的RAM,必须通信VME总线地址映射。因此,每块板上有两个地址译码器,一个用于VME总线地址→本地地址译码,而另一个用于本地地址→VME总线地址译码,这样就会存在多个不同的存储器地址映射。如果想要访问某个单板机的RAM,需要知道该单板机的RAM本地址所映射成的VME总线地址,然后通过访问VME总线地址映射到自身的本地地址而访问到系统控制器,甚至可以将其看成自身的RAM地址。多处理器地址映射关系如图2所示。
  
  综上所述,对于某一VME总线中的任务一块板而言,只要获得了它的本地地址到VME总线地址的映射关系,就可以从板外来访问该板的RAM。VxWorks标准函数库sysLib当中提供了函数sysLocaltoBusAddr(),可以直接获得本地地址的VME总线地址。这样,当前主机只需调用该函数获得自身RAM地址到VME地址映射,其它的主机就可以根据该映射得到的VME总线地址访问该主机。因此,当需要对于外板的某些控制寄存器进行位元操作的进修,这种方法就显得尤其重要:因为往往没有函数能够仅仅对于外板RAM的某个字节进行操作,更无法定位到位操作。
  
  为了进一步提高数据传输速率,可使用PPC4A上的VME控制芯片Tundra中集成的DMA控制器。它支持基于VME总线的DMA数据传输方式,而DMA是外存数据传输最有效的一种方式。具体步骤如下:
  
  ①安装DMA驱动程序,调用函数dmaDrv();
  
  ②建立DMA设备,调用函数dmaDevCreate();
  
  ③打开DMA进行读写,调用函数open()、write()、read()。
  
  DMA设备句柄就是一个类似于文件指针的数据类型,所以可以像一个标准数据操作来对待。开启设备后即可调用文件读写标准函数进行读写操作。通过较为严格的测试,DMA数据传输速率可以达到40Mb/s以上,并且不发生数据传输错误。
  
  为了保证主机对于其它主机DMA传输数据的实时响应,应当产生VME总线中断信号通知该主机。当某个主机发送数据完毕后,须调用VxWorks提供的函数sysBusIntGen()t向VME总线产生一个级别为intLevel、中断号为intNum的中断信号。
  
  接收端主机事先建立一个与该级别中断信号对应的客户中断服务程序,并将该客户中断服务程序链接到所要求级别的中断号上,从而实现对其进行实时响应。当主机接收到属于自己的中断信号后,会立刻自动调用该中断服务程序。这时可利用中断服务程序释放一个信号灯,通过该信号灯驱动相应的数据处理模块,从而实现实时操作。如下面的全程:
  
  /*客户中断服务程序*/
  
  voidintHdlr(SEM_IDsemId)
  
  voidintHdlr(SEM_IDsemId)
  
  {
  
  /*释放信号灯*/
  
  semGive(semId);
  
  }
  
  /*等待信号灯的处理模块*/
  
  voidprocesssModle(void)
  
  {
  
  /*等待信号灯*/
  
  semTake(semld);
  
  /*处理模块代码*/
  
  …
  
  }
  
  VME总线共有7个中断级别,排除系统使用的中断号,客户自定义中断号可从18设置到32。这样能够为足够多的主机设置中断服务程序,从而实现VxWorks操作系统下的多主机VME总线实时高速通信。

上一页  [1] [2] [3] [4] 下一页

下页更精彩:1 2 3 4 下一页