文章來源:
北京石竹科技 來源鏈接:
http://www.vme.cn/content/solution/solution_nr.asp?id=98
本文介紹了一種使用CAV-1553B板卡實現(xiàn)硬件自動發(fā)送1553B總線非周期消息的方法。該方法通過使用條件Block來實現(xiàn),當(dāng)用戶設(shè)置的條件(如狀態(tài)字、數(shù)據(jù)字匹配或匹配的次數(shù))滿足時,CAV-1553B板卡上的固件將自動啟動非周期消息的發(fā)送。使用該方法,無需軟件介入,可實時實現(xiàn)非周期消息的發(fā)送,為用戶實現(xiàn)發(fā)送矢量字的模式字提供了一種方便的方法。
1553B總線數(shù)據(jù)傳輸控制
1553B總線通常按固定的數(shù)據(jù)傳輸時間表工作,即周期性的安排數(shù)據(jù)傳輸。需要根據(jù)數(shù)據(jù)通信任務(wù)的最大和最小發(fā)送周期以及允許的傳輸延遲來確定時間表的安排。大多數(shù)在總線上傳輸?shù)南⑹前匆欢ǜ骂l率發(fā)送的周期性消息,周期消息中更新最慢的消息的周期被定為大周期(也被稱為“主幀”),如下圖所示。在一個大周期內(nèi),所有周期性的傳輸至少發(fā)生一次。典型的大周期是幾百毫秒,一些重復(fù)頻率極低的消息,如幾秒鐘一次的周期性自檢測及其相關(guān)數(shù)據(jù)傳輸,則按非周期消息處理。
圖1 大周期和小周期
消息中刷新頻率最快的通信任務(wù)對應(yīng)小周期(也被稱為“子幀”),為了設(shè)計的方便,取大周期為小周期的整數(shù)倍,并且該整數(shù)位2的整數(shù)次冪。如果消息的最大允許傳輸延遲小于其更新的時間間隔,則以消息的最大允許傳輸延遲作為其安排時間表周期的依據(jù)。假設(shè)一個總線系統(tǒng)需要傳輸若干個周期消息,其中更新最慢的消息為400ms一次;更新最快的消息為每20ms一次,這種消息最大允許的傳輸延遲時間是15ms。那么,我們可以把大周期定為400ms,小周期定為12.5ms,即一個大周期被分為32個小周期。
一個小周期內(nèi)包括小周期同步消息、周期消息和非周期消息。小周期同步消息一般是同步方式指令或具有同步功能的數(shù)據(jù)消息,用來表示小周期的開始。小周期同步消息不是必須的,實際上,在相當(dāng)多的應(yīng)用中都沒有使用這種消息。周期消息具有特定的更新速率,可以通過在特定的小周期安排周期消息來實現(xiàn)消息的更新速率。非周期消息通常是由某些事件觸發(fā)的,并且會引發(fā)其他條件事件。在每一個小周期中,非周期消息一般插在周期消息之后傳輸。
消息在小周期中的分布,要考慮消息的更新速率、允許的傳輸延遲時間和總線負(fù)載均衡等因素。在前面的例子中,如果某個消息的最大允許延遲時間是15ms,那么這個消息在每個小周期中都要安排傳輸一次,以保證一旦這個消息產(chǎn)生新數(shù)據(jù),可以在最大允許延遲時間之內(nèi)傳到目的終端。假如某個消息的更新周期和最大允許延遲時間都是25ms,那么可以在每兩個小周期中安排一次傳輸,也就是每間隔一個小周期安排一次。考慮到總線負(fù)載的均勻分布,每個小周期安排的總的消息傳輸量應(yīng)該是相當(dāng)?shù)摹?br />
由于消息間隔、RT響應(yīng)時間、總線上偶發(fā)的重試等因素的影響,一個消息在每個小周期內(nèi)的傳輸時間不完全一樣。因此不同的小周期,或者相同的小周期不同次的傳輸,消息占用的時間都是不一樣的。小周期可以依據(jù)系統(tǒng)時鐘定時傳輸,即每個小周期都占用分配給它的固定時間,在上例中是12.5ms,那么消息傳輸完后常常會有空閑時間。也可以充分利用總線提供的帶寬,一個小周期的消息傳輸完之后,即刻啟動下一個小周期的消息傳輸,此時小周期的傳輸實際上不是以固定頻率啟動的,因此稱為異步傳輸。
硬件自動非周期消息發(fā)送控制方法
條件Block介紹
在CAV-1553B產(chǎn)品中,子幀中的每條消息在BC數(shù)據(jù)結(jié)構(gòu)中都是由Message Block定義的,每個Mssage Block都對應(yīng)一個Message buffer,用來存放發(fā)送或接收到的數(shù)據(jù)。Mssage Block中包含一個控制字(BC_control_word)用來指示Block的類型,如消息Block、條件Block等。
其中條件Block是一種特殊的Block,它不是1553B消息Block,因此沒有Message buffer。用戶可通過條件Block來設(shè)置一定的條件,硬件自動檢測條件。當(dāng)條件不滿足時,發(fā)送指定的周期消息;當(dāng)條件滿足時,發(fā)送用戶指定消息。例如:當(dāng)檢測到某條消息中RT狀態(tài)字的服務(wù)請求位置’1’時,發(fā)送用戶指定的非周期消息。
條件Block中需要設(shè)置的項及含義如表1所示。
設(shè)置項
|
含義
|
Next_message_ num
|
指定條件不滿足時,執(zhí)行的消息
|
Branch_message_num
|
指定條件滿足時,執(zhí)行的消息
|
BC_control_word
|
指定Block的類型
|
Test_word_address
|
給出一個判斷對象的地址,這個判斷對象可以是命令字、狀態(tài)字、數(shù)據(jù)字。
|
Data_mask
|
Test_word的位有效指示字
|
Data_pattern
|
判斷結(jié)果
|
Cond_count_value
|
條件滿足次數(shù)
|
表1 Block的設(shè)置項
(1) 設(shè)置當(dāng)前Block的類型為條件Block。
將Block的BC_control_word設(shè)為CONDITION_BLOCK。
(2) 設(shè)置條件滿足/不滿足時執(zhí)行的消息。
指定條件滿足時執(zhí)行的Branch_message_num和條件不滿足時執(zhí)行的Next_message_ num。
(3) 設(shè)置條件。
首先,可在設(shè)置好的消息鏈表中指定一個字(Test_word)作為判斷的對象,這個字可以為命令字、狀態(tài)字或數(shù)據(jù)字,給出該字的地址Test_word_address。其次,給出Test_word的位有效指示字Data_mask和需要作比較的字Data_pattern。
將Test_word和Data_mask相與的結(jié)果與Data_pattern作比較,若等于則條件滿足,否則條件不滿足。
(4) 設(shè)置次數(shù)。
設(shè)置次數(shù)Cond_count_value,范圍從0到65535。當(dāng)條件滿足并且次數(shù)也滿足時,執(zhí)行Branch_message_num,否則執(zhí)行Next_message_num。
使用條件Block發(fā)送非周期消息示例
(1) 消息的設(shè)置
在主幀中設(shè)置一個子幀,子幀周期為4ms,子幀中包含以下四條消息:
Ø Block [0]: BCRT消息,RT地址1,子地址1,32個數(shù)據(jù)字。
Ø Block [1]: BCRT消息,RT地址1,子地址2,32個數(shù)據(jù)字。
Ø Block [2]: 條件Block。
Ø Block [3]: RTBC消息,RT地址1,子地址1,32個數(shù)據(jù)字。非周期消息。
設(shè)置子幀中BC消息的鏈表順序為:
圖2 消息發(fā)送順序
(2) 條件Block的設(shè)置
條件為判斷消息1中RT回的狀態(tài)字中的SERVICE_REQUEST被置位,匹配次數(shù)為2次。條件滿足時發(fā)送消息3,條件不滿足時發(fā)送發(fā)送周期消息。
條件Block的具體設(shè)置如下:
Ø 指定Branch_message_num = 3,Next_message_num = 0。
Ø Test_word_address為消息1中狀態(tài)字的地址。
Ø Data_mask = 0xF900;Data_pattern = 0x0900。
Ø 次數(shù)Cond_count_value = 2。
(3) 消息的傳輸
子幀周期為4ms,子幀中消息的發(fā)送方式:當(dāng)條件不滿足時,發(fā)送周期消息,如圖3所示;條件滿足時,消息的發(fā)送順序如圖4所示,此時非周期消息3被發(fā)送一次。之后仍按照圖3的順序發(fā)送,直到再次條件滿足時才發(fā)送非周期消息3。
圖3 條件不滿足時消息發(fā)送順序
BC Block設(shè)置示例代碼見附件example_core_pass4.cpp。