新聞中心

        EEPW首頁 > 網絡與存儲 > 設計應用 > 基于AX88796B的網絡接口模塊的設計與實現

        基于AX88796B的網絡接口模塊的設計與實現

        作者:重慶郵電大學 崔巍 時間:2008-07-28 來源:今日電子 收藏

          2 AT91r40008與接口電路

        本文引用地址:http://www.104case.com/article/86294.htm

          電路如圖4所示。


        圖4 硬件連接原理圖

          的驅動程序設計

          的網卡驅動程序是處理器CPU和網卡硬件的接口,網卡驅動程序主要包括以下幾部分:網卡的初始化;數據包的接收和發送;中斷處理子程序。

          1 網卡初始化

          在網卡的初始化過程中除了完成對相關寄存器的定義與賦值外,還要完成對接收緩沖環的構造。AX88796B的所有寄存器除了數據端口寄存器外都是8位數據寬度。數據端口寄存器可以通過配置DCR寄存器中的WTS設置成8位或16位寬。AX88796B將偏移量為01h~0fh的寄存器分為4頁(Page0~Page3)進行操作。與NE2000兼容的寄存器只有3頁(Page0~Page2)。初始化需要設置頁0與頁1的相關寄存器,頁2的寄存器是只讀的,不可以設置,頁3的寄存器不是NE2000兼容的,不用設置。初始化函數主要要完成以下諸項工作。

          /*AX88796B_init*/

          /*調用復位子程序對AX88796B進行復位。有兩種復位方式:一是硬件復位,通過拉高拉低RESET引腳達到復位AX88796B的目的;二是軟件復位,從0x1f端口讀數據使AX88796B復位。*/

          2 數據包的發送和接收

          判斷AX88796B是否接收到新的數據包有兩種方式:輪循和中斷。單片機用輪循方式較多。為了提高CPU性能和實時性要求,這里采用中斷方式。當網卡接收到新數據包時進入中斷,首先判斷CPR是否等于BNRY,若相等,則表示接收緩沖區已被存滿,則停止接收數據包,而不會覆蓋舊的數據;若不等,則將接收緩沖區中待讀取的數據包的起始地址寫入RSAR[0,1]寄存器,數據包的開始4字節寫入RBCR[0,1]寄存器,并啟動遠端DMA讀命令,通過讀取4個信息字節得到待讀取數據包的長度、接收狀態和下一個將被讀的頁的指針信息。然后通過遠端DMA讀命令,將數據包從網卡SRAM中讀入CPU內存中,并更新讀頁指針寄存器BNRY,CPU每從網卡內存中讀走一頁數據,BNRY便加一,這需要通過程序實現。網卡通過CPR將接收到的數據包寫入接收緩沖區,每寫完一頁,CPR將自動加一,當加到最后的空頁(這里是PSTOP=0x80)時,CPR將自動恢復為接收緩沖區的首頁(PSTART=0x4c)。網卡接收關鍵性代碼如下:





          CPU通過遠端DMA通道將網卡發送緩沖區的起始地址和要發送的字節數分別寫入RSAR[0,1]和RBCR[0,1],然后啟動遠端DMA寫命令即可將數據包寫入網卡內存,此后將字節數寫入TBCR[0,1]寄存器,啟動發送命令就可將數據包發送到網絡上。網卡發送的關鍵代碼如下:

          3 中斷處理

          中斷的處理和CPU關聯密切,在軟件中必須先配置好網卡的片選線和中斷信號線。數據包到來時,網卡將其保存在SARM中,同時觸發一個中斷。處理器接收到中斷信號后,進入中斷處理程序。在中斷處理程序中讀AX88796B的中斷狀態寄存器ISR來判斷是什么樣類型的中斷,如果讀出的值的最低位為1,則代表是數據包接收中斷,這時需觸發一個消息,進入到讀網卡函數。讀網卡函數的功能是將網絡數據包從網卡的內存接收到主機中,接著向上層傳遞,進行相應的處理。

          一個報文的發送過程就是通過調用寫網卡函數,將報文發送到網卡的內存中去。然后將AX88796的控制寄存器(CR)的發送位TXP(Transmit packet)位置1,即將報文發送。

          中斷處理子程序的關鍵代碼:

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 竹北市| 嘉定区| 江北区| 鄄城县| 横山县| 会理县| 乌拉特中旗| 盈江县| 沈丘县| 江华| 图们市| 韩城市| 高清| 东阳市| 宜黄县| 永新县| 聊城市| 衡东县| 襄城县| 确山县| 五台县| 大港区| 尚志市| 临洮县| 上蔡县| 永春县| 扶余县| 康定县| 平湖市| 彭阳县| 古田县| 汉中市| 霍山县| 比如县| 龙井市| 永定县| 锦州市| 浦县| 邢台市| 宜黄县| 玛曲县|