新聞中心

EEPW首頁 > 網(wǎng)絡(luò)與存儲(chǔ) > 設(shè)計(jì)應(yīng)用 > 基于AX88796B的網(wǎng)絡(luò)接口模塊的設(shè)計(jì)與實(shí)現(xiàn)

基于AX88796B的網(wǎng)絡(luò)接口模塊的設(shè)計(jì)與實(shí)現(xiàn)

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

  2 AT91r40008與接口電路

本文引用地址:http://butianyuan.cn/article/86294.htm

  電路如圖4所示。


圖4 硬件連接原理圖

  的驅(qū)動(dòng)程序設(shè)計(jì)

  的網(wǎng)卡驅(qū)動(dòng)程序是處理器CPU和網(wǎng)卡硬件的接口,網(wǎng)卡驅(qū)動(dòng)程序主要包括以下幾部分:網(wǎng)卡的初始化;數(shù)據(jù)包的接收和發(fā)送;中斷處理子程序。

  1 網(wǎng)卡初始化

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

  /*AX88796B_init*/

  /*調(diào)用復(fù)位子程序?qū)X88796B進(jìn)行復(fù)位。有兩種復(fù)位方式:一是硬件復(fù)位,通過拉高拉低RESET引腳達(dá)到復(fù)位AX88796B的目的;二是軟件復(fù)位,從0x1f端口讀數(shù)據(jù)使AX88796B復(fù)位。*/

  2 數(shù)據(jù)包的發(fā)送和接收

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





  CPU通過遠(yuǎn)端DMA通道將網(wǎng)卡發(fā)送緩沖區(qū)的起始地址和要發(fā)送的字節(jié)數(shù)分別寫入RSAR[0,1]和RBCR[0,1],然后啟動(dòng)遠(yuǎn)端DMA寫命令即可將數(shù)據(jù)包寫入網(wǎng)卡內(nèi)存,此后將字節(jié)數(shù)寫入TBCR[0,1]寄存器,啟動(dòng)發(fā)送命令就可將數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)上。網(wǎng)卡發(fā)送的關(guān)鍵代碼如下:

  3 中斷處理

  中斷的處理和CPU關(guān)聯(lián)密切,在軟件中必須先配置好網(wǎng)卡的片選線和中斷信號(hào)線。數(shù)據(jù)包到來時(shí),網(wǎng)卡將其保存在SARM中,同時(shí)觸發(fā)一個(gè)中斷。處理器接收到中斷信號(hào)后,進(jìn)入中斷處理程序。在中斷處理程序中讀AX88796B的中斷狀態(tài)寄存器ISR來判斷是什么樣類型的中斷,如果讀出的值的最低位為1,則代表是數(shù)據(jù)包接收中斷,這時(shí)需觸發(fā)一個(gè)消息,進(jìn)入到讀網(wǎng)卡函數(shù)。讀網(wǎng)卡函數(shù)的功能是將網(wǎng)絡(luò)數(shù)據(jù)包從網(wǎng)卡的內(nèi)存接收到主機(jī)中,接著向上層傳遞,進(jìn)行相應(yīng)的處理。

  一個(gè)報(bào)文的發(fā)送過程就是通過調(diào)用寫網(wǎng)卡函數(shù),將報(bào)文發(fā)送到網(wǎng)卡的內(nèi)存中去。然后將AX88796的控制寄存器(CR)的發(fā)送位TXP(Transmit packet)位置1,即將報(bào)文發(fā)送。

  中斷處理子程序的關(guān)鍵代碼:

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

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉