周 琳, 沈劍滄, 鮑培明
(①安徽財(cái)貿(mào)職業(yè)學(xué)院 計(jì)算機(jī)科學(xué)系,安徽 合肥 230619;②固體微結(jié)構(gòu)物理國家重點(diǎn)實(shí)驗(yàn)室,南京大學(xué) 物理學(xué)系,江蘇 南京 210093;③南京師范大學(xué) 計(jì)算機(jī)科學(xué)系,江蘇 南京 210097)
數(shù)據(jù)在傳輸過程中,需要遵循一定的數(shù)據(jù)鏈路控制協(xié)議。目前數(shù)據(jù)通信中使用的數(shù)據(jù)鏈路控制協(xié)議主要有面向字符的數(shù)據(jù)鏈路層協(xié)議 BSC協(xié)議和面向位的數(shù)據(jù)鏈路層協(xié)議HDLC協(xié)議。相比較而言,面向位的數(shù)據(jù)鏈路層協(xié)議HDLC協(xié)議具有鮮明的優(yōu)點(diǎn):
① 使用統(tǒng)一的幀格式,實(shí)現(xiàn)數(shù)據(jù)、命令和響應(yīng)的傳輸,實(shí)施起來方便;
② 采用零位插入法,使規(guī)程可以支持任意的位流傳輸,保證了信息傳輸?shù)耐该餍裕?/p>
③ 采用窗口機(jī)制和捎帶應(yīng)答,支持全雙工工作方式,允許在未收到確認(rèn)情況下,連續(xù)發(fā)送多個(gè)幀,提高信息傳輸?shù)男剩?/p>
④ 采用幀校驗(yàn)序列,并設(shè)置窗口序號(hào),提高信息傳輸?shù)恼_性和可靠性[1]。
HDLC協(xié)議克服了BSC協(xié)議半雙工、低速率、處理復(fù)雜,傳輸數(shù)據(jù)必須采用?!确绞?,有字符校驗(yàn)?zāi)芰Χ鵁o塊校驗(yàn)?zāi)芰Φ热舾扇觞c(diǎn)。因此,在微機(jī)查號(hào)系統(tǒng)的設(shè)計(jì)中,采用HDLC協(xié)議來確保數(shù)據(jù)信息在微機(jī)查號(hào)排隊(duì)設(shè)備和話務(wù)員坐席臺(tái)之間正確高效地交換。
HDLC協(xié)議的實(shí)現(xiàn)方式有軟件實(shí)現(xiàn)或?qū)S糜布酒瑢?shí)現(xiàn)兩種。目前常用的硬件芯片有Motorola公司的MC92460、ST公司的MK5025、Zarlink公司的MT8952B等。由于采用硬件可達(dá)到快速封裝和解析,提高設(shè)備工作效率的目的,本文提出了在微機(jī)查號(hào)系統(tǒng)中采用 Zarlink公司的處理芯片MT8952B,以實(shí)現(xiàn)可靠的數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)方案。
微機(jī)查號(hào)系統(tǒng)即通信特服114,如圖1所示。
圖1 微機(jī)查號(hào)系統(tǒng)
在用戶撥打114時(shí),用戶的呼入信號(hào)經(jīng)過程控交換機(jī)進(jìn)入微機(jī)查號(hào)設(shè)備進(jìn)行排隊(duì),當(dāng)話務(wù)員坐席空閑時(shí),排隊(duì)器將用戶的呼入信號(hào)與坐席接通,話務(wù)員通過操作坐席計(jì)算機(jī)完成查號(hào)工作并送出自動(dòng)語音進(jìn)行報(bào)號(hào)。
HDLC協(xié)議芯片MT8952B是從屬于語音卡上的芯片,語音卡在微機(jī)查號(hào)系統(tǒng)中主要應(yīng)用于坐席工作臺(tái)和114排隊(duì)器設(shè)備的坐席接口板之間信息的傳遞、坐席接口板和線路接口板之間信息交換等。坐席工作臺(tái)與設(shè)備之間通信采用雙絞線電纜連接方式,傳送2B+D信號(hào),其中D信道的信號(hào)信息格式為HDLC協(xié)議格式。語音卡結(jié)構(gòu)框圖如圖2所示。
圖2 語音卡結(jié)構(gòu)
在坐席計(jì)算機(jī)送出自動(dòng)語音報(bào)號(hào)信息時(shí),單片機(jī)將從坐席計(jì)算機(jī)接收到的數(shù)字狀態(tài)信息和從存儲(chǔ)芯片中讀出的數(shù)字報(bào)號(hào)語音信息送到MT8952B HDLC協(xié)議控制器中,MT8952B HDLC協(xié)議控制器對(duì)數(shù)據(jù)打包并增加幀校驗(yàn)序列,變成具有HDLC協(xié)議功能的串行ST.BUS格式數(shù)據(jù),然后送入114排隊(duì)器中,由114排隊(duì)器中的數(shù)字網(wǎng)絡(luò)接口芯片MT8981對(duì)其進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,轉(zhuǎn)換成適合在線路上傳輸?shù)拇a流,并在線路上進(jìn)行傳輸,而接收數(shù)據(jù)過程與發(fā)送數(shù)據(jù)過程正好相反。
MT8952BHDLC協(xié)議芯片從硬件結(jié)構(gòu)上主要分三大塊:控制模塊、發(fā)送模塊、接收模塊。
控制模塊可接受外部的控制,主要完成復(fù)位芯片及初始化、地址譯碼、公共寄存器的控制、設(shè)置時(shí)鐘及時(shí)序方式等功能。
發(fā)送模塊由發(fā)送FIFO(First In First Out高速緩存)和協(xié)議封裝兩個(gè)子模塊組成,可完成發(fā)送控制、封裝數(shù)據(jù)協(xié)議以及對(duì)數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換等功能,其中,協(xié)議封裝主要包括封裝數(shù)據(jù)包頭和包尾、計(jì)算數(shù)據(jù)包的 CRC校驗(yàn)核及對(duì)整個(gè)數(shù)據(jù)流進(jìn)行零插入處理等幾個(gè)步驟。
接收模塊由接收FIFO和協(xié)議解析兩個(gè)子模塊組成??赏瓿山邮湛刂?、解析數(shù)據(jù)協(xié)議以及對(duì)收到的數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換等功能,其中,協(xié)議解析通過去掉插入的零字位、對(duì)數(shù)據(jù)包進(jìn)行CRC校驗(yàn)以及剝掉數(shù)據(jù)包的包頭和包尾等幾個(gè)步驟,最終還原出封裝前的數(shù)據(jù)。
在微機(jī)查號(hào)系統(tǒng)中MT8952B芯片初始化操作包括5個(gè)步驟:
① 芯片初始加電,操作控制寄存器中的RST字位 ,復(fù)位整個(gè)芯片;
② 設(shè)置時(shí)鐘寄存器中的時(shí)鐘方式字位,選擇芯片工作在外部時(shí)鐘還是內(nèi)部時(shí)鐘方式,一般采用外部時(shí)鐘方式。即芯片收、發(fā)數(shù)據(jù)時(shí)使用芯片外接時(shí)鐘管腿上所輸入的時(shí)鐘;
③ 為了便于觀察,可設(shè)置控制寄存器中空閑狀態(tài)字位,使芯片的發(fā)送管腿在空閑時(shí)發(fā)出7E(01111110)信號(hào);
④ 設(shè)置控制寄存器中收、發(fā)使能字位,激活接收、發(fā)送模塊;
⑤ 選擇需要使用的中斷,并將其在中斷控制寄存器中所對(duì)應(yīng)的字位設(shè)置為有效。保證芯片能正常收發(fā),至少需要使用的中斷有:
Tx m/n FULL :n為發(fā)送FIFO容量,in為發(fā)送FIFO中待發(fā)的字節(jié)數(shù):
Tx DONE:一整包數(shù)據(jù)發(fā)送完畢 ;
Rx n/m FULL :n為接收FIFO容量,nl為接收FIFO中已接收的字節(jié)數(shù);
其中,實(shí)現(xiàn)步驟①、②的代碼如下:
在微機(jī)查號(hào)系統(tǒng)中MT8952B芯片實(shí)現(xiàn)數(shù)據(jù)的發(fā)送過程控制分為3種情況:
① 當(dāng)需要發(fā)送的數(shù)據(jù)不足n個(gè)字節(jié)(n為發(fā)送FIFO容量)時(shí),則把除最后一個(gè)字節(jié)外的所有的數(shù)據(jù)寫入發(fā)送 FIFO,然后設(shè)置控制寄存器中的EOP(End Of Packet)字位,標(biāo)識(shí)下一個(gè)將要寫入的字節(jié)是本包數(shù)據(jù)的最后一個(gè)字節(jié),最后將最后一個(gè)字節(jié)寫入到發(fā)送FIFO,發(fā)送操作完畢[2];
② 當(dāng)需要發(fā)送的數(shù)據(jù)大于n個(gè)字節(jié)(n為發(fā)送FIFO容量 )時(shí) ,則多次把前n個(gè)字節(jié)寫入到發(fā)送FIFO中,當(dāng)待發(fā)送數(shù)據(jù)少于或等于n~m個(gè)字節(jié)時(shí),在最后一次中斷響應(yīng)程序中,進(jìn)行如同步驟①的操作;也可以采用中斷方式,第一次把前 n個(gè)字節(jié)寫入到發(fā)送 FIFO中然后等待 “Tx m/n FULL”中斷的產(chǎn)生,在中斷響應(yīng)程序中把接下來數(shù)據(jù)中的n—n1個(gè)字節(jié)寫入發(fā)送FIFO;在最后一次中斷響應(yīng)程序中,進(jìn)行如同步驟①的操作[2];
③ 結(jié)束一包數(shù)據(jù)的發(fā)送后,直到“Ix DONE”中斷產(chǎn)生并響應(yīng),才可以啟動(dòng)下一包數(shù)據(jù)的發(fā)送。
對(duì)于MT8952B芯片來說,n為19。
在微機(jī)查號(hào)系統(tǒng)中數(shù)據(jù)發(fā)送控制的具體實(shí)現(xiàn)細(xì)節(jié)如下。
(1)坐席狀態(tài)信息發(fā)送
坐席狀態(tài)信息量小于等于FIFO容量,即小于19字節(jié),因此,直接將要發(fā)送的坐席狀態(tài)信息寫入數(shù)據(jù)發(fā)送寄存器即可。發(fā)數(shù)據(jù)包子程序如下,其中FAST是變量,用于存放坐席狀態(tài)信息,其特點(diǎn)是信息比較少,少于FIFO允許的最大信息19字節(jié)。
(2)數(shù)字化報(bào)號(hào)語音發(fā)送
數(shù)字化報(bào)號(hào)語音數(shù)據(jù)量可能較大,因此是一種長信息的發(fā)送。當(dāng)語音數(shù)據(jù)量大于FIFO容量時(shí)通過循環(huán)字控制數(shù)據(jù)進(jìn)行多次發(fā)送即可。實(shí)現(xiàn)代碼如下:
(3)最后一個(gè)字節(jié)的發(fā)送處理
最后一個(gè)字節(jié)的發(fā)送處理方式,即將控制寄存器的 D0位寫入高電平,通知 CPU下一個(gè)要發(fā)送的數(shù)據(jù)是最后一個(gè)字節(jié),再進(jìn)行數(shù)據(jù)的發(fā)送。程序如下:
當(dāng)接收模塊接收到數(shù)據(jù)時(shí),視情況不同會(huì)產(chǎn)生不同中斷。接收數(shù)據(jù)控制分為3種情況:
① 當(dāng)接收到的數(shù)據(jù)包長小于n個(gè)字節(jié)(n為接收FIFO容量)時(shí),會(huì)產(chǎn)生“Rx DONE”中斷,此時(shí)在中斷響應(yīng)程序中讀取接收FIFO中的數(shù)據(jù),同時(shí)通過讀FIFO控制寄存器中的接收狀態(tài)位,判斷下一個(gè)字節(jié)是否為最后一個(gè)字節(jié),如果不是,繼續(xù)從接收FIFO中讀出數(shù)據(jù);如果是,則同樣通過讀FIFO控制寄存器中的接收狀態(tài)位來檢查對(duì)此包數(shù)據(jù)的CRC校驗(yàn)是否正確,如 CRC校驗(yàn)正確,則讀入最后一個(gè)字節(jié),完成一包有效數(shù)據(jù)的接收;反之,則丟棄該包數(shù)據(jù);
② 當(dāng)接收到的數(shù)據(jù)包長大于n個(gè)字節(jié)(n為接收FIFO容量)時(shí),會(huì)產(chǎn)生“Rx m/n FULL”中斷,此時(shí)在中斷響應(yīng)程序中讀出m一1個(gè)字節(jié)(接收FIFO在接收數(shù)據(jù)過程中不能為空,至少保證有1個(gè)字節(jié)存在),等待下一個(gè)“Rx m/n FULL”中斷。如果接收FIFO中已接收到最后一個(gè)字節(jié)后,接收模塊會(huì)產(chǎn)生“Rx DONE”中斷,中斷響應(yīng)操作如同上面所述[2];
③ 如果在接收過程中接收模塊產(chǎn)生“Rx ABORT”中斷,則意味著正在接收的一包數(shù)據(jù)為無效,丟棄已收到的字節(jié)[2]。
例如,微機(jī)查號(hào)系統(tǒng)中接收坐席狀態(tài)程序框圖如圖 3所示。
圖3 接收坐席狀態(tài)程序
程序從MT8952B的FIFO狀態(tài)寄存器中讀取狀態(tài)信息,判斷接受數(shù)據(jù)為數(shù)據(jù)包的哪個(gè)部分:數(shù)據(jù)包頭、數(shù)據(jù)包中或數(shù)據(jù)包尾。具體數(shù)據(jù)則是從FIFO數(shù)據(jù)接受寄存器中讀出的。程序設(shè)置標(biāo)志位 RNPT在接收到數(shù)據(jù)尾時(shí)判斷在此之前是否正確接收過數(shù)據(jù)包頭,如果是,表明數(shù)據(jù)接收正確,取數(shù)據(jù),如果不是則放棄,轉(zhuǎn)出錯(cuò)處理程序。程序設(shè)置CX為20,控制循環(huán)次數(shù)大于19,確保19字節(jié)數(shù)據(jù)可以正確讀出。
微機(jī)查號(hào)系統(tǒng)使用語音卡實(shí)現(xiàn)做細(xì)計(jì)算機(jī)和114排隊(duì)器設(shè)備之間信息及語音的傳送。語音卡采用MT8952B協(xié)議芯片,以硬件的形式進(jìn)行幀格式實(shí)現(xiàn)與解析,即將要發(fā)送的數(shù)據(jù)封裝成 HDLC協(xié)議幀格式并以數(shù)據(jù)包的形式送出;將接收的具有協(xié)議幀格式的數(shù)據(jù)包進(jìn)行解析,從中提取出有效數(shù)據(jù),傳送給座席計(jì)算機(jī),完成信息的雙向傳輸與交換[3]。采用該芯片實(shí)現(xiàn)的查號(hào)系統(tǒng)的信息交換,可以將問候語與報(bào)號(hào)信息都以數(shù)據(jù)包形式自動(dòng)報(bào)出,有效地減輕了話務(wù)員的工作量,提高效率。如果采用兩片MT8952B芯片,結(jié)合軟件編程,還可以實(shí)現(xiàn)兩路交叉工作,一路處于話務(wù)員應(yīng)答狀態(tài)時(shí),另一路可以向另一個(gè)用戶報(bào)號(hào),更有效地提高接入率,處理率。采用硬件芯片形式實(shí)現(xiàn)與采用軟件實(shí)現(xiàn)形式相比,更加簡潔高效[4]。設(shè)備已經(jīng)被很多電信公司采用,實(shí)踐證明它是一種行之有效和穩(wěn)定的技術(shù)。
[1] 付新虎,史浩,鄭喜鳳,丁鐵夫. HDLC協(xié)議在通信系統(tǒng)中的應(yīng)用[J].電子技術(shù), 2005(08):58-60.
[2] 韓露. 專用 HDLC協(xié)議芯片的應(yīng)用[J].移動(dòng)通信,2003(增刊):231-232.
[3] 談國文,張煒,朱丹,等.基于 HDLC協(xié)議的實(shí)時(shí)通信軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué), 2000,22(04):87-90.
[4] 文冠果,陳家錦,梁松海,等.一種新型的 128路多通道 HDLC引擎設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2004,21(09):173-176.