新聞中心

        EEPW首頁(yè) > 網(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 來(lái)源:今日電子 收藏

          2 AT91r40008與接口電路

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

          /*AX88796B_init*/

          /*調(diào)用復(fù)位子程序?qū)X88796B進(jìn)行復(fù)位。有兩種復(fù)位方式:一是硬件復(fù)位,通過(guò)拉高拉低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ù)包的開(kāi)始4字節(jié)寫入RBCR[0,1]寄存器,并啟動(dòng)遠(yuǎn)端DMA讀命令,通過(guò)讀取4個(gè)信息字節(jié)得到待讀取數(shù)據(jù)包的長(zhǎng)度、接收狀態(tài)和下一個(gè)將被讀的頁(yè)的指針信息。然后通過(guò)遠(yuǎn)端DMA讀命令,將數(shù)據(jù)包從網(wǎng)卡SRAM中讀入CPU內(nèi)存中,并更新讀頁(yè)指針寄存器BNRY,CPU每從網(wǎng)卡內(nèi)存中讀走一頁(yè)數(shù)據(jù),BNRY便加一,這需要通過(guò)程序?qū)崿F(xiàn)。網(wǎng)卡通過(guò)CPR將接收到的數(shù)據(jù)包寫入接收緩沖區(qū),每寫完一頁(yè),CPR將自動(dòng)加一,當(dāng)加到最后的空頁(yè)(這里是PSTOP=0x80)時(shí),CPR將自動(dòng)恢復(fù)為接收緩沖區(qū)的首頁(yè)(PSTART=0x4c)。網(wǎng)卡接收關(guān)鍵性代碼如下:





          CPU通過(guò)遠(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ù)包到來(lái)時(shí),網(wǎng)卡將其保存在SARM中,同時(shí)觸發(fā)一個(gè)中斷。處理器接收到中斷信號(hào)后,進(jìn)入中斷處理程序。在中斷處理程序中讀AX88796B的中斷狀態(tài)寄存器ISR來(lái)判斷是什么樣類型的中斷,如果讀出的值的最低位為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ā)送過(guò)程就是通過(guò)調(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不再難懂)

        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 浙江省| 嵊泗县| 宽甸| 视频| 蒙城县| 陵水| 台州市| 嫩江县| 韶山市| 菏泽市| 桦南县| 大兴区| 旬阳县| 商丘市| 若羌县| 凭祥市| 灵寿县| 临泽县| 漳平市| 姚安县| 黄骅市| 四会市| 涞源县| 普兰县| 论坛| 宜丰县| 云安县| 大埔区| 辽源市| 临江市| 玉山县| 沂南县| 德保县| 咸宁市| 牟定县| 民县| 东平县| 沭阳县| 金湖县| 大石桥市| 乡宁县|