嵌入式系統以太網接口的設計
3軟件設計
本文引用地址:http://www.104case.com/article/266249.htmDM9008的編程包括初始化、發送、接收三部分功能。在接收和發送數據以前要進行必需的檢測和初始化。DM9008的初始化主要是設置所需的寄存器狀態,建立網絡接口收發的條件。
網絡接口通過2個DMA操作來完成數據的接收和發送。本地DMA完成DMA9008與其內部FIFO隊列之間的數據傳送,遠程DMA完成DM9008與CPU之間的數據傳送。
DM9008可尋址的空間有32個,分別為00H~1FH.其中00H~0FH是寄存器區,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,設置下一次接收數據指針和接收邊界指針。
雙絞線傳輸器相關文章:雙絞線傳輸器原理
評論