基于AX88796B的網(wǎng)絡(luò)接口模塊的設(shè)計與實現(xiàn)_第1頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第第頁基于ax88796b的網(wǎng)絡(luò)接口模塊的設(shè)計與實現(xiàn)網(wǎng)絡(luò)技術(shù)應(yīng)用日益普及的今日,工業(yè)現(xiàn)場的儀器儀表、數(shù)據(jù)采集和控制設(shè)備也日趨網(wǎng)絡(luò)化,工業(yè)和網(wǎng)絡(luò)的結(jié)合越來越疏遠。而將以太網(wǎng)和系統(tǒng)相結(jié)合應(yīng)用于工業(yè)控制中已成為趨勢。

ax88796b是asix公司推出的一款為嵌入式和工業(yè)以太網(wǎng)應(yīng)用而設(shè)計的低引腳數(shù)以太網(wǎng)控制芯片。其內(nèi)部集成10/100mb/s自適應(yīng)的介質(zhì)拜訪層mac和物理層phy以及8k×16位的sram。ax88796b可應(yīng)用于商業(yè)級0~70c和工業(yè)級-40c~85c的溫度范圍。ax88796b支持mcs-51系列、80186系列、isa和sram-like接口類型。執(zhí)行基于ieee802.3/ieee802.3u局域網(wǎng)標(biāo)準的10mb/s和100mb/s以太網(wǎng)控制功能,并且提供發(fā)送隊列功能來增加標(biāo)準ne2000的發(fā)送性能。

at91r40008微控制器是基于7tdmi核的32位risc結(jié)構(gòu)的嵌入式微控制器,十分適于工業(yè)實時控制應(yīng)用。ax88796b引腳的lqfp封裝削減了空間并且和ne2000兼容,編程容易,其驅(qū)動可以簡單迅速的移植到許多嵌入式系統(tǒng)中。因此,綜合上述兩種芯片的優(yōu)點,我們挑選ax88796b和at91r40008作為工業(yè)實時控制中嵌入式網(wǎng)絡(luò)應(yīng)用的解決計劃,具有很好的工業(yè)應(yīng)用價值和前景。

圖1ax88796b內(nèi)部結(jié)構(gòu)圖

一、ax88796b內(nèi)部結(jié)構(gòu)及工作原理

1ax88796b的內(nèi)部結(jié)構(gòu)

網(wǎng)卡上電復(fù)位時eeprom接口能夠通過中偏移為14h的smi/eeprom寄存器來存取數(shù)據(jù),mac地址由eeprom中讀取,并被自動載入地址為0000h~001fh和0400h~040fh的內(nèi)部存儲區(qū)中。假如沒有用法eeprom,每次上電對網(wǎng)卡舉行初始化時候就手動給它分配一個mac地址。

ax88796b內(nèi)部有一個16kb(0x4000~0x7fff)大小的sram,該sram是雙端口sram,可以同時被網(wǎng)卡讀寫和用戶讀寫,這片地址空間的一部分被保留用來存放一個緩沖環(huán)結(jié)構(gòu),另一部分可以給用戶用法。在本設(shè)計中,16kb的sram所有被用來接收和發(fā)送數(shù)據(jù)包。本地dma正是通過這個緩沖環(huán)結(jié)構(gòu)來接收報文的。這個結(jié)構(gòu)由一連串相鄰的固定長度為256b的緩沖區(qū)構(gòu)成,每256字節(jié)稱為一頁,共有64頁。頁的地址就是地址的高8位,頁地址為0x00~0xff。其中0x40~0x4b為網(wǎng)卡的發(fā)送緩沖區(qū),共12頁,剛好可以存儲2個最大的以太網(wǎng)包,所以我們把發(fā)送緩沖區(qū)別成兩部分舉行輪番發(fā)送。用法0x4c~0x7f共52頁為網(wǎng)卡的接收緩沖區(qū)。ax88796b的sram空間結(jié)構(gòu)和收發(fā)緩沖區(qū)結(jié)構(gòu)2、3所示。

圖2sram空間結(jié)構(gòu)

圖3收發(fā)緩沖區(qū)

2ax88796b的工作原理

由四個寄存器來控制接收緩沖區(qū)的操作。pagestartaddressregister(pstart)和pagestopaddressregister(pstop)定義了接收緩沖區(qū)的起始和終止頁號,形成一個接收緩沖環(huán)。當(dāng)前頁地址寄存器(currentpageregister)指向第一個用于存儲數(shù)據(jù)包的緩沖區(qū)。邊界指針寄存器(boundarypointerregister)指向在緩沖環(huán)中第一個未被主機讀取的數(shù)據(jù)包。假如本地dma地址與boundarypointerregister的值相等,則接收過程中止。邊界指針也被用來初始化遠端dma來移動一個數(shù)據(jù)包,當(dāng)數(shù)據(jù)包被移走后,邊界指針也向前增長。這樣,currentpageregister猶如一個寫指針,boundarypointer猶如一個讀指針。接收到一個數(shù)據(jù)包時,從psr中指定的頁號開頭存儲,假如一個256b的緩沖區(qū)不夠,dma會執(zhí)行一個前向銜接來銜接下一個緩沖區(qū)以存儲這個數(shù)據(jù)包的剩余部分。銜接的時候緩沖區(qū)必需是延續(xù)的,一個數(shù)據(jù)包總是會被存儲在相鄰的緩沖區(qū)里。在銜接下一個緩沖區(qū)前,緩沖管理規(guī)律會執(zhí)行兩個比較,首先比較下一個緩沖區(qū)的dma地址是否和pagestopregister相等,若相等,則dma地址被復(fù)原為pagestartaddressregister中保存的地址。第二和boundarypointerregister比較,假如相等,則接收報文過程終止。boundarypointerregister能夠防止緩沖區(qū)里的數(shù)據(jù)還沒有讀出就被重寫。

要發(fā)送和接收數(shù)據(jù)包就必需通過dma讀寫ax88796b內(nèi)部的sram。dma分為遠程dma(remotedma)和本地dma(localdma)。cpu從網(wǎng)卡的sram讀寫數(shù)據(jù)稱為遠端dma。ax88796b讀寫sram稱為本地dma。數(shù)據(jù)包的接收過程:當(dāng)數(shù)據(jù)包到達網(wǎng)卡的mac層后,本地dma先將到達mac層的報文傳送到網(wǎng)卡的內(nèi)存中,主機cpu再通過遠端dma通道從網(wǎng)卡內(nèi)存中讀取數(shù)據(jù)包。數(shù)據(jù)包的發(fā)送過程:主機cpu通過遠端dma把要發(fā)送的數(shù)據(jù)包送到網(wǎng)卡的內(nèi)存中,本地的dma將該數(shù)據(jù)包傳送到mac層,再經(jīng)由內(nèi)部的phy層發(fā)送至網(wǎng)絡(luò)。

二、網(wǎng)絡(luò)接口硬件設(shè)計

1ax88796b的引腳配置

ax88796b與cpu的銜接方式有mcs51模式、isa模式、186模式,此計劃用法了isa8bit模式。片選引腳csn,讀寫信號rdn、wrn、rstn都是低電平有效,分離和at91r40008相應(yīng)引腳相連即可。ax88796b的數(shù)據(jù)線sd0~sd15和at91r40008的data[0:15]相連,可通過軟件配置為16位或8位dma數(shù)據(jù)傳輸方式。ax88796b的irq是可編程的,中斷哀求信號可以通過配置btcr或eeprom來挑選其觸發(fā)方式和中斷i/o緩沖類型,at91r40008中斷觸發(fā)方式應(yīng)當(dāng)和btcr的配置相全都。其他重要引腳如iois16、pme、eece、eeck在本設(shè)計中懸空處理。引腳配置應(yīng)按照網(wǎng)卡芯片手冊解釋和設(shè)計計劃而定。

對ax88796b控制狀態(tài)寄存器(csr)的操作,需要確定其基地址,基地址的挑選應(yīng)按照at91r40008的可編程外部總線ebi的地址和片選信號來確定。

at91r40008的ebi處理位于地址空間0x00400000~0xffc00000的拜訪操作,在拜訪過程中,它將產(chǎn)生外部器件的控制拜訪信號。當(dāng)把網(wǎng)卡寄存器地址空間映射進ebi后,挺直對ebi地址空間操作即可控制網(wǎng)卡的寄存器讀寫。對每個映射進ebi接口的外圍器件,可以編程等待周期數(shù)、數(shù)據(jù)浮空時光、數(shù)據(jù)總線寬度(8位或16位)等。

2at91r40008與ax88796b接口

圖4硬件銜接原理圖

三、ax88796b的驅(qū)動程序設(shè)計

ax88796b的網(wǎng)卡驅(qū)動程序是處理器cpu和網(wǎng)卡硬件的接口,網(wǎng)卡驅(qū)動程序主要包括以下幾部分:網(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)舉行操作。與ne2000兼容的寄存器惟獨3頁(page0~page2)。初始化需要設(shè)置頁0與頁1的相關(guān)寄存器,頁2的寄存器是只讀的,不行以設(shè)置,頁3的寄存器不是ne2000兼容的,不用設(shè)置。初始化函數(shù)主要要完成以下諸項工作。

/*ax88796b_init*/

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

readbyte(reset);

writebyte(reset,0xff);

delay(3000);

writebyte(imr,0);/*初始化中斷屏蔽寄存器imr,寫入0x00,禁止全部中斷哀求。*/

writebyte(cr,0x61);/*選中頁1,停止ax88796b。*/

delay(1000);

writebyte(cpr,0x4c);/*初始化接收緩沖環(huán)寫頁指針cpr=pstart*/

writebyte(par0~par5,mac);/*設(shè)置網(wǎng)卡芯片mac地址,清除多播地址寄存器。*/

writebyte(mar0~mar7,0);

writebyte(cr,0x21);/*停止網(wǎng)卡,切換到頁0。*/

delay(1000);

writebyte(bnry,0x79);/*寫邊界指針寄存器(bnry)為0x79;*/

writebyte(pstart,0x4c);/*設(shè)置接收緩沖區(qū)的起始頁地址0x4c;*/

writebyte(pstop,0x80);/*pstop接收緩沖區(qū)的結(jié)束頁地址0x80;*/

writebyte(tpsr,0x40);/*tpsr發(fā)送頁的起始地址0x40;*/

writebyte(dcr,0x80);/*設(shè)置數(shù)據(jù)配置寄存器為8位數(shù)據(jù)傳輸模式。*/

/*設(shè)置接收配置寄存器為0x4c,使接收緩沖區(qū)僅接收廣播地址數(shù)據(jù)包和多點播送地址包。*/

writebyte(rcr,0x4c);

/*設(shè)置tcr發(fā)送配置寄存器為0x80,采納全雙工模式,當(dāng)數(shù)據(jù)包長度小于60字節(jié)時自動填充,發(fā)送時附加crc校驗。*/

writebyte(tcr,0x80);

writebyte(isr,0xff);/*清除中斷狀態(tài)寄存器。*/

writebyte(imr,0x11);/*允許覆寫中斷和數(shù)據(jù)包接收中斷。*/

writebyte(btcr,0x30);/*中斷觸發(fā)方式為高電平有效,irq輸出為推挽驅(qū)動方式*/

writebyte(cr,0x22);/*啟動芯片,ax88796b初始化完成。*/

delay(1000);

wrcurpge=read(cpr);

rdnxtpge=wrcurpge;

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

推斷ax88796b是否接收到新的數(shù)據(jù)包有兩種方式:輪循和中斷。用輪循方式較多。為了提高cpu性能和實時性要求,這里采納中斷方式。當(dāng)網(wǎng)卡接收到新數(shù)據(jù)包時進入中斷,首先推斷cpr是否等于bnry,若相等,則表示接收緩沖區(qū)已被存滿,則停止接收數(shù)據(jù)包,而不會籠罩舊的數(shù)據(jù);若不等,則將接收緩沖區(qū)中待讀取的數(shù)據(jù)包的起始地址寫入rsar[0,1]寄存器,數(shù)據(jù)包的開頭4字節(jié)寫入rbcr[0,1]寄存器,并啟動遠端dma讀指令,通過讀取4個信息字節(jié)得到待讀取數(shù)據(jù)包的長度、接收狀態(tài)和下一個將被讀的頁的指針信息。然后通過遠端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)加到最后的空頁(這里是pstop=0x80)時,cpr將自動復(fù)原為接收緩沖區(qū)的首頁(pstart=0x4c)。網(wǎng)卡接收關(guān)鍵性代碼如下:

/*ax88796b_receive*/

uint8rcvinfo,i;

uint16pktlength,index;

/*得到待讀取數(shù)據(jù)包的信息,并將其保存在rcvinfo數(shù)組中*/

writebyte(rsar0,0x00);

writebyte(idx,rsar1,rdnxtpge);

writebyte(rbcr0,0x04);

writebyte(rbcr1,0x00);

writebyte(cr,0x0a);

for(i=0;i>8));

writebyte(cr,0x0a);

readdata(uint16*buf,uint16length);

/*更新bnry指針,并返回pktlength值*/

rdnxtpge=rcvinfo;

if(rdnxtpge==pstart)

writebyte(idx,bnry,pstop-1);

else

writebyte(idx,bnry,rdnxtpge-1);

returnpktlength;

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

/*ax88796b_transmit*/

/*將數(shù)據(jù)寫入網(wǎng)卡的發(fā)送緩沖區(qū)*/

writebyte(rsar0,0x00);

writebyte(rsar1,tx_buf_start);

writebyte(rbcr0,(uint8)(len

writebyte(rbcr1,(uint8)(len>>8));

writebyte(cr,0x12);

writedata((uint16*)addr,len);

writebyte(idx,tpsr,tx_buf_start);

/*發(fā)送緩沖區(qū)的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)*/

writebyte(tbcr0,(uint8)(len

writebyte(tbcr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論