• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統以太網接口的設計

    嵌入式系統以太網接口的設計

    作者: 時間:2009-03-26 來源:網絡 收藏

    DM9008可尋址的空間有32個,分別為00H~1FH。其中00H~0FH是寄存器區,00H作為命令寄存器,通過設置可選擇3個頁面,10H~17H為數據端口,18H~1FH為復位端口。

    3.1 DM9008的初始化

    DM9008的具體初始化過程如下(CPU對DM9008的尋址需要加上基地址,為了描述方便,省略掉基地址直接用DM9008的內部地址描述寄存器地址):

    (1)讀入1FH端口數據,再寫回該地址以啟動DM9008工作。

    (2)向命令寄存器CR(00H)寫入21H,選擇寄存器頁面0,并進行軟件復位。

    (3)設置數據結構寄存器DCR(0EH)為48H。

    (4)設置方式狀態寄存器TCR(0DH)為02H。

    (5)讀出網絡的物理地址:

    a. 設置遠程DMA計數器RBCR1(0BH)、RBCR0(0AH)的值為000CH;

    b.設置遠程DMA地址RSAR1(09H)、RSAR0(08H)的值為0000H;

    c. 設置命令寄存器CR(00H)為遠程DMA讀,即0AH;

    d. 重復從數據端口(10H)讀6個字節,這6個字節即網絡物理地址;

    e.停止遠程DMA,設置CR為21H,RBCR1、RBCR0為0000H。

    (6)設置接收狀態寄存器RCR(0CH)為04H。

    (7)劃分緩沖區為接收緩沖區和發送緩沖區,并建立接收緩沖環。將DM9008內部RAM地址為4000H~4BFFH設置為發送緩沖區,4C00H~7FFFH設置為接收緩沖區,即設置PSTART(01H)為4CH,PSTOP(02H)為80H,BNRY(03H)為4CH。

    (8)設置CR為61H,選擇頁面1。

    (9)設置網卡地址寄存器,把PAR0(01H)~PAR5(06H)設置為前面讀出的物理地址。

    (10)設置當前頁面寄存器CURR(07H)為PSTART+1,即4DH。

    (11)清除多址寄存器,即MAR0(08H)~MAR7(0FH)為00H。

    (12)設置CR為21H,選擇寄存器頁面0。

    (13)清除中斷狀態寄存器ISR(07H)為0FFH。

    (14)設置中斷屏蔽寄存器IMR(0FH)為3BH,即接收中斷允許、接收錯誤中斷允許、發送錯誤中斷允許、溢出中斷允許、計數器溢出中斷允許。

    (15)設置發送設置寄存器TCR(0DH)為00H。

    (16)設置CR為22H,芯片進入工作狀態。

    至此,DM9008的初始化過程完成,DM9008處于接收狀態。只要網絡上有可以接收的數據包,DM9008自動將數據存入接收緩沖區并在收完后向CPU發中斷申請。

    3.2 接收數據

    DM9008收到一個完整的數據包后,向CPU發出中斷請求,CPU響應DM9008的中斷申請后,進入中斷服務程序并開始接收數據,具體過程如下。

    (1)讀出中斷狀態寄存器ISR,并寫回該寄存器。

    (2)判斷是否數據接收中斷,如果不是,不執行以下步驟。

    (3)設置CR為22H,選擇頁面0。

    (4)設置遠程DMA地址寄存器RSAR1、RSAR0為接收地址指針,該指針高位字節初始值位PSTART+1,低位字節為0。

    (5)設置遠程DMA計數器RBCR1、RBCR0為0004H;

    (6)設置CR為遠程讀0AH,讀數據端口,讀出4個字節,這4個字節第1個字節表示接收狀態,第2個字節為下一包開始地址指針,第3~4個字節為本數據包的長度(高位字節在前)。

    (7)設置CR為22H,遠程DMA完成。

    (8)根據接收狀態判斷數據包是否接收正確,如果接收正確,啟動遠程DMA,收取該數據包并進行處理。

    (9)結束遠程DMA,設置下一次接收數據指針和接收邊界指針。

    3.3 發送數據

    數據的發送過程應包含三個步驟:數據包的封裝;通過遠程DMA將數據包送入DM9008的數據發送緩沖區;通過DM9008的本地DMA將數據送入FIFO進行發送。具體過程如下:

    (1)數據包在發送前應該按規定的格式封裝好,格式如下:

    (2)把上面的數據包通過遠程DMA寫送入DM9008的數據發送緩沖區。

    a. 設置CR為22H,選擇寄存器頁面0;

    b. 設置中斷狀態寄存器ISR為40H,清除發送完成標志;

    c.設置遠程DMA地址寄存器RSAR1、RSAR0為4000H,即發送緩沖區開始地址,

    d. 設置遠程DMA字節計數寄存器RBCR1、RBCR0為發送數據包的長度,

    e. 設置CR為12H,設置命令寄存器為遠程DMA寫,

    f. 往數據端口寫入發送數據,

    g. 查詢中斷狀態寄存器ISR,等待遠程DMA完成,

    h. 設置CR為22H,設置RBCR1、RBCR0為0,遠程DMA停止,

    i. 設置ISR為40H,清除發送完成標志。

    (3)啟動本地DMA,把數據發送出去。

    a. 設置發送字節計數器TBCR1(06H)、TBCR0(05H)為發送數據包的長度;

    b. 設置發送頁面起始地址TPSR(04H)為40H,即發送緩沖區開始地址高位字節;

    c. 設置命令寄存器CR為26H,啟動發送。

    3.4 高層通信協議

    上述發送、接收過程所完成的協議是MAC層和物理層的協議。要真正實現上其它設備(如PC機)之間的通信,還需要在中實現更高層的通信協議,如,這樣PC機的程序員就可以使用透明地訪問的數據。

    因此上述以8051系統為例的的軟件中除了實現收發數據的功能外,還需要實現及更高層的應用層協議才能真正實現整個系統的通信功能。由于TCP/IP協議的實現通常采用C語言,并且有現成的源程序,所以在用8051系列編程時,可采用C51語言并參考TCP/IP標準的源程序來具體實現。有關這方面內容,可以查看有關TCP/IP協議方面的資料。

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 阿拉善右旗| 文成县| 大洼县| 澎湖县| 丹巴县| 凭祥市| 靖安县| 淮安市| 嘉鱼县| 洞口县| 遵义县| 远安县| 曲水县| 安丘市| 鸡西市| 聂拉木县| 随州市| 北宁市| 城口县| 西城区| 青州市| 德钦县| 冕宁县| 昭通市| 余姚市| 石屏县| 邹平县| 宿迁市| 神池县| 庄浪县| 永福县| 青田县| 定兴县| 仪征市| 朝阳县| 舞阳县| 离岛区| 潞城市| 绥滨县| 平陆县| 五寨县|