<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種多協(xié)議的嵌入式總線(xiàn)集成器的設計與研究

一種多協(xié)議的嵌入式總線(xiàn)集成器的設計與研究

作者: 時(shí)間:2009-10-28 來(lái)源:網(wǎng)絡(luò ) 收藏
2.2 軟件實(shí)現的框架
  系統的軟件分為系統初始化模塊、系統配置模塊、通信總調度模塊、三個(gè)實(shí)現模塊及硬件驅動(dòng)模塊。它們分別對應系統軟件的不同分層。其中,系統配置模塊、間通信總調度模塊為應用層程序。協(xié)議實(shí)現模塊(LonWorks協(xié)議模塊、PPI協(xié)議模塊、Open協(xié)議模塊)為協(xié)議層程序。硬件驅動(dòng)模塊為硬件驅動(dòng)層程序。其流程圖如圖3所示。

本文引用地址:http://dyxdggzs.com/article/152308.htm


  系統配置模塊主要完成系統的配置。它包括各端口是配置為主模式還是從模式、各通信協(xié)議的波特率等。系統可以通過(guò)兩種方式配置:一種為硬件方式配置,另一種是通過(guò)互連網(wǎng)進(jìn)行軟件配置。協(xié)議間通信總調度模塊主要是驅動(dòng)不同協(xié)議之間進(jìn)行相互通信。各協(xié)議的格式解析分別由相應的協(xié)議模塊完成。硬件驅動(dòng)模塊主要完成把各硬件緩沖區中的數據發(fā)送到,同時(shí)把從總線(xiàn)接收來(lái)的數據存放到協(xié)議緩沖區中。
2.3 緩沖區結構
  本系統的緩沖區采用改進(jìn)的循環(huán)隊列結構,采用了三個(gè)指針Bp.In、Bp.Out、Bp.Try。其中,Bp.In是隊頭指針。當隊列接收一數據時(shí),如果隊列緩沖區尚有空間,則數據入隊,同時(shí)Bp.In加1。Bp.Out是隊尾指針。當數據要出隊時(shí), 如果隊列緩沖區非空,則Bp.Out加1。隊列緩沖區空或滿(mǎn)的判定方法可以用下面的偽C語(yǔ)言描述:
  if(Bp.In++== Bp.Out)
  {隊列緩沖區已滿(mǎn)};//如隊頭加1等于隊尾指針,則表示該隊列已滿(mǎn)
  if(Bp.Out== Bp.In)
  {隊列緩沖區已空};//如果隊尾指針趕上隊頭則表示該隊列已空
  Bp.Try是為通信時(shí)重發(fā)而準備的。當要發(fā)送數據時(shí),Bp.Try向前移動(dòng)(Bp.Try++),但Bp.Out不動(dòng)(數據不出隊)。當Bp.Try=Bp.In時(shí),表示隊列緩沖區已沒(méi)有數據要發(fā)送。如果要求數據重發(fā),僅僅把Bp.Try重新指回Bp.Out(Bp.Try=Bp.Out)再次發(fā)送。只有當發(fā)送成功時(shí),才允許數據出隊(Bp.Out= Bp.Try)。由于一次發(fā)送數據的多少由Bp.Try決定(一次不一定把隊列緩沖區數據都發(fā)送完),這樣給數據的發(fā)送提供了極大的方便。
2.4 硬件緩沖區
  系統要發(fā)送數據時(shí)把發(fā)送協(xié)議緩沖區的數據拷貝到發(fā)送硬件緩沖區,并驅動(dòng)一次發(fā)送后退出。硬件發(fā)送緩沖區中的數據是由發(fā)送中斷自動(dòng)完成的。硬件發(fā)送中斷驅動(dòng)完一次數據發(fā)送就退出。當硬件發(fā)送完數據后就會(huì )產(chǎn)生中斷標志并重新進(jìn)入中斷,重復上面的過(guò)程直到數據發(fā)送完。同樣,發(fā)送中斷只負責發(fā)送完硬件發(fā)送緩沖區中的數據而不關(guān)心這些數據代表的意義。中斷程序流程圖如圖4所示。


2.5 各總線(xiàn)協(xié)議間的通信方法
  各總線(xiàn)協(xié)議間通信是采用周期輪詢(xún)方式下的實(shí)地址共享。其基本思想就是系統定時(shí)地由配置為主模式的端口向其對應總線(xiàn)的每個(gè)從機發(fā)送請求讀數命令包。從機接收到命令后就把它的數據傳送給主機(總線(xiàn)器)。主機把接收到的數據存放在對應的協(xié)議地址中。當配置為從機的端口所對應的總線(xiàn)上的主機向總線(xiàn)器請求數據時(shí),總線(xiàn)器只是簡(jiǎn)單地把前一個(gè)周期輪詢(xún)的數據應答過(guò)去。由于輪詢(xún)總線(xiàn)的周期比較短,因此應答的數據稍微滯后。但對總線(xiàn)采集的數據的真實(shí)性影響不大。


  下面以圖5中 Open總線(xiàn)的節點(diǎn)B向LonWorks節點(diǎn)A請求數據為例來(lái)說(shuō)明這種方式的通信過(guò)程。首先,系統周期性地改變從機號、通信命令、通信狀態(tài),向LonWorks所有的從機請求數據,從機應答的數據存放在其協(xié)議地址中。然后Open主節點(diǎn)B向總線(xiàn)集成器請求LonWorks總線(xiàn)A節點(diǎn)中的數據。最后,總線(xiàn)集成器收到該命令,把剛采集到的協(xié)議地址上的值傳送給節點(diǎn)B。這一次通信至此結束。
  該多協(xié)議總線(xiàn)集成器目前提供了對LonWorks、PPI、CANOpen的支持,并且還對上面三種協(xié)議提供了利用TCP/IP遠程監控和配置的接口,人機界面使系統有較好的監測能力。由于該集成器采用了較高性能的處理器,使各個(gè)協(xié)議之間通訊實(shí)時(shí)性得到保證。為了有利于系統以后的擴展,整個(gè)總線(xiàn)集成器系統嚴格按照模塊化來(lái)進(jìn)行硬件和軟件編程,使系統軟件的移植性大大提高。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>