基于Intel8274的機載同步通訊系統設計
異步串行通訊,諸如RS232、RS485等以簡單實用而眾所周知。同步串行通訊以異步不可比擬的高速度而應用在許多速度要求較高的通訊網絡。同步通信無需開始位和停止位,直接由同步時鐘對數據采樣,數據傳輸率等同于時鐘速率。其顯著特點就是兩端必須共享同一時鐘,發送方必須將時鐘和數據同時發送,接收方才能正確采樣。同步模式分為字節同步和位同步。國際標準化組織的HDLC(高級數據鏈路控制)協議是應用最普遍的同步協議,幀結構如表1所示,其中標志字節值為7EH。
Intel8274簡介
Intel8274是實現HDLC同步通信協議的最佳接口芯片,圖1是其管腳定義,有以下顯著特點:
?有異步、字節同步和位同步工作模式;
?2個獨立的、全雙工的接收器和發送器;
?和許多CPU接口兼容;
?4個獨立的DMA通道;
?波特率可達880K;
?異步模式下,具備通用串口的所有信號;
?在位同步時,自動產生并識別HDLC的開標志和關標志、自動進行零位插入和刪除、自動為發送數據產生CRC校驗碼并自動對接收數據進行CRC校驗、和CCITT的X.25兼容。
Intel8274的零位插入是為了把標志字節 7EH和正式數據中的7EH( 0111.1110B)區分開來。在發送一方,除標志字節之外的所有發送字節,每碰到有五個連續的“1”就自動插入一個“0”,從而保證了兩個標志字節之間的其它字節沒有7EH。在接收一方,接收到標志字節之后,每碰到字節中有五個連續的“1”后的一個“0”,將這個“0”刪除掉,恢復字節原值。發送方和接收方的CRC校驗都不包含這個額外插入的“0”和被刪除的“0”。硬件實現時很容易用鎖相環電路檢測出標志字節,方便地判斷同步數據幀的開始和結束。

圖1 Intel8274管腳定義

圖2 智能通訊板結構
系統硬件結構
Intel8274不僅性能優越,而且和各種CPU接口比較簡單。基于該芯片的某機載雷達設計的同步通信系統如圖2所示,整個系統采用二級CPU結構,將主CPU從煩瑣的通訊管理中解放出來。主CPU和通訊CPU共享雙口RAM,在此交換數據。主CPU只需將發送的同步數據幀填入發送緩沖區,由通訊CPU監控同步幀發送。當通訊CPU正確接收到完整的數據幀時直接放入接收緩沖區,然后通過中斷通知主CPU取走即可。
硬件細化設計時應該注意:
?時鐘
在圖2中,Intel8274的工作時鐘由3.6864MHz的時鐘直接輸入,而2個通道的發送時鐘由8254對工作時鐘進行分頻后給出。這樣可以由軟件對8254進行設置,靈活配置出各種適當的波特率。特別注意,經過差分驅動的信號應包括發送時鐘,而接收時鐘應該和接收數據一起由外部提供。
?中斷
同步通信不能使用查詢的方法,只能使用中斷驅動。必須把Intel8274的中斷請求信號/INT(Pin28)和中斷應答/INTA(Pin27)各自上拉10KW電阻,而將菊花鏈的中斷輸入/IPI(Pin29)接地。/INT未上拉時,Intel8274不能產生有效的低電平,CPU不可能響應中斷。/INTA未上拉時Intel8274可能向的數據線輸出中斷向量,擾亂CPU工作。而/IPI未接地時Intel8274的中斷請求有可能被抑制,時有時無,破壞系統的穩定性。
軟件設計
通信軟件主要使用TMS320的匯編語言實現,精華在于對Intel8274的中斷處理上。軟件初始化8274為同步模式時,應選擇CCITT的CRC,而不是CRC-16。為準確簡潔,我們采用最通用的算法描述語言。
同步數據幀發送算法
為了開始同步幀的發送,在所有情況下(包括DMA)都應該由CPU向8274寫入第一個字符。在HDLC協議中,第一個字符就是接收站點的節點地址,而不是開標志。開、關標志由8274自動插入。
Const // 常量定義
DONE = ... // 表示發送或接收過程已結束
DONE; // 幀發送過程尚未結束,正在運行,
RxDone := NOT_DONE; // 幀接收過程尚未結束
Reset Tx Intterrupt; // 復位發送中斷
Reset Tx CRC; // 復位CRC發生器。
Send Addr; // 發送幀地址,引爆幀發送開始。
Reset TxUnder-Run/EOM; // 立即復位下溢中斷,保證正確產生CRC
{此后,幀發送的實際過程由中斷完成,I8274硬件接口應該在規定的最大時間內應產生“下溢/幀結束”中斷,否則發生錯誤,應復位8274 }
while not TimeOut do
begin
if TxDone = DONE then // 由中斷過程設置 TxDone標志
begin
Wait CRC; // 等待CRC發送結束
Check TxResult; // 檢查發送結果是否正確。
Exit;
end;
end;
Reset 8274; // 至此,則超時退出,發生錯誤,復位8274。
end;
Intel8274中斷響應算法
HDLC協議的同步通訊必須由中斷驅動,主要是同步通訊的協議和校驗由硬件完成,軟硬件必須配合得當。中斷主要處理4類情況,一是利用“發送緩沖器空”中斷來發送幀數據,二是用“外部狀態變化”中斷來判斷幀發送結束,三是用“數據接收”中斷來接收數據幀,四是用“接收到特殊條件”中斷來判斷幀接收的開始和結束。在使用多個接收幀緩沖時,中斷處理要注意緩沖區切換正確。
procedure IntrruptTxRxFrame
begin
Read Interrpt Type; // 從8274讀中斷類型
case Interrpt Type of // 檢查中斷類型
1:Tx Empty: // “發送緩沖器空”中斷
if 數據未發送完 then
Send One byte // 從發送緩沖區讀取、并發送1字節
else
Reset Tx Empty Interrupt; // 復位此中斷,迫使產生下溢中斷;
2:External Status Chang // “外部狀態變化”中斷
if 是下溢中斷 then
TxDone := DONE // 幀發送結束,結果正確
else begin
TxDone := DONE; // 幀發送結束
TxResult := FAIL; // 但結果不正確
end;
3:RxChar // “接收到幀數據字符”
讀入并存到接收幀緩沖區;
4:RxSpecial: // "接收到特殊條件" 中斷
if End of Frame then // 幀接收結束
RxDone := DONE // 接收過程完成,結果正確
else begin
RxDone := DONE // 接收過程完成
RxResult := FAIL; // 但結果不正確.
Reset Error Interrupt
end;
else // 其余中斷忽略掉。
Ignore;
end;
Send EOI; // 發中斷結束命令.
end;
結語
同步通訊技術在不斷地發展,席卷全球的Internet網就是采用同步協議X..25連接了不同類型的計算機。同步通訊和異步通訊相對立而存在,相比較而發展。這里只是拋磚引玉,介紹了我們實際工作的一點體會和做法。同步通訊將向更高速率發展,應用在更多的日常電子設備中。
參考文獻
1 Intel: 《8274 Multi-Protocol Serial Controller》
2 TI: 《TMS320F240 DSP Controllers Refence Guide》



評論