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