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