?? ne2kif.h
字號(hào):
#include "at91_init.h"#ifndef __SKYEYE_NE2K_H#define __SKYEYE_NE2K_Herr_t ne2k_send_packet(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr);void ne2k_recv_packet(struct netif *netif);void ne2k_init(struct netif *netif);#define NE_BASE AT91_NET_BASE //yangye 2003-1-20//all addr[1,0] must be 00#define NE_CR (NE_BASE+0) //R/W,對不同的頁,CR都是同一個(gè)#define NE_DMA (NE_BASE+64) //0x10-0x10 是DMA端口,重復(fù),只用0x10.#define NE_RESET (NE_BASE+124) //0x18-0x1f 是網(wǎng)卡復(fù)位端口,重復(fù),只用0x1f,讀寫它將復(fù)位網(wǎng)卡//page0 registers#define NE_PSTART (NE_BASE+4) //W,接收緩沖環(huán)起始頁#define NE_PSTOP (NE_BASE+8) //W,接收緩沖環(huán)終止頁(不包括此頁)#define NE_BNRY (NE_BASE+12) //R/W,接收緩沖環(huán)讀指針,指向下一個(gè)包到來時(shí)的起始頁,應(yīng)初始化成=CURR=PSTART#define NE_TPSR (NE_BASE+16) //W,Local DMA發(fā)送緩沖起始頁寄存器#define NE_TBCR0 (NE_BASE+20) //W,Local DMA發(fā)送長度低位#define NE_TBCR1 (NE_BASE+24) //W,Local DMA發(fā)送長度高位#define NE_ISR (NE_BASE+28) //R/W,中斷狀態(tài)寄存器#define NE_RSAR0 (NE_BASE+32) //W,Remote DMA目的起始地址低位#define NE_RSAR1 (NE_BASE+36) //W,Remote DMA目的起始地址高位//這兩個(gè)是CPU向網(wǎng)卡寫入或讀出數(shù)據(jù)包的實(shí)際長度,執(zhí)行Remote DMA命令前設(shè)置#define NE_RBCR0 (NE_BASE+40) //W,Remote DMA數(shù)據(jù)長度低位#define NE_RBCR1 (NE_BASE+44) //W,Remote DMA數(shù)據(jù)長度高位#define NE_RCR (NE_BASE+48) //W,接收配置寄存器,初始化時(shí)寫入0x04,表示只接收發(fā)給本網(wǎng)卡MAC地址的,大于64字節(jié)的以太網(wǎng)包或廣播包#define NE_TCR (NE_BASE+52) //發(fā)送配置寄存器,初始化開始時(shí)寫入0x02,置網(wǎng)卡為Loop Back模式,停止發(fā)送數(shù)據(jù)包,初始化結(jié)束寫入0x00。正常發(fā)送數(shù)據(jù)包并加上CRC#define NE_DCR (NE_BASE+56) //W,數(shù)據(jù)配置寄存器,初始化時(shí)寫入0x48,8位模式,F(xiàn)IFO深度8字節(jié),DMA方式#define NE_IMR (NE_BASE+60) //W,中斷屏蔽寄存器它的各位和ISR中的各位相對應(yīng),向IMR寫入值即為打開相應(yīng)中斷//page1 registers#define NE_PAR0 (NE_BASE+4) //R/W,網(wǎng)卡MAC地址最高位#define NE_PAR1 (NE_BASE+8) //R/W,網(wǎng)卡MAC地址#define NE_PAR2 (NE_BASE+12) //R/W,網(wǎng)卡MAC地址#define NE_PAR3 (NE_BASE+16) //R/W,網(wǎng)卡MAC地址#define NE_PAR4 (NE_BASE+20) //R/W,網(wǎng)卡MAC地址#define NE_PAR5 (NE_BASE+24) //R/W,網(wǎng)卡MAC地址最低位#define NE_CURR (NE_BASE+28) //R/W,接收緩沖環(huán)寫指針#define NE_MAR0 (NE_BASE+32) //R/W,組播寄存器 #define NE_MAR1 (NE_BASE+36) //R/W,組播寄存器 #define NE_MAR2 (NE_BASE+40) //R/W,組播寄存器 #define NE_MAR3 (NE_BASE+44) //R/W,組播寄存器 #define NE_MAR4 (NE_BASE+48) //R/W,組播寄存器 #define NE_MAR5 (NE_BASE+52) //R/W,組播寄存器 #define NE_MAR6 (NE_BASE+56) //R/W,組播寄存器 #define NE_MAR7 (NE_BASE+60) //R/W,組播寄存器 //page2 registers (read only in 8019as)//#define NE_PSTART 0x01 //R,接收緩沖環(huán)起始頁//#define NE_PSTOP 0x02 //R,接收緩沖環(huán)終止頁(不包括此頁)//#define NE_TPSR 0x04 //R,Local DMA發(fā)送緩沖起始頁寄存器//#define NE_RCR 0x0c //R,接收配置寄存器//#define NE_TCR 0x0d //R,發(fā)送配置寄存器//#define NE_DCR 0x0e //R,數(shù)據(jù)配置寄存器//#define NE_IMR 0x0f //R,用來讀中斷屏蔽寄存器IMR狀態(tài)//CR命令寄存器的命令 #define CMD_STOP 0x01 //網(wǎng)卡停止收發(fā)數(shù)據(jù)#define CMD_RUN 0x02 //網(wǎng)卡執(zhí)行命令并開始收發(fā)數(shù)據(jù)包(命令為下面四種)#define CMD_XMIT 0x04 //Local DMA SEND(網(wǎng)卡――>以太網(wǎng) )#define CMD_READ 0x08 //Remote DMA READ,用于手動(dòng)接收數(shù)據(jù)(網(wǎng)卡――>CPU)#define CMD_WRITE 0x10 //Remote DMA WRITE (網(wǎng)卡<――CPU)#define CMD_SEND 0x18 //SEND COMMAND命令,用于自動(dòng)接收數(shù)據(jù)包 (網(wǎng)卡――>CPU)#define CMD_NODMA 0x20 //停止DMA操作#define CMD_PAGE0 0x00 // 選擇第0頁(要先選頁,再讀寫該頁寄存器)#define CMD_PAGE1 0x40 // 選擇第1頁#define CMD_PAGE2 0x80 // 選擇第2頁//寫入TPSR的值 #define XMIT_START 0x4000 //發(fā)送緩沖起始地址(寫入時(shí)要右移8位得到頁號(hào))//寫入PSTART的值 #define RECV_START 0x4600 //接收緩沖起始地址(寫入時(shí)要右移8位得到頁號(hào))//寫入PSTOP的值 #define RECV_STOP 0x6000 //接收緩沖結(jié)束地址(寫入時(shí)要右移8位得到頁號(hào))//中斷狀態(tài)寄存器的值 #define ISR_PRX 0x01 //正確接收數(shù)據(jù)包中斷。做接收處理#define ISR_PTX 0x02 //正確發(fā)送數(shù)據(jù)包中斷。做不做處理要看上層軟件了。#define ISR_RXE 0x04 //接收數(shù)據(jù)包出錯(cuò)。做重新設(shè)置BNRY=CURR處理。 #define ISR_TXE 0x08 //由于沖突次數(shù)過多,發(fā)送出錯(cuò)。做重發(fā)處理#define ISR_OVW 0x10 //網(wǎng)卡內(nèi)存溢出。做軟件重啟網(wǎng)卡處理。見手冊。#define ISR_CNT 0x20 //出錯(cuò)計(jì)數(shù)器中斷,屏蔽掉(屏蔽用IMR寄存器)。#define ISR_RDC 0x40 //Remote DMA結(jié)束 。屏蔽掉。輪詢等待DMA結(jié)束。#define ISR_RST 0x80 //網(wǎng)卡Reset,屏蔽掉。//中斷屏蔽寄存器的值 #define ISR_PRX 0x01#define ISR_PTX 0x02#define ISR_RXE 0x04#define ISR_TXE 0x08#define ISR_OVW 0x10#define ISR_CNT 0x20#define ISR_RDC 0x40#define ISR_RST 0x80//數(shù)據(jù)控制寄存器//初始化時(shí)寫入0x48,8位模式,F(xiàn)IFO深度8字節(jié),DMA方式。#define DCR_WTS 0x01#define DCR_BOS 0x02#define DCR_LAS 0x04#define DCR_LS 0x08#define DCR_ARM 0x10#define DCR_FIFO2 0x00#define DCR_FIFO4 0x20#define DCR_FIFO8 0x40#define DCR_FIFO12 0x60//TCR發(fā)送配置寄存器//初始化開始時(shí)寫入0x02,置網(wǎng)卡為Loop Back模式,停止發(fā)送數(shù)據(jù)包,//初始化結(jié)束寫入0x00。正常發(fā)送數(shù)據(jù)包并加上CRC。#define TCR_CRC 0x01#define TCR_LOOP_NONE 0x00#define TCR_LOOP_INT 0x02#define TCR_LOOP_EXT 0x06#define TCR_ATD 0x08#define TCR_OFST 0x10//RCR接收配置寄存器//初始化時(shí)寫入0x04。只接收發(fā)給本網(wǎng)卡MAC地址大于64字節(jié)的以太網(wǎng)包或廣播包#define RCR_SEP 0x01#define RCR_AR 0x02#define RCR_AB 0x04#define RCR_AM 0x08#define RCR_PRO 0x10#define RCR_MON 0x20//yangye 2003-1-21//use DEBUGF(NE2KIF_DEBUG,("abcdefg %d",IntVar)); to print debug infoextern void skyeye_printf( char *, ... );#ifndef PRINT#define PRINT skyeye_printf#endif /* PRINT */#define NE2KIF_DEBUG 1 //chy 2003-01-23: ../../src/include/lwip/debug.h:92: warning: this is the location of the previous definition//#define DEBUGF(debug, x) do { if(debug){ PRINT x; } } while(0)/***at91 interrtupt part ****/extern void at91_mask_ack_irq(unsigned int irq);extern void at91_unmask_irq(unsigned int irq);#define enbale_net_irq \ at91_mask_ack_irq(AT91_NET_IRQNUM); \ at91_unmask_irq(AT91_NET_IRQNUM)/*****************/ #endif /* __SKYEYE_NE2K_H */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -