??? 摘? 要: 80C152單片機(jī)的工作原理和特點(diǎn)及其在HDLC通信規(guī)程中的應(yīng)用,給出了它的編程方法,并對(duì)其系統(tǒng)誤碼率進(jìn)行了分析。?
??? 關(guān)鍵詞: 全局串行通道? HDLC規(guī)程? CRC差錯(cuò)檢驗(yàn)
?
??? 80C152是一種基于MCS-51的高集成度8位微控制器,也是一種通用通信控制器。它既適用于外圍系統(tǒng)或器件的智能管理,也適用于低成本、高速串行通信場(chǎng)合。80C152是80C51的派生產(chǎn)品,保留了80C51的所有功能;增加了新的功能和外圍電路,包括:一種叫做全局串行通道(GSC)的高速多協(xié)議串行通訊接口,兩個(gè)直接存儲(chǔ)器存取(DMA)通道,HOLD/HLDA總線控制,第5、6、7個(gè)I/O口,較大的片內(nèi)RAM容量。因而特別適用于綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)、局域網(wǎng)和用戶定義的串行多機(jī)系統(tǒng)。?
1 80C152的主要特性與結(jié)構(gòu)?
??? 80C152的主要特性如下:?
??? (1)MCS-51兼容的UART;?
??? (2)多種省電工作方式;?
??? (3)可尋址64K字節(jié)數(shù)據(jù)存儲(chǔ)器;?
??? (4)可尋址64K字節(jié)程序存儲(chǔ)器;?
??? (5)兩個(gè)通用定時(shí)/計(jì)數(shù)器;?
??? (6)多協(xié)議串行通信I/O口(最大2.048Mbps/2.4Mbps),支持CSMA/CD和SDLC/HDLC,用戶定義協(xié)議;?
??? (7)全雙工/半雙工通信;?
??? (8)256字節(jié)片內(nèi)RAM;?
??? (9)兩個(gè)片內(nèi)DMA通道;?
??? (10)保持/響應(yīng)(HOLD/HLDA)總線控制;?
??? (11)7個(gè)I/O口;?
??? (12)58個(gè)SFR;?
??? (13)11個(gè)中斷源,除包含80C51的5個(gè)中斷源外,新增的6個(gè)中斷源用于全局串行通道。?
??? 上述(1)~(5)是與80C51相同的特性,(6)~(13)是80C152所特有或比80C51提高的特性。?
??? 其結(jié)構(gòu)簡(jiǎn)圖如圖1所示。?
?
?
2 全局串行通道?
??? 全局串行通道(GSC)是一個(gè)多協(xié)議、高性能的串行接口,用作通信控制器。GSC接口支持同步數(shù)據(jù)鏈路控制(SDLC)、具有沖突檢測(cè)的載波監(jiān)聽(tīng)多址訪問(wèn)(CSMA/CD)、用戶定義協(xié)議和高速數(shù)據(jù)鏈路控制(HDLC)協(xié)議的子集。GSC功能包括:地址識(shí)別、沖突解決、CRC產(chǎn)生、標(biāo)志產(chǎn)生、自動(dòng)重發(fā)送和硬件應(yīng)答特性。在使用片內(nèi)時(shí)鐘時(shí)可實(shí)現(xiàn)高至2Mbps數(shù)據(jù)速率,在使用外部時(shí)鐘時(shí)可實(shí)現(xiàn)高至2.4Mbps數(shù)據(jù)速率。在使用串行通道的應(yīng)用中,GSC可實(shí)現(xiàn)國(guó)際標(biāo)準(zhǔn)化組織(ISO)參考模型中所描述的開(kāi)放系統(tǒng)互連(OSI)的數(shù)據(jù)鏈路層和物理鏈路層。?
2.1 GSC通道的DMA服務(wù)?
??? 有兩種方法來(lái)控制GSC:一是CPU控制;二是DMA控制。在用戶軟件處理一些任務(wù)時(shí)(如裝入TFIFO、讀RFIFO、檢查狀態(tài)標(biāo)志、發(fā)送過(guò)程一般跟蹤),采用CPU控制。當(dāng)任務(wù)數(shù)增加及使用較高的數(shù)據(jù)速率,CPU所需開(kāi)銷(xiāo)成為主要時(shí)間消耗,最后,會(huì)達(dá)到CPU花費(fèi)100%的時(shí)間去響應(yīng)GSC請(qǐng)求。DMA通道可由用戶軟件設(shè)置為由DMA控制器來(lái)處理GSC數(shù)據(jù)傳送。80C152有兩個(gè)DMA通道,一個(gè)通道用于接收,一個(gè)通道用于發(fā)送。使用DMA通道時(shí),CPU可省去為GSC緩沖器基本服務(wù)所需的時(shí)間。DMA通道可提供的服務(wù)類(lèi)型為:裝入TFIFO、從RFIFO中移出數(shù)據(jù)、在收發(fā)結(jié)束時(shí)通知CPU和響應(yīng)一定的出錯(cuò)條件。在使用DMA通道時(shí),準(zhǔn)備串行發(fā)送的數(shù)據(jù)源或目的可以是內(nèi)部存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器或任何SFR。對(duì)DMA和GSC寄存器進(jìn)行初始化后的唯一任務(wù)是允許適當(dāng)?shù)刂袛嗖⑼ㄖ狣MA控制器什么時(shí)候啟動(dòng)DMA。在DMA啟動(dòng)后,CPU所需做的事就是響應(yīng)出錯(cuò)條件或等待傳送結(jié)束。80C152專門(mén)為GSC數(shù)據(jù)傳送提供了6個(gè)中斷源,它們是:GSCRV(GSC接收正確)、GSCRE(GSC接收出錯(cuò))、GSCTV(GSC發(fā)送正確)、GSCTE(GSC發(fā)送出錯(cuò))、DMA0(DMA通道0完成)、DMA1(DMA通道1完成)。?
2.2 80C152中的DMA?
??? 80C152包含兩個(gè)相同的可16位尋址的通用8位DMA通道:DMA0和DMA1。與每個(gè)通道相關(guān)的有7個(gè)SFR。SARLn和SARHn分別保存源地址的低位和高位字節(jié),合在一起構(gòu)成16位源地址寄存器。DARLn和DARHn分別保存目的地址的低位和高位字節(jié),合在一起構(gòu)成16位目的地址寄存器。BCRLn和BCRHn分別保存將被傳送字節(jié)數(shù)地址的低位和高位字節(jié),合在一起構(gòu)成字節(jié)計(jì)數(shù)寄存器。DCONn包含控制和標(biāo)志位。?
??? 對(duì)DMA通道的初始化需設(shè)置控制寄存器、源地址和目的地址寄存器。?
??? 控制寄存器DCON的裝入值及意義如圖2所示。?
?
?
??? DCONn中的DASn(目的地址空間位)和IDAn(目的地址自動(dòng)加1位)用于指出數(shù)據(jù)傳送的物理目的空間。DCONn中的SASn(源地址空間位)和ISAn(源地址自動(dòng)加1位)用于指出數(shù)據(jù)傳送的物理源空間。采用DMA控制器來(lái)處理GSC數(shù)據(jù)傳送時(shí),當(dāng)DMA通道用于接收服務(wù)時(shí),首先將接收機(jī)傳送來(lái)的數(shù)據(jù)自動(dòng)送入到接收緩沖器RFIFO中,其源地址寄存器應(yīng)置成RFIFO地址(SARHN=××H,SARLN=0F4H);然后,將接收緩沖器中的數(shù)據(jù)傳送到目的地址指定的物理空間,其可以是外部RAM、內(nèi)部RAM或SFR;最后,對(duì)收到的數(shù)據(jù)進(jìn)行CRC校驗(yàn),并通知CPU是否正確接收到該幀數(shù)據(jù)。當(dāng)DMA通道用于發(fā)送服務(wù)時(shí),首先將要發(fā)送的數(shù)據(jù)傳送到先入先出發(fā)送緩沖器TFIFO中,其目的地址寄存器應(yīng)置成TFIFO地址(DARHN=××H,DARLN=85H);然后,將先入先出發(fā)送緩沖器TFIFO中的數(shù)據(jù)傳送給發(fā)射機(jī);最后,對(duì)發(fā)送出去的數(shù)據(jù)進(jìn)行CRC校驗(yàn),并通知CPU是否正確發(fā)送了該幀數(shù)據(jù)。?
??? DCONn中的DM(請(qǐng)求方式位)和TM(傳送方式位)用于選擇DMA的工作方式。當(dāng)DMA服務(wù)于全局串行通道(GSC)時(shí),應(yīng)采用串行口請(qǐng)求方式。當(dāng)DCONn中的GO位置1時(shí),將啟動(dòng)DMA通道工作于全局串行傳輸方式。當(dāng)全局串行口接收或發(fā)送完一幀數(shù)據(jù)后,DCONn中的DONE位被置1,并將該信號(hào)傳送給CPU來(lái)產(chǎn)生中斷。?
3 HDLC操作?
??? 高級(jí)數(shù)據(jù)鏈路控制(High Data Link Control)規(guī)程,簡(jiǎn)稱HDLC規(guī)程,是面向位的鏈路控制規(guī)程。它與基本型規(guī)程不同,鏈路的監(jiān)控功能是通過(guò)一定的位組合所表示的命令和響應(yīng)來(lái)實(shí)現(xiàn)的,這些命令和響應(yīng)可以與信息報(bào)文一起傳送。HDLC規(guī)程具有透明傳輸、可靠性高、傳輸效率高并具有極大的靈活性等特點(diǎn)。它是由IBM公司開(kāi)發(fā)的通信協(xié)議,已廣泛應(yīng)用于工業(yè)領(lǐng)域。它基于主/從結(jié)構(gòu),要求每個(gè)從站都有唯一的地址。從站只有在允許通信時(shí)才能且只能和主站通信,這就消除了串行線路上由于幾個(gè)從站同時(shí)發(fā)送引起沖突的可能性。其幀結(jié)構(gòu)如圖3所示。?
?
?
??? BOF是HDLC的幀開(kāi)始標(biāo)志,為01111110。這是HDLC中僅有的兩個(gè)包含連續(xù)6個(gè)1的可能組合之一,另一個(gè)可能的組合是中止符。這是因?yàn)镠DLC采用了一種叫做位插入的過(guò)程,每發(fā)現(xiàn)有連續(xù)5個(gè)1時(shí)在下一位自動(dòng)插入一個(gè)0,接收器在收到連續(xù)5個(gè)1之后自動(dòng)刪去插入的0。所有位插入和位刪除操作均由GSC完成。BOF除了標(biāo)志幀的開(kāi)始,還用作時(shí)鐘同步和決定地址與控制字位置的參考點(diǎn)。?
??? ADDRESS是地址字段,用于表示報(bào)文發(fā)往何站。每個(gè)從站必須有唯一的地址,主站必須知道每個(gè)從站的指定地址。然而有些報(bào)文需要發(fā)往一個(gè)以上的站,這些報(bào)文成為廣播地址或群地址報(bào)文。全1構(gòu)成的地址總是自動(dòng)地被GSC接收,在HDLC中定義為廣播地址。群地址是指適用于一個(gè)以上站的地址,GSC提供了幾個(gè)地址屏蔽位,以使GSC接收群地址。如果需要的話,用戶軟件可以接收所有的地址位,這種屏蔽方式使GSC不加區(qū)分地接收所有地址。?
??? CONTROL是控制段,它用于系統(tǒng)初始化、標(biāo)志幀的序號(hào),并在報(bào)文發(fā)送完成后通知從站響應(yīng),對(duì)以前發(fā)送幀進(jìn)行應(yīng)答。由于GSC硬件沒(méi)有提供控制段的管理功能,用戶軟件擔(dān)負(fù)著控制段的插入、解釋和格式化。尾隨控制段的信息通常用于報(bào)文傳輸、出錯(cuò)報(bào)告和其他各種功能。這些功能由控制段的格式完成,有三種格式可供使用:報(bào)文格式、監(jiān)控格式和無(wú)序號(hào)格式。?
??? INFO是報(bào)文段,它包含線路中一個(gè)器件希望發(fā)給另一個(gè)器件的報(bào)文(數(shù)據(jù)),其長(zhǎng)度可為用戶所定,但必須是8位的倍數(shù)。報(bào)文段由前面的控制段和后面的CRC為接收站所標(biāo)識(shí)。GSC把接收的位通過(guò)CRC發(fā)生器來(lái)決定報(bào)文段的末尾。當(dāng)最后一位或EOF收到后,剩下的位組成CRC。?
??? CRC是循環(huán)冗余檢測(cè),是一種普遍用于串行通信的錯(cuò)誤檢測(cè)方法。?
4 系統(tǒng)誤碼率的分析?
??? 80C152提供兩種CRC算法:16位和32位算法。在大多數(shù)HDLC應(yīng)用中,16位CRC被使用,支持16位CRC的硬件結(jié)構(gòu)如圖4所示。
?
?
??? 16位CRC發(fā)生器生成的多項(xiàng)式為:?
??? G(X)=X16+X12+X5+1?????????????????????????????????????? ?(1)?
??? CRC工作時(shí),它把收到的位與現(xiàn)行CRC的位15進(jìn)行異或,放到一個(gè)暫存器中。在CRC右移一位時(shí),位15和接收位的異或值再與位4和位11進(jìn)行異或。暫存器中的位移入位0中。HDLC所需的CRC長(zhǎng)度為16位,接收時(shí)自動(dòng)從幀中除去CRC,它不傳到CPU。然后把最后16位傳往CRC發(fā)生器,以保證留下正確的值。檢驗(yàn)剩下值是否為001110100001111B(1D0FH)。如不匹配,則產(chǎn)生錯(cuò)誤。用戶軟件允許該中斷,從而使CPU可對(duì)此進(jìn)行處理。?
??? CRC校驗(yàn)可以檢測(cè)長(zhǎng)度不大于16的所有突發(fā)錯(cuò)誤、所有奇數(shù)個(gè)錯(cuò)誤和兩個(gè)獨(dú)立錯(cuò)誤,以及其他大量錯(cuò)誤圖樣。其計(jì)算公式如下:?
????
??? 根據(jù)上述計(jì)算公式可得,采用全局串行通道(GSC)來(lái)實(shí)現(xiàn)HDLC規(guī)程的數(shù)據(jù)傳輸,其系統(tǒng)誤碼率及幀漏檢概率如表1所示。?
?
?
5 編程應(yīng)用實(shí)例?
??? 下面介紹采用DMA控制全局串行通道(GSC)來(lái)實(shí)現(xiàn)HDLC規(guī)程的編程方法。在該系統(tǒng)中應(yīng)用兩路DMA通道分別控制數(shù)據(jù)的收、發(fā),其數(shù)據(jù)收、發(fā)子程序的流程圖如圖5所示。
?
?
??? 在現(xiàn)代通信系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)中,其鏈路層和物理層多數(shù)均采用HDLC規(guī)程。采用80C152單片機(jī)來(lái)實(shí)現(xiàn)HDLC規(guī)程,具有成本低、硬件結(jié)構(gòu)簡(jiǎn)單、軟件編程容易等特點(diǎn),又能夠保證高速、可靠的數(shù)據(jù)傳輸,具有廣泛的應(yīng)用前景。?
參考文獻(xiàn)?
1 郭梯云,劉增基,王新梅.數(shù)據(jù)傳輸. 北京:人民郵電出版社,1998.10?
2 荀殿棟,陳紹廉. 微處理器應(yīng)用技術(shù)與實(shí)例. 北京:電子工業(yè)出版社,1997.11?
3 樸 燕,王瑞光,王遵立. 一種快速CRC差錯(cuò)校驗(yàn)技術(shù).電子技術(shù)應(yīng)用, 1999;25(1)