《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 一種嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計(jì)與實(shí)現(xiàn)
一種嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計(jì)與實(shí)現(xiàn)
何 軒1,,夏應(yīng)清1,李 祥2
1.華中師范大學(xué) 通信工程學(xué)院,,湖北 武漢430079;2.湖北經(jīng)濟(jì)學(xué)院 計(jì)算機(jī)技術(shù)與科學(xué)系,,湖北
摘要: 基于DSP和較新的自適應(yīng)10M/100M嵌入式以太網(wǎng)控制器芯片LAN91C111,,介紹了嵌入式系統(tǒng)的軟硬件實(shí)現(xiàn)方法。
Abstract:
Key words :

摘  要: 基于DSP和較新的自適應(yīng)10M/100M嵌入式以太網(wǎng)控制器芯片LAN91C111,,介紹了嵌入式系統(tǒng)的軟硬件實(shí)現(xiàn)方法,。
關(guān)鍵詞: DSP  LAN91C111  嵌入式以太網(wǎng)

  電子設(shè)備日趨網(wǎng)絡(luò)化,DSP芯片作為一種特殊的嵌入式微處理器系統(tǒng),,具有嵌入的協(xié)處理器和用于快速數(shù)據(jù)處理的并行數(shù)據(jù)通道,。在嵌入式網(wǎng)絡(luò)設(shè)備中引入DSP技術(shù),可以使嵌入式以太網(wǎng)變得更快,、更便宜,,也更容易進(jìn)行功能擴(kuò)充。
本設(shè)計(jì)給出了以TMS320LF2407和以太網(wǎng)控制器芯片LAN91C111為基礎(chǔ)的嵌入式系統(tǒng)的接口電路和實(shí)現(xiàn)方法,。
1  LAN91C111嵌入式以太網(wǎng)控制器芯片
  LAN91C111是SMSC公司推出的為嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)的第三代快速以太網(wǎng)控制器,。在LAN91C111芯片上集成了CSMA/CD協(xié)議的媒體層(MAC)和物理層(PHY),其系統(tǒng)結(jié)構(gòu)圖如圖1所示,。該以太網(wǎng)控制器的主要功能特性如下,。
  (1)自適應(yīng)地選擇傳輸速率,支持10M/100Mbps,。
  (2)支持突發(fā)數(shù)據(jù)傳輸,。
  (3)8KB的內(nèi)部存儲(chǔ)器用于接收和發(fā)送的緩存。
  (4)支持總線8位,、16位和32位的CPU訪問,。
  (5)提前發(fā)送和接收功能。

  該以太網(wǎng)控制器遵循的標(biāo)準(zhǔn)與協(xié)議為IEEE頒布的802.3以太網(wǎng)傳輸協(xié)議,。8~32位數(shù)據(jù)總線接口單元由控制總線,、地址總線和數(shù)據(jù)總線與外部的CPU控制芯片相連。該單元還集成了E2PROM接口,,所有內(nèi)部寄存器的初始值可先放在E2PROM中,,自舉時(shí)通過E2PROM接口輸入到芯片中,實(shí)現(xiàn)自動(dòng)初始化,??偩€仲裁器(Arbiter)監(jiān)視以太網(wǎng)總線的數(shù)據(jù)交流情況,一旦發(fā)生阻塞,,一方面通過總線接口單元與外部CPU聯(lián)系,,另一方面控制內(nèi)存控制單元(MMU),實(shí)現(xiàn)總線數(shù)據(jù)協(xié)調(diào),。內(nèi)存控制單元控制8KB動(dòng)態(tài)SRAM的存儲(chǔ)情況,,實(shí)現(xiàn)與DMA控制器之間的數(shù)據(jù)聯(lián)絡(luò),。DMA控制器與總線控制器一起控制數(shù)據(jù)在DMA與以太網(wǎng)協(xié)議處理器(EPH)之間的交換。由以太網(wǎng)協(xié)議處理器輸出的數(shù)據(jù)最終經(jīng)過10M/100M的物理層直接到達(dá)以太網(wǎng)總線,。
2  硬件電路組成
  出于性價(jià)比的考慮,,采用了DSP控制器作為主CPU。TMS320LF2407是TI公司發(fā)布的240X系列中功能最強(qiáng)的一種控制器,,有很大的存儲(chǔ)空間(高達(dá)32K字的Flash程序存儲(chǔ)器,,可擴(kuò)展外部64K字存儲(chǔ)器和64K字I/O尋址空間),非常適合于處理復(fù)雜的TCP/IP協(xié)議,。
  由于LAN91C111是為嵌入式系統(tǒng)設(shè)計(jì),,其外圍電路相對(duì)比較簡單,其硬件接口框圖如圖2所示,。LANC91C111內(nèi)部寄存器可通過對(duì)地址線A0、A1,、A2和A3……的操作來訪問,。地址總線A1~A15與DSP的A1~A15相連,A0沒有被LAN91C111使用(懸空),;數(shù)據(jù)總線D0~D15與DSP的D0~D15相連,,用于16位數(shù)據(jù)傳輸。LAN91C111端D16~D32懸空(因?yàn)長F2407是16位數(shù)據(jù)總線),;LAN91C111的片選信號(hào)AEN由DSP的外部I/O接口選通信號(hào)IS提供,。二元件的讀電平RD和寫電平WR分別相連。LAN91C111端的中斷輸出信號(hào)INTR0送入DSP的外部中斷腳XINT1 觸發(fā)中斷,。TG110-S050N2是針對(duì)10M/100M以太網(wǎng)的變壓濾波器,。LAN91C111模塊的Protel原理圖如圖3所示。

3  軟件設(shè)計(jì)
  編寫控制以太網(wǎng)接口程序的步驟如下,。
3.1 μC/OSⅡ?qū)崟r(shí)操作系統(tǒng)的移植
  μC/OSⅡ是一種開放源碼的實(shí)時(shí)嵌入式操作系統(tǒng),,它是可移植、可裁減,、可固化的占先式多任務(wù)操作系統(tǒng),,其大部分源碼由ANSI C語言編寫。
  移植工作包括以下幾個(gè)內(nèi)容:(1)用匯編語言改寫OS_ CPU_ A.ASM,。(2)用C語言改寫OS_CPU_C.C,。(3)編寫OS_ CPU.H。(4)適當(dāng)處理OSMapTbl[ ]和OSUnMapTbl[ ],。
 ?、貽S_ CPU_ A.ASM文件包括4個(gè)子程序:OSStart-HighRdy、OSCtxsw,、OSIntCtxSw和OSTickISR,。函數(shù)OSStart-HighRdy( )被函數(shù)OSStart( )調(diào)用,,用于運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù);函數(shù)OSCtxSw( )被函數(shù)OS Sched( )調(diào)用,,其功能是在任務(wù)級(jí)實(shí)現(xiàn)任務(wù)切換,,任務(wù)切換用31號(hào)軟中斷來實(shí)現(xiàn);函數(shù)OSIntCtxSw( )只能在中斷子程序里被函數(shù)OSIntExit( )調(diào)用,,由于中斷的產(chǎn)生可能引起任務(wù)切換,,在中斷服務(wù)程序的最后會(huì)調(diào)用函數(shù)OSIntExit( )來檢查任務(wù)就緒狀態(tài),如果滿足任務(wù)切換條件(在最后一層中斷里,,并有高優(yōu)先級(jí)任務(wù)就緒),,則OSIntExit( )調(diào)用此函數(shù)實(shí)現(xiàn)任務(wù)切換;時(shí)鐘節(jié)拍函數(shù)為OSTickISR( ),,TMS320LF2407有4個(gè)通用定時(shí)器,,其中斷優(yōu)先級(jí)由高到低分別為T1、T3,、T2和T4,,可根據(jù)實(shí)際需要選擇其中的一個(gè)來實(shí)現(xiàn)時(shí)鐘節(jié)拍。需要注意的是:調(diào)用OSIntEnter前不能開中斷,。
 ?、贠S_CPU_C.C文件:本文件僅包括一個(gè)OSTaskStkInit( )子程序。該函數(shù)模仿TI公司的I$$SAVE庫函數(shù)對(duì)任務(wù)堆棧進(jìn)行初始化,,被函數(shù)OSTaskCreate( )和OSTaskCreateExt( )所調(diào)用并返回任務(wù)堆棧初始化后的指針值,。注意:2407A的堆棧與一般MCU不同,芯片本身的堆棧(以下簡稱 US)只有 8 級(jí),,無法作為系統(tǒng)堆棧使用,,所以C編譯器將它內(nèi)部的2個(gè)寄存器AR0和AR1保留。AR1作為堆棧指針SP,,AR0用做堆棧中臨時(shí)變量指針FP(在匯編程序中不要使用這2個(gè)寄存器,,如果必須使用,要關(guān)中斷,,并注意保存和恢復(fù)),。編譯器將函數(shù)和中斷壓進(jìn) US ,并將其返回地址彈出放在SP(AR1)指向的堆棧中,,保留當(dāng)前環(huán)境,,不同的是函數(shù)只保留程序要使用的寄存器,中斷要調(diào)用 I$$SAVE 保存所有寄存器,,返回時(shí)要跳轉(zhuǎn)到(不是調(diào)用)I$$REST(這2個(gè)函數(shù)可以在RTS.SRC中看到源代碼)恢復(fù)寄存器,。這2個(gè)函數(shù)就像8086中的中斷進(jìn)入和指令I(lǐng)RET,是移植的基礎(chǔ),。
 ?、跲S_CPU.H文件:內(nèi)容可根據(jù)μC/OS-Ⅱ中80x86的內(nèi)容進(jìn)行修改,。
  ④適當(dāng)處理OSMapTbl[ ]和OSUnMapTbl[ ]:移植時(shí)還需要對(duì)μC/OSⅡ的OSMapTbl[ ]和OSUnMapTbl[ ]2個(gè)表進(jìn)行適當(dāng)處理,,否則會(huì)出現(xiàn)尋址錯(cuò)誤而使μC/OSⅡ無法正常運(yùn)行,,這是移植能否成功的重要因素之一。由于TMS320LF2407的存儲(chǔ)器采用的是哈佛結(jié)構(gòu),,F(xiàn)lash存儲(chǔ)器(或外擴(kuò)的ROM)位于程序區(qū),,因此可按如下方法處理:將μC/OSⅡ中OSMapTbl[ ]和OSUnMapTbl[ ]的數(shù)據(jù)類型從“INT8U const”改為“INT8U”,并在鏈接器命令文件(.CMD)中將“.cinit”塊分配到Flash存儲(chǔ)器(或外擴(kuò)的ROM)中,,鏈接選項(xiàng)用“.C”(ROM初始化),。這樣,在程序運(yùn)行時(shí)自動(dòng)對(duì)數(shù)據(jù)區(qū)的RAM進(jìn)行初始化,,即運(yùn)行時(shí)自動(dòng)將“.cinit”塊中的數(shù)據(jù)復(fù)制到數(shù)據(jù)區(qū)的RAM中,。
  按需要配置OS_FG.H,修改CPU中斷向量表和外設(shè)向量表后,,根據(jù)實(shí)際需要對(duì)其他文檔中的內(nèi)容進(jìn)行相應(yīng)設(shè)置即可,。至此,μC/OSⅡ在TMS320LF2407上的移植就完成了,。
3.2 LAN91C111的編程
  對(duì)LAN91C111主要包括初始化、發(fā)送數(shù)據(jù)包和接收數(shù)據(jù)包三部分,。
3.2.1 初始化
  上電后,,LAN91C111內(nèi)部的寄存器的值設(shè)置為缺省值,CPU根據(jù)需要設(shè)置它里面的Configuration,、Base和Individual Address寄存器,,以保證它正常工作。
3.2.2 發(fā)送數(shù)據(jù)包流程
  (1)DSP向控制器發(fā)送ALLOCATE MEMORY命令(設(shè)置MMUCOM寄存器,,通常設(shè)置為0x0020),。MMU負(fù)責(zé)在控制器內(nèi)部的packet buffer中為待發(fā)送的包分配存儲(chǔ)空間。
  (2)DSP查詢中斷狀態(tài)寄存器中的ALLOC INT位,,直到該位被置為1,,也可以設(shè)置中斷掩碼中的ALLOC INT位,然后等待硬件中斷,,這時(shí)MMU已經(jīng)分配好存儲(chǔ)空間,。而且TX packet number放在Allocation Result寄存器中。
  (3)將Allocation Result寄存器中的packet number拷貝到Packet Number寄存器中,,設(shè)置Pointer寄存器(設(shè)置為TX,、WR、AUTOINC,,即0x4000),。然后將包的數(shù)據(jù)從upper layer發(fā)送隊(duì)列傳送到控制器的數(shù)據(jù)寄存器,。要求依次寫人Status Word、Byte Count,、destination address,、source address、packet size,、packet data和control word,。
  (4)DSP向控制器發(fā)送“ENQUEUE PACKET NUMBER TO TX FIFO”命令(設(shè)置MMUCOM寄存器,通常設(shè)置為Ox00C0),,該命令將Packet Number寄存器中的packet number拷貝到TX FIFO,,說明發(fā)送的包已經(jīng)放入隊(duì)列中。同時(shí)設(shè)置傳輸控制寄存器中的TXENA位,,啟動(dòng)transmitter,。到目前為止,DSP的設(shè)置工作已完成,,它可以空閑,,直到接收到一個(gè)控制器產(chǎn)生的發(fā)送中斷。
  (5)當(dāng)控制器傳送完包以后,,內(nèi)存中的第1個(gè)字(16位)被CSMA/CD寫入相應(yīng)的狀態(tài)字,,然后將TX FIFO中的packet number移到TX completion FIFO,當(dāng)TX completion FIFO不為空時(shí)產(chǎn)生中斷,。
  (6)DSP接收到中斷后,,開始執(zhí)行中斷處理程序,它讀入中斷狀態(tài)寄存器,,如果產(chǎn)生發(fā)送中斷,,則從FIFO端口寄存器讀入發(fā)送包的Packet Number,并將它寫入Packet Number寄存器,。然后從內(nèi)存中讀入狀態(tài)字(包括設(shè)置Pointer寄存器為TX,、RD、AUTOINC,,即0x6000,,然后從數(shù)據(jù)寄存器中讀入包的狀態(tài)字),它是EPH寄存器的鏡像,,根據(jù)狀態(tài)字判斷包發(fā)送是否成功,。如果成功則DSP向控制器發(fā)布RELEASE命令(設(shè)置MMUCOM寄存器,設(shè)置為Ox00A0),,控制器將釋放發(fā)送包所使用的存儲(chǔ)空間,,同時(shí)設(shè)置TX INT Acknowledge寄存器,它將TX completion FIFO中的packet number清除。有二種產(chǎn)生發(fā)送中斷的方案:①每發(fā)送一個(gè)包產(chǎn)生一個(gè)中斷,。②每發(fā)送一個(gè)序列的包產(chǎn)生一個(gè)中斷,。通過控制寄存器的Auto Release位來選擇這二種方案,而且這二種方案所使用的發(fā)送中斷位也有所不同,。
  TX INT:當(dāng)TX completion FIFO不為空時(shí)置0,;
  TX EMPTY INT:當(dāng)TX FIFO為空時(shí)置1;
  AUTO RELEASE:如果置為1,,發(fā)送包成功后,,packet number不寫到TX completion FIFO中,而且它所使用的存儲(chǔ)空間被自動(dòng)釋放,。
  (7)選擇使用“每發(fā)送一個(gè)包產(chǎn)生一個(gè)中斷”方案:允許TX INT中斷,,AUTO RELEASE=0,這種方案的流程如上所示,。
  (8)選擇使用“每發(fā)送一個(gè)序列的包產(chǎn)生一個(gè)中斷”方案:允許TX EMPTY INT和TX INT,,AUTO RELEASE=1,當(dāng)發(fā)送完FIFO中的最后一個(gè)包后,,產(chǎn)生TX EMPTY INT中斷,。當(dāng)發(fā)生嚴(yán)重的發(fā)送錯(cuò)誤時(shí),產(chǎn)生TX INT中斷,,同時(shí)將發(fā)送失敗的包的packet number保存到FIFO Ports寄存器,,這樣DSP就可以知道發(fā)送過程停止了。該方案可以減少DSP的負(fù)擔(dān),,而且存儲(chǔ)空間的釋放也更迅速,。當(dāng)AUTO RELEASE=1時(shí),DSP不能得到成功發(fā)送包的packet number,。
3.2.3 接收數(shù)據(jù)包流程
  (1)DSP設(shè)置接收控制寄存器中的RXEN位,允許接收包,。
  (2)含有正確地址的包被接收到,,從MMU請(qǐng)求存儲(chǔ)空間,并分派一個(gè)packet number,,內(nèi)部的DMA邏輯產(chǎn)生連續(xù)的地址,,并將接收到的字寫到內(nèi)存中。如果超界,,則包被丟棄,,存儲(chǔ)空間被釋放。當(dāng)檢測(cè)到包結(jié)束時(shí),,狀態(tài)字被寫到接收包的最前面,,byte count寫到第2個(gè)字。如果CRC校驗(yàn)正確,則packet number被寫到RX FIFO,。當(dāng)RX FIFO非空時(shí),,產(chǎn)生RCV INT中斷;如果CRC校驗(yàn)不正確,,則存儲(chǔ)空間被釋放,,而且不產(chǎn)生中斷。
  (3)DSP接收到中斷后開始執(zhí)行中斷處理程序,,它讀入中斷狀態(tài)寄存器,,如果產(chǎn)生接收中斷(RCV INT位為1),則可以從FIFO端口寄存器得到接收的包的packet number,,而且可以從數(shù)據(jù)寄存器將接收包傳送到DSP的內(nèi)存或外存中,。當(dāng)處理結(jié)束時(shí),DSP向處理器發(fā)布REMOVE AND RELEASE FROM TOP OF RX命令(即設(shè)置寄存器MMUCOM,,設(shè)置為0x0060),,釋放使用的存儲(chǔ)空間和packet number。
4  結(jié)束語
  對(duì)以太網(wǎng)和快速以太網(wǎng)的自動(dòng)協(xié)商模式使LAN 91C111具有很高的性價(jià)比,,應(yīng)用領(lǐng)域廣泛,。本設(shè)計(jì)利用LAN91C111和DSP芯片組成嵌入式以太網(wǎng)通信系統(tǒng),能夠正確地接入快速以太網(wǎng),,具備10M/100Mbps,、全雙工/半雙工自適應(yīng)等多種功能,符合IEEE802.3/802.3u-100Base-TX/lOBase-T規(guī)范,,實(shí)現(xiàn)的嵌入式以太網(wǎng)接口支持RJ45和以太網(wǎng)的連接,,可以通過以太網(wǎng)接入Internet,以實(shí)現(xiàn)從Internet上監(jiān)控嵌入式設(shè)備,。
參考文獻(xiàn)
1   劉國福,,張屺,廖巍.DSP與以太網(wǎng)卡的接口技術(shù)研究.電子技術(shù)應(yīng)用,,2001,;27(1)
2   Richard S W著,范建華,,胥光輝,,張濤等譯.TCP/IP 詳解. 北京:機(jī)械工業(yè)出版社,2000
3   劉和平,,嚴(yán)利平,,張學(xué)鋒等.TMS320LF240xDSP結(jié)構(gòu)、原理及應(yīng)用.北京:北京航空航天大學(xué)出版社,,2002

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。