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