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

摘  要: 基于DSP和較新的自適應10M/100M嵌入式以太網控制器芯片LAN91C111,介紹了嵌入式系統的軟硬件實現方法。
關鍵詞: DSP  LAN91C111  嵌入式以太網

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

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

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 精品综合久久久久久88小说 | 亚洲国内 | 国产人成午夜免费噼啪视频 | 日韩一中文字幕 | 成人欧美一级毛片免费观看 | 亚洲第一欧美 | 热re66久久精品国产99热 | 农村寡妇特一级毛片 | 又黄又刺激下面流水的视频 | 国产美女一区二区 | 94欧美setu | 亚洲一区二区三区四区在线观看 | 国产精品久久久久久久久久一区 | 91四虎国自产在线播放线 | 黄色a站| 国产欧美日韩在线观看一区二区三区 | 97在线碰碰观看免费高清 | 日本在线视频免费看 | 欧美视频一区 | 欧美精品色精品一区二区三区 | 中文字幕日韩国产 | 日日干日日操日日射 | 久久久久久久国产精品毛片 | 亚洲第一中文 | 黄.www | 成人a毛片在线看免费全部播放 | 国产美女做爰免费视 | 九九热国产精品视频 | 一区二区三区在线视频观看 | 精品日韩一区二区三区视频 | 在线精品亚洲 | 成人亚洲在线观看 | avove在线播放 | 国产a级特黄的片子视频免费 | 国产精品永久在线 | 国产愉拍精品手机 | 国产日韩欧美在线观看不卡 | 亚洲天堂视频网站 | 在线免费观看国产视频 | 日本aaaa特级毛片 | 91热国产 |