《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 基于MPC860的HDLC通道驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)

基于MPC860的HDLC通道驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)

2008-09-24
作者:羅文翰1,, 張劍鋒2

  摘 要: 闡述了MPC860芯片及其SCC接口的基本工作原理,介紹了在SCC通道上實(shí)現(xiàn)HDLC協(xié)議的基本設(shè)計(jì)思想及具體實(shí)現(xiàn),,并給出了主要功能函數(shù)的設(shè)計(jì)流程,。
  關(guān)鍵詞: HDLC MPC860 VxWorks操作系統(tǒng) 驅(qū)動(dòng)程序


  HDLC作為一種基于點(diǎn)到點(diǎn)/多點(diǎn)的數(shù)據(jù)鏈路" title="鏈路">鏈路層協(xié)議,,常常用來(lái)連接路由器和網(wǎng)關(guān)等網(wǎng)絡(luò)設(shè)備。摩托羅拉公司生產(chǎn)的MPC860微處理器是當(dāng)前應(yīng)用非常廣泛的嵌入式微處理器,,良好的性?xún)r(jià)比和強(qiáng)大的通信與網(wǎng)絡(luò)協(xié)議處理能力以及豐富的通信接口支持使其非常適合構(gòu)建VOIP網(wǎng)關(guān),;特別是其SCC接口本身支持HDLC協(xié)議,因此可以通過(guò)它的一個(gè)SCC接口來(lái)為VOIP網(wǎng)關(guān)和信令網(wǎng)" title="信令網(wǎng)">信令網(wǎng)之間提供鏈路支持,。VOIP作為一種基于IP的數(shù)據(jù)傳輸技術(shù),,廣泛地利用Internet全球互連環(huán)境,將傳統(tǒng)的PSTN電話(huà)網(wǎng)和Internet網(wǎng)絡(luò)合二為一,,因此可以有效地降低系統(tǒng)成本和管理成本,。作為一種高效且經(jīng)濟(jì)的數(shù)據(jù)和話(huà)音通信方式,它是當(dāng)前技術(shù)研究和開(kāi)發(fā)的熱點(diǎn),。實(shí)現(xiàn)VOIP的關(guān)鍵是IP網(wǎng)關(guān),,其中信令網(wǎng)關(guān)主要將信令網(wǎng)的信令信息轉(zhuǎn)換成Internet網(wǎng)絡(luò)的相關(guān)報(bào)文控制信息。本文介紹如何在MPC860板的SCC2通道上實(shí)現(xiàn)HDLC的驅(qū)動(dòng)程序,,從而為信令網(wǎng)和網(wǎng)關(guān)之間提供鏈路支持,。
1 HDLC簡(jiǎn)介
  HDLC是一個(gè)在同步網(wǎng)上傳輸數(shù)據(jù)并面向位的數(shù)據(jù)鏈路層協(xié)議,具有透明傳輸,、可靠性高,、傳輸效率高以及靈活性高等特點(diǎn)。它采用點(diǎn)對(duì)點(diǎn)或多點(diǎn)(多路播送或一對(duì)多)連接的主/從結(jié)構(gòu),,要求每個(gè)從站都有唯一的地址,,從站只有在允許通信時(shí)才能且只能和主站通信,這就消除了串行線(xiàn)路上由于幾個(gè)從站同時(shí)發(fā)送引起沖突的可能性,。其它的通用的二層協(xié)議如SS#7,、AppleTalk、 LAPB、LAPD等都是基于HDLC及其幀結(jié)構(gòu)的,。HDLC幀結(jié)構(gòu)如圖1所示,。


  F:標(biāo)志位,每個(gè)HDLC幀以8位序列(01111110)標(biāo)志幀的開(kāi)始和結(jié)束,這是HDLC中僅有的兩個(gè)包含連續(xù)六個(gè)1的可能組合,。為了避免在其它域中出現(xiàn)這種組合,,HDLC采用了一種叫作位插入的辦法實(shí)現(xiàn)組合,即每發(fā)現(xiàn)有連續(xù)五個(gè)1時(shí)便在下一位自動(dòng)插入一個(gè)0,,接收器在收到連續(xù)五個(gè)1之后又自動(dòng)刪去插入的0,。標(biāo)志位除了標(biāo)志幀的開(kāi)始和結(jié)束外,還可用作時(shí)鐘同步,,接收設(shè)備不斷地搜尋標(biāo)志位,,以實(shí)現(xiàn)幀同步,從而保證接收部分對(duì)后續(xù)字段的正確識(shí)別,。另外,,在幀與幀的空載期間,可以連續(xù)發(fā)送這種標(biāo)志序列,,用作時(shí)間填充,。
  A:目的地址位,用于指示報(bào)文發(fā)往何站。每個(gè)從站必須有唯一的地址,,主站必須知道每個(gè)從站的指定地址,。全“1”構(gòu)成的地址在HDLC中定義為廣播地址,全“0”構(gòu)成的地址在HDLC中定義為無(wú)站地址,,用于測(cè)試數(shù)據(jù)鏈路的狀態(tài),。
  C:控制位,用于系統(tǒng)初始化、標(biāo)志幀的序號(hào),,并在報(bào)文發(fā)送完成后通知從站響應(yīng),,對(duì)以前發(fā)送幀進(jìn)行應(yīng)答。尾隨控制段的信息通常用于報(bào)文傳輸,、出錯(cuò)報(bào)告和其它各種功能,,這些功能由控制段的格式完成。有三種格式可供使用:報(bào)文格式,、監(jiān)控格式和無(wú)序號(hào)格式,。
  I:信息域,是可選的,。如果信息存在,,它必須有8位整數(shù)數(shù)量的長(zhǎng)度。
  CRC:幀校驗(yàn)位,長(zhǎng)度為16位或32位,,幀校驗(yàn)序列用于對(duì)幀進(jìn)行循環(huán)冗余校驗(yàn),,其校驗(yàn)范圍從地址字段的第一比特到信息字段的最后一比特的序列,,并且規(guī)定為了透明傳輸而插入的“0”不在校驗(yàn)范圍內(nèi)。
  HDLC常被用來(lái)向X.25,、ISDN和幀中繼網(wǎng)等提供信令和控制數(shù)據(jù)鏈路。
2 MPC860及其SCC接口
  MPC860是美國(guó)摩托羅拉公司生產(chǎn)的一種通用的32位嵌入式通信控制器,。它是以RISC體系結(jié)構(gòu)為基礎(chǔ)并在片內(nèi)集成有微處理器和多種外設(shè)接口的專(zhuān)用通信芯片,,具有強(qiáng)大的通信和網(wǎng)絡(luò)協(xié)議處理能力,可廣泛應(yīng)用于各種通信和網(wǎng)絡(luò)產(chǎn)品中,。它主要由嵌入式PowerPC內(nèi)核,、系統(tǒng)接口單元(SIU)和通信處理器模塊(CPM)組成。它的CPM提供了豐富的串行通道,,包括四個(gè)串行通信控制器(SCC),、兩個(gè)串行管理單元(SMC)、一個(gè)串行外圍接口(SPI)和一個(gè)I2C接口,。
  其中,,SCC是MPC860最強(qiáng)大的通信設(shè)備。四個(gè)SCC端口通過(guò)相應(yīng)的配置可支持不同的協(xié)議,,如以太網(wǎng),、IEEE802.3 10M局域網(wǎng)、HDLC,、appleTalk,、通用異步收發(fā)協(xié)議UART、同步UART,、串行紅外線(xiàn)接口IrDA,、二進(jìn)制同步通信BISYNC及透明發(fā)送等網(wǎng)絡(luò)協(xié)議,可以分別用于網(wǎng)橋,、路由器,、網(wǎng)關(guān)、LAN,、WAN及專(zhuān)用網(wǎng),。因此,本文將其中的一個(gè)SCC端口配置成HDLC模式用在VOIP信令網(wǎng)關(guān)中,,為信令網(wǎng)和網(wǎng)關(guān)之間提供鏈路支持,。SCC數(shù)據(jù)通信基本流程如圖2所示。


  當(dāng)處于接收狀態(tài)時(shí),,數(shù)據(jù)首先進(jìn)入FIFO,。當(dāng)接收FIFO充滿(mǎn)時(shí),CPM向SCC發(fā)請(qǐng)求,,并由CPM RISC處理該請(qǐng)求,,然后通過(guò)寫(xiě)SDMA將數(shù)據(jù)按照緩存描述符" title="描述符">描述符的指示存入指定的緩存中,。緩存描述符是進(jìn)行數(shù)據(jù)收發(fā)的基礎(chǔ),它由三個(gè)部分組成:頭16個(gè)比特用來(lái)描述收發(fā)的狀態(tài)模式,;接下來(lái)是數(shù)據(jù)長(zhǎng)度" title="數(shù)據(jù)長(zhǎng)度">數(shù)據(jù)長(zhǎng)度描述符,,表示即將存入緩存的數(shù)據(jù)長(zhǎng)度;最后是數(shù)據(jù)指針,,它指向即將存入數(shù)據(jù)的緩存,。發(fā)送過(guò)程與接收過(guò)程基本上是一樣的,通過(guò)緩存描述符,,能夠正確讀寫(xiě)緩存,。
3 驅(qū)動(dòng)程序的設(shè)計(jì)思想及其實(shí)現(xiàn)
  這里選擇VxWorks作為本CPU板的操作系統(tǒng)。VxWorks是美國(guó)風(fēng)河系統(tǒng)公司推出的一種高性能,、可裁減的實(shí)時(shí)嵌入式操作系統(tǒng),,以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛應(yīng)用于通信、軍事,、航天等領(lǐng)域,。因此,程序的設(shè)計(jì)必須按照這個(gè)操作系統(tǒng)的結(jié)構(gòu)來(lái)構(gòu)建,。本文的主要目的是將MPC860處理器的一個(gè)SCC通道配置成為HDLC模式,,以支持VxWorks操作系統(tǒng)下的HDLC通信,所以程序的設(shè)計(jì)主要圍繞這個(gè)目的進(jìn)行,,在此并沒(méi)有按照傳統(tǒng)驅(qū)動(dòng)的模式構(gòu)建驅(qū)動(dòng)程序,,而是直接對(duì)硬件進(jìn)行操作。首先設(shè)置通道參數(shù),將其配置成HDLC模式,,然后設(shè)計(jì)基本功能函數(shù),。當(dāng)驅(qū)動(dòng)程序運(yùn)行時(shí),首先要進(jìn)行SCC通道的初始化以及存儲(chǔ)區(qū)的初始化,,然后才開(kāi)始執(zhí)行收發(fā)功能,,在這當(dāng)中要加上中斷控制。按照這個(gè)程序的基本流程,,具體的實(shí)現(xiàn)分為下面幾步(在本設(shè)計(jì)中將SCC2配置成HDLC模式),。
3.1 定義參數(shù)RAM
  參數(shù)RAM主要包括通道參數(shù)RAM和通道協(xié)議參數(shù)RAM兩部分,SCC通道的主要參數(shù)都在這個(gè)里面配置,。它們包含CPM RISC用來(lái)正確操作SCC通道的特定協(xié)議所用的信息,。
3.2 初始化SCC2
  (1)將MPC860的PA12、PA13引腳作為SCC2的收發(fā)引腳,。
  (2)MPC860有四個(gè)BGR和八個(gè)外部時(shí)鐘引腳,,將SCC的收發(fā)時(shí)鐘分別配置成內(nèi)部時(shí)鐘和外部時(shí)鐘。
  (3)將SCC2配置為NMSI模式,。
  (4)初始化SDCR寄存器,,給予SDMA一個(gè)仲裁ID以提供U總線(xiàn)上的優(yōu)先級(jí),。
  (5)初始化SCC2的參數(shù)RAM(這步對(duì)所有的協(xié)議都是通用的):
  ①設(shè)置Rx/TxBD 表的基址相對(duì)于雙端口RAM的偏移量,;
 ?、谠O(shè)置收發(fā)緩沖區(qū)描述符表基址相對(duì)于IMMR寄存器中值的偏移量;
 ?、墼O(shè)置Rx/Tx 的函數(shù)代碼,;
  ④在MRBLR中設(shè)置接收緩存的最大" title="最大">最大空間,。
  (6)針對(duì)SCC2的HDLC模式進(jìn)行初始化;
 ?、偻ㄟ^(guò)C_MASK和C_PRES 設(shè)置CCITT-CRC,;
  ②對(duì)CPM維護(hù)的五個(gè)計(jì)數(shù)器DISFC,、CRCEC,、 ABTSC、 NMARC和RETRC清零,;
 ?、墼贛FLR中定義最大幀長(zhǎng)度,通常定義為0x0100,,表示最大幀長(zhǎng)度為256字節(jié);
 ?、茉赗FTHR中定義接收到多少個(gè)HDLC幀時(shí)產(chǎn)生一個(gè)中斷申請(qǐng),當(dāng)將RFTHR置位0x0001時(shí),,表示每接收到一個(gè)幀產(chǎn)生一個(gè)中斷申請(qǐng);
 ?、菰O(shè)置接收地址,hmask用來(lái)定義地址掩碼,,當(dāng)hmsk=0x0000時(shí),,表示接收所有幀。
  每個(gè)SCC有四個(gè)地址存儲(chǔ)器HADDR1~HADDR4,,所以每個(gè)SCC可識(shí)別四個(gè)地址,,包括廣播地址。接收時(shí),,通過(guò)與HDLC幀的目的地址進(jìn)行比較,,確定接收該幀還是丟棄。
3.3 初始化收發(fā)緩存區(qū)描述符
  (1)在初始化緩存區(qū)描述符的過(guò)程中,,收發(fā)都必須停止,。通過(guò)將GSMR_L2的ENT和ENR置零,然后配置CPCR中的CP命令就可以禁止收發(fā),。
  (2)配置收發(fā)緩存區(qū)描述符:
 ?、倥渲卯?dāng)前接收緩存區(qū)描述符表的基地址,,即IMMR的基地址再加上收發(fā)緩存區(qū)描述符表相對(duì)于IMMR的偏移地址。由于發(fā)送緩存區(qū)描述符表緊跟在接收緩存區(qū)描述符表的后面,,因此發(fā)送緩存區(qū)描述符表的基地址為接收緩存區(qū)描述符表的基地址加上整個(gè)接收緩存區(qū)描述符表的長(zhǎng)度,。
  ②初始化發(fā)送緩存區(qū)描述符表和接收緩存區(qū)描述符表,。如果收發(fā)緩存區(qū)都為空,,分別將每一個(gè)發(fā)送緩存區(qū)描述符表和接收緩存區(qū)描述符表的狀態(tài)模式參數(shù)中的狀態(tài)位E置1、數(shù)據(jù)長(zhǎng)度置0,,并將它們的地址設(shè)置成相應(yīng)的值,。如果收緩存區(qū)或發(fā)緩存區(qū)不為空,則應(yīng)該先將這些緩存區(qū)清零,。值得注意的是,,最后一個(gè)收發(fā)緩存區(qū)描述符表的W位必須置1。
  (3)初始化完成后,,應(yīng)該將ENT和ENR位置1,。
3.4 收發(fā)功能的實(shí)現(xiàn)
3.4.1 接收函數(shù)

  接收函數(shù)流程圖如圖3所示。


  在GSMR_L2寄存器的ENR位置1的前提下,,HDLC控制器進(jìn)入接收允許狀態(tài),。在正式讀入數(shù)據(jù)前,必須先檢測(cè)幀開(kāi)始標(biāo)志,,并匹配地址,,然后決定是否進(jìn)入接收狀態(tài)。進(jìn)入接收狀態(tài)后,,首先提取RxBD的狀態(tài)模式字節(jié),,若接收未準(zhǔn)備好,則繼續(xù)等待,,若準(zhǔn)備好了,,則開(kāi)始接收。由于一個(gè)數(shù)據(jù)包可以放置于多個(gè)緩存,,所以檢測(cè)RxBD狀態(tài)模式字節(jié)的L位,,以判斷是否為本幀的最后一個(gè)緩存:如果不是,則關(guān)閉這個(gè)緩存,,處理下一個(gè)緩存描述字,;如果是,接收完最后一個(gè)緩存的數(shù)據(jù)后結(jié)束接收過(guò)程,。對(duì)于最后一個(gè)buffer,,需要檢測(cè)是否有接收錯(cuò)誤。
3.4.2 發(fā)送函數(shù)
  發(fā)送函數(shù)流程圖如圖4所示,。


  在GSMR_L2寄存器的ENT位置1的前提下,,HDLC控制器進(jìn)入發(fā)送允許狀態(tài),。首先提取TxBD的狀態(tài)模式字節(jié),若發(fā)送未準(zhǔn)備好,,則繼續(xù)等待,,若準(zhǔn)備好了,則進(jìn)入發(fā)送狀態(tài),,在發(fā)送數(shù)據(jù)中間插入適當(dāng)?shù)臉?biāo)志位后就可以發(fā)送,。由于一個(gè)發(fā)送數(shù)據(jù)包可以包含多個(gè)緩存,所以檢測(cè)TxBD狀態(tài)模式字節(jié)的L位,,以判斷是否為最后一個(gè)緩存:如果不是,,則關(guān)閉這個(gè)緩存,處理下一個(gè)緩存描述字,;如果是,,控制器進(jìn)入關(guān)閉發(fā)送狀態(tài)。對(duì)于最后一個(gè)buffer,,需要做兩件事情:(1)檢測(cè)是否有發(fā)送錯(cuò)誤。(2)以剩下的實(shí)際數(shù)據(jù)長(zhǎng)度作為發(fā)送幀中數(shù)據(jù)段的長(zhǎng)度發(fā)送出去,。
3.5 中斷處理
  在這個(gè)驅(qū)動(dòng)程序中,,只處理SCC2產(chǎn)生的中斷。首先確定是否是CPM產(chǎn)生的中斷,,然后讀取寄存器CPM中斷向量寄存器(CIVR)的VN字段判斷是否為SCC2產(chǎn)生的中斷,。如果是的話(huà),就讀取SCEE確定中斷類(lèi)型,,然后做出相應(yīng)的處理,。
  本程序通過(guò)在MPC860上做環(huán)回測(cè)試,情況良好,。但在程序?qū)崿F(xiàn)過(guò)程中,,中斷的控制還有待于進(jìn)一步完善。
參考文獻(xiàn)
1 MPC860 PowerPC User’s Manual.Motorola Inc,,1998.7
2 VxWorks Programmer’s Guide 5.4 Edition 1.Winder River Corporation,,1999.5
3 SP Developer’s Guide for VxWorks 5.5 Edition.Winder River Corporation,2002.8

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話(huà):010-82306118;郵箱:[email protected],。