新闻中心

EEPW首页>嵌入式系统>设计应用> 一种多协议的嵌入式总线集成器的设计与研究

一种多协议的嵌入式总线集成器的设计与研究

作者: 时间:2009-10-28 来源:网络 收藏
2.2 软件实现的框架
  系统的软件分为系统初始化模块、系统配置模块、通信总调度模块、三个实现模块及硬件驱动模块。它们分别对应系统软件的不同分层。其中,系统配置模块、间通信总调度模块为应用层程序。协议实现模块(LonWorks协议模块、PPI协议模块、Open协议模块)为协议层程序。硬件驱动模块为硬件驱动层程序。其流程图如图3所示。

本文引用地址://m.amcfsurvey.com/article/152308.htm


  系统配置模块主要完成系统的配置。它包括各端口是配置为主模式还是从模式、各通信协议的波特率等。系统可以通过两种方式配置:一种为硬件方式配置,另一种是通过互连网进行软件配置。协议间通信总调度模块主要是驱动不同协议之间进行相互通信。各协议的格式解析分别由相应的协议模块完成。硬件驱动模块主要完成把各硬件缓冲区中的数据发送到,同时把从总线接收来的数据存放到协议缓冲区中。
2.3 缓冲区结构
  本系统的缓冲区采用改进的循环队列结构,采用了三个指针Bp.In、Bp.Out、Bp.Try。其中,Bp.In是队头指针。当队列接收一数据时,如果队列缓冲区尚有空间,则数据入队,同时Bp.In加1。Bp.Out是队尾指针。当数据要出队时, 如果队列缓冲区非空,则Bp.Out加1。队列缓冲区空或满的判定方法可以用下面的伪C语言描述:
  if(Bp.In++== Bp.Out)
  {队列缓冲区已满};//如队头加1等于队尾指针,则表示该队列已满
  if(Bp.Out== Bp.In)
  {队列缓冲区已空};//如果队尾指针赶上队头则表示该队列已空
  Bp.Try是为通信时重发而准备的。当要发送数据时,Bp.Try向前移动(Bp.Try++),但Bp.Out不动(数据不出队)。当Bp.Try=Bp.In时,表示队列缓冲区已没有数据要发送。如果要求数据重发,仅仅把Bp.Try重新指回Bp.Out(Bp.Try=Bp.Out)再次发送。只有当发送成功时,才允许数据出队(Bp.Out= Bp.Try)。由于一次发送数据的多少由Bp.Try决定(一次不一定把队列缓冲区数据都发送完),这样给数据的发送提供了极大的方便。
2.4 硬件缓冲区
  系统要发送数据时把发送协议缓冲区的数据拷贝到发送硬件缓冲区,并驱动一次发送后退出。硬件发送缓冲区中的数据是由发送中断自动完成的。硬件发送中断驱动完一次数据发送就退出。当硬件发送完数据后就会产生中断标志并重新进入中断,重复上面的过程直到数据发送完。同样,发送中断只负责发送完硬件发送缓冲区中的数据而不关心这些数据代表的意义。中断程序流程图如图4所示。


2.5 各总线协议间的通信方法
  各总线协议间通信是采用周期轮询方式下的实地址共享。其基本思想就是系统定时地由配置为主模式的端口向其对应总线的每个从机发送请求读数命令包。从机接收到命令后就把它的数据传送给主机(总线器)。主机把接收到的数据存放在对应的协议地址中。当配置为从机的端口所对应的总线上的主机向总线器请求数据时,总线器只是简单地把前一个周期轮询的数据应答过去。由于轮询总线的周期比较短,因此应答的数据稍微滞后。但对总线采集的数据的真实性影响不大。


  下面以图5中Open总线的节点B向LonWorks节点A请求数据为例来说明这种方式的通信过程。首先,系统周期性地改变从机号、通信命令、通信状态,向LonWorks所有的从机请求数据,从机应答的数据存放在其协议地址中。然后Open主节点B向总线集成器请求LonWorks总线A节点中的数据。最后,总线集成器收到该命令,把刚采集到的协议地址上的值传送给节点B。这一次通信至此结束。
  该多协议总线集成器目前提供了对LonWorks、PPI、CANOpen的支持,并且还对上面三种协议提供了利用TCP/IP远程监控和配置的接口,人机界面使系统有较好的监测能力。由于该集成器采用了较高性能的处理器,使各个协议之间通讯实时性得到保证。为了有利于系统以后的扩展,整个总线集成器系统严格按照模块化来进行硬件和软件编程,使系统软件的移植性大大提高。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭