• 介紹一種硬件自動發(fā)送1553B非周期消息的方法
           文章來源:北京石竹科技    來源鏈接:http://www.vme.cn/content/solution/solution_nr.asp?id=98

          本文介紹了一種使用CAV-1553B板卡實現(xiàn)硬件自動發(fā)送1553B總線非周期消息的方法。該方法通過使用條件Block來實現(xiàn),當用戶設置的條件(如狀態(tài)字、數據字匹配或匹配的次數)滿足時,CAV-1553B板卡上的固件將自動啟動非周期消息的發(fā)送。使用該方法,無需軟件介入,可實時實現(xiàn)非周期消息的發(fā)送,為用戶實現(xiàn)發(fā)送矢量字的模式字提供了一種方便的方法。

    1553B總線數據傳輸控制
          1553B總線通常按固定的數據傳輸時間表工作,即周期性的安排數據傳輸。需要根據數據通信任務的最大和最小發(fā)送周期以及允許的傳輸延遲來確定時間表的安排。大多數在總線上傳輸的消息是按一定更新頻率發(fā)送的周期性消息,周期消息中更新最慢的消息的周期被定為大周期(也被稱為“主幀”),如下圖所示。在一個大周期內,所有周期性的傳輸至少發(fā)生一次。典型的大周期是幾百毫秒,一些重復頻率極低的消息,如幾秒鐘一次的周期性自檢測及其相關數據傳輸,則按非周期消息處理。
    1 大周期和小周期
           消息中刷新頻率最快的通信任務對應小周期(也被稱為“子幀”),為了設計的方便,取大周期為小周期的整數倍,并且該整數位2的整數次冪。如果消息的最大允許傳輸延遲小于其更新的時間間隔,則以消息的最大允許傳輸延遲作為其安排時間表周期的依據。假設一個總線系統(tǒng)需要傳輸若干個周期消息,其中更新最慢的消息為400ms一次;更新最快的消息為每20ms一次,這種消息最大允許的傳輸延遲時間是15ms。那么,我們可以把大周期定為400ms,小周期定為12.5ms,即一個大周期被分為32個小周期。
     
           一個小周期內包括小周期同步消息、周期消息和非周期消息。小周期同步消息一般是同步方式指令或具有同步功能的數據消息,用來表示小周期的開始。小周期同步消息不是必須的,實際上,在相當多的應用中都沒有使用這種消息。周期消息具有特定的更新速率,可以通過在特定的小周期安排周期消息來實現(xiàn)消息的更新速率。非周期消息通常是由某些事件觸發(fā)的,并且會引發(fā)其他條件事件。在每一個小周期中,非周期消息一般插在周期消息之后傳輸。
     
           消息在小周期中的分布,要考慮消息的更新速率、允許的傳輸延遲時間和總線負載均衡等因素。在前面的例子中,如果某個消息的最大允許延遲時間是15ms,那么這個消息在每個小周期中都要安排傳輸一次,以保證一旦這個消息產生新數據,可以在最大允許延遲時間之內傳到目的終端。假如某個消息的更新周期和最大允許延遲時間都是25ms,那么可以在每兩個小周期中安排一次傳輸,也就是每間隔一個小周期安排一次。考慮到總線負載的均勻分布,每個小周期安排的總的消息傳輸量應該是相當的。
            由于消息間隔、RT響應時間、總線上偶發(fā)的重試等因素的影響,一個消息在每個小周期內的傳輸時間不完全一樣。因此不同的小周期,或者相同的小周期不同次的傳輸,消息占用的時間都是不一樣的。小周期可以依據系統(tǒng)時鐘定時傳輸,即每個小周期都占用分配給它的固定時間,在上例中是12.5ms,那么消息傳輸完后常常會有空閑時間。也可以充分利用總線提供的帶寬,一個小周期的消息傳輸完之后,即刻啟動下一個小周期的消息傳輸,此時小周期的傳輸實際上不是以固定頻率啟動的,因此稱為異步傳輸。
    硬件自動非周期消息發(fā)送控制方法
    條件Block介紹
           在CAV-1553B產品中,子幀中的每條消息在BC數據結構中都是由Message Block定義的,每個Mssage Block都對應一個Message buffer,用來存放發(fā)送或接收到的數據。Mssage Block中包含一個控制字(BC_control_word)用來指示Block的類型,如消息Block、條件Block等。
    其中條件Block是一種特殊的Block,它不是1553B消息Block,因此沒有Message buffer。用戶可通過條件Block來設置一定的條件,硬件自動檢測條件。當條件不滿足時,發(fā)送指定的周期消息;當條件滿足時,發(fā)送用戶指定消息。例如:當檢測到某條消息中RT狀態(tài)字的服務請求位置’1’時,發(fā)送用戶指定的非周期消息。
    條件Block中需要設置的項及含義如表1所示。


    設置項
    含義
    Next_message_ num
    指定條件不滿足時,執(zhí)行的消息
    Branch_message_num
    指定條件滿足時,執(zhí)行的消息
    BC_control_word
    指定Block的類型
    Test_word_address
    給出一個判斷對象的地址,這個判斷對象可以是命令字、狀態(tài)字、數據字。
    Data_mask
    Test_word的位有效指示字
    Data_pattern
    判斷結果
    Cond_count_value
    條件滿足次數

    表1 Block的設置項
    條件Block的設置
    (1) 設置當前Block的類型為條件Block。
    Block的BC_control_word設為CONDITION_BLOCK。
    (2) 設置條件滿足/不滿足時執(zhí)行的消息。
    指定條件滿足時執(zhí)行的Branch_message_num和條件不滿足時執(zhí)行的Next_message_ num。
    (3) 設置條件。
    首先,可在設置好的消息鏈表中指定一個字(Test_word)作為判斷的對象,這個字可以為命令字、狀態(tài)字或數據字,給出該字的地址Test_word_address。其次,給出Test_word的位有效指示字Data_mask和需要作比較的字Data_pattern。
    Test_word和Data_mask相與的結果與Data_pattern作比較,若等于則條件滿足,否則條件不滿足。
    (4) 設置次數。
    設置次數Cond_count_value,范圍從0到65535。當條件滿足并且次數也滿足時,執(zhí)行Branch_message_num,否則執(zhí)行Next_message_num。
     
    使用條件Block發(fā)送非周期消息示例
    (1) 消息的設置
    在主幀中設置一個子幀,子幀周期為4ms,子幀中包含以下四條消息:
    Ø  Block [0]: BCRT消息,RT地址1,子地址1,32個數據字。
    Ø  Block [1]: BCRT消息,RT地址1,子地址2,32個數據字。
    Ø  Block [2]: 條件Block。
    Ø  Block [3]: RTBC消息,RT地址1,子地址1,32個數據字。非周期消息。
    設置子幀中BC消息的鏈表順序為:
    圖2 消息發(fā)送順序
    (2)   條件Block的設置
           條件為判斷消息1中RT回的狀態(tài)字中的SERVICE_REQUEST被置位,匹配次數為2次。條件滿足時發(fā)送消息3,條件不滿足時發(fā)送發(fā)送周期消息。
    條件Block的具體設置如下:
    Ø  指定Branch_message_num = 3,Next_message_num = 0。
    Ø  Test_word_address為消息1中狀態(tài)字的地址。
    Ø  Data_mask = 0xF900;Data_pattern = 0x0900。
    Ø  次數Cond_count_value = 2。
    (3)   消息的傳輸
    子幀周期為4ms,子幀中消息的發(fā)送方式:當條件不滿足時,發(fā)送周期消息,如圖3所示;條件滿足時,消息的發(fā)送順序如圖4所示,此時非周期消息3被發(fā)送一次。之后仍按照圖3的順序發(fā)送,直到再次條件滿足時才發(fā)送非周期消息3。
    圖3 條件不滿足時消息發(fā)送順序
     
    圖4 條件滿足時消息發(fā)送順序
    BC Block設置示例代碼見附件example_core_pass4.cpp。
     
     硬件自動發(fā)送非周期消息的方法   請點擊此處下載全文  (預了解更多內容,請聯(lián)系作者本人)
     
    相關
     
    網站首頁  |  關于我們  |  聯(lián)系我們  |  廣告服務  |  版權隱私  |  友情鏈接  |  站點導航