⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8019.h

📁 LWIP1.1.1在UCOS-II2.61上的移植
💻 H
字号:


#ifndef __SKYEYE_NE2K_H
#define __SKYEYE_NE2K_H

err_t ne2k_send_packet(struct netif *netif, struct pbuf *p,
		  struct ip_addr *ipaddr);

void ne2k_recv_packet(struct netif *netif);

err_t ne2k_init(struct netif *netif);

#define NE_BASE           0x6000000   
#define	ADDR_SFT		1

//yangye 2003-1-20

#define NE_CR              (NE_BASE+0)             //R/W,对不同的页,CR都是同一个
#define	NE_DMA		       (NE_BASE+(0x10<<ADDR_SFT))	     //0x10-0x10 是DMA端口,重复,只用0x10.
#define	NE_RESET	       (NE_BASE+(0x18<<ADDR_SFT))	     //0x18-0x1f 是网卡复位端口,重复,只用0x1f,读写它将复位网卡

//page0 registers
#define NE_PSTART          (NE_BASE+(1<<ADDR_SFT))            //W,接收缓冲环起始页
#define NE_PSTOP           (NE_BASE+(2<<ADDR_SFT))            //W,接收缓冲环终止页(不包括此页)
#define NE_BNRY            (NE_BASE+(3<<ADDR_SFT))            //R/W,接收缓冲环读指针,指向下一个包到来时的起始页,应初始化成=CURR=PSTART
#define NE_TPSR            (NE_BASE+(4<<ADDR_SFT))            //W,Local DMA发送缓冲起始页寄存器
#define NE_TBCR0           (NE_BASE+(5<<ADDR_SFT))           //W,Local DMA发送长度低位
#define NE_TBCR1           (NE_BASE+(6<<ADDR_SFT))            //W,Local DMA发送长度高位
#define NE_ISR             (NE_BASE+(7<<ADDR_SFT))            //R/W,中断状态寄存器
#define NE_RSAR0           (NE_BASE+(8<<ADDR_SFT))            //W,Remote DMA目的起始地址低位
#define NE_RSAR1           (NE_BASE+(9<<ADDR_SFT))            //W,Remote DMA目的起始地址高位
//这两个是CPU向网卡写入或读出数据包的实际长度,执行Remote DMA命令前设置
#define NE_RBCR0           (NE_BASE+(10<<ADDR_SFT))            //W,Remote DMA数据长度低位
#define NE_RBCR1           (NE_BASE+(11<<ADDR_SFT))            //W,Remote DMA数据长度高位
#define NE_RCR             (NE_BASE+(12<<ADDR_SFT))            //W,接收配置寄存器,初始化时写入0x04,表示只接收发给本网卡MAC地址的,大于64字节的以太网包或广播包
#define NE_TCR             (NE_BASE+(13<<ADDR_SFT))            //发送配置寄存器,初始化开始时写入0x02,置网卡为Loop Back模式,停止发送数据包,初始化结束写入0x00。正常发送数据包并加上CRC
#define NE_DCR             (NE_BASE+(14<<ADDR_SFT))            //W,数据配置寄存器,初始化时写入0x48,8位模式,FIFO深度8字节,DMA方式
#define NE_IMR             (NE_BASE+(15<<ADDR_SFT))            //W,中断屏蔽寄存器它的各位和ISR中的各位相对应,向IMR写入值即为打开相应中断

#define ID8019L	           (NE_BASE+(10<<ADDR_SFT))             //R device ID 
#define ID8019H            (NE_BASE+(11<<ADDR_SFT))  
//page1 registers
#define NE_PAR0            (NE_BASE+(1<<ADDR_SFT))            //R/W,网卡MAC地址最高位
#define NE_PAR1            (NE_BASE+(2<<ADDR_SFT))            //R/W,网卡MAC地址
#define NE_PAR2            (NE_BASE+(3<<ADDR_SFT))            //R/W,网卡MAC地址
#define NE_PAR3            (NE_BASE+(4<<ADDR_SFT))            //R/W,网卡MAC地址
#define NE_PAR4            (NE_BASE+(5<<ADDR_SFT))            //R/W,网卡MAC地址
#define NE_PAR5            (NE_BASE+(6<<ADDR_SFT))            //R/W,网卡MAC地址最低位
#define NE_CURR            (NE_BASE+(7<<ADDR_SFT))            //R/W,接收缓冲环写指针
#define NE_MAR0            (NE_BASE+(8<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR1            (NE_BASE+(9<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR2            (NE_BASE+(10<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR3            (NE_BASE+(11<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR4            (NE_BASE+(12<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR5            (NE_BASE+(13<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR6            (NE_BASE+(14<<ADDR_SFT))            //R/W,组播寄存器 
#define NE_MAR7            (NE_BASE+(15<<ADDR_SFT))            //R/W,组播寄存器 

//page3 registers
#define NE_CONFIG1       (NE_BASE+(4<<ADDR_SFT))  
#define NE_ENINT         0x80
#define NE_INTER           (NE_BASE+(11<<ADDR_SFT)) 


//page2 registers (read only in 8019as)
//#define NE_PSTART          0x01            //R,接收缓冲环起始页
//#define NE_PSTOP           0x02            //R,接收缓冲环终止页(不包括此页)
//#define NE_TPSR            0x04            //R,Local DMA发送缓冲起始页寄存器
//#define NE_RCR             0x0c            //R,接收配置寄存器
//#define NE_TCR             0x0d            //R,发送配置寄存器
//#define NE_DCR             0x0e            //R,数据配置寄存器
//#define NE_IMR             0x0f            //R,用来读中断屏蔽寄存器IMR状态


//CR命令寄存器的命令 
#define	CMD_STOP	0x01       //网卡停止收发数据
#define	CMD_RUN	    0x02       //网卡执行命令并开始收发数据包(命令为下面四种)
#define	CMD_XMIT	0x04       //Local DMA SEND(网卡――>以太网 )
#define	CMD_READ	0x08       //Remote DMA READ,用于手动接收数据(网卡――>CPU)
#define	CMD_WRITE	0x10       //Remote DMA WRITE (网卡<――CPU)
#define	CMD_SEND	0x18       //SEND COMMAND命令,用于自动接收数据包                                      (网卡――>CPU)
#define	CMD_NODMA	0x20       //停止DMA操作
#define	CMD_PAGE0	0x00       //   选择第0页(要先选页,再读写该页寄存器)
#define	CMD_PAGE1	0x40       //   选择第1页
#define	CMD_PAGE2	0x80       //   选择第2页
#define	CMD_PAGE3	0xc0       //   选择第3页

//写入TPSR的值 
#define	XMIT_START	 0x4000       //发送缓冲起始地址(写入时要右移8位得到页号)
//写入PSTART的值 
#define	RECV_START	 0x4600       //接收缓冲起始地址(写入时要右移8位得到页号)
//写入PSTOP的值 
#define	RECV_STOP	 0x6000       //接收缓冲结束地址(写入时要右移8位得到页号)

//中断状态寄存器的值 
#define	ISR_PRX	    	0x01       //正确接收数据包中断。做接收处理
#define	ISR_PTX		    0x02       //正确发送数据包中断。做不做处理要看上层软件了。
#define	ISR_RXE	    	0x04       //接收数据包出错。做重新设置BNRY=CURR处理。 
#define	ISR_TXE	    	0x08       //由于冲突次数过多,发送出错。做重发处理
#define	ISR_OVW	    	0x10       //网卡内存溢出。做软件重启网卡处理。见手册。
#define	ISR_CNT	    	0x20       //出错计数器中断,屏蔽掉(屏蔽用IMR寄存器)。
#define	ISR_RDC	    	0x40       //Remote DMA结束 。屏蔽掉。轮询等待DMA结束。
#define	ISR_RST		    0x80       //网卡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

//数据控制寄存器
//初始化时写入0x48,8位模式,FIFO深度8字节,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
#define DCR_ALWAYS  0x80

//TCR发送配置寄存器
//初始化开始时写入0x02,置网卡为Loop Back模式,停止发送数据包,
//初始化结束写入0x00。正常发送数据包并加上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接收配置寄存器
//初始化时写入0x04。只接收发给本网卡MAC地址大于64字节的以太网包或广播包
#define	RCR_SEP		0x01
#define	RCR_AR		0x02
#define	RCR_AB		0x04
#define	RCR_AM		0x08
#define	RCR_PRO		0x10
#define	RCR_MON		0x20


#define	outb(data,port)	       *((volatile u8_t *)(port)) = (u8_t)(data)
#define	outw(data, port)	       *((volatile u16_t *)(port)) = (u16_t)(data)
#define	out(data, port)		*((volatile u32_t *)(port)) = (u32_t)(data)
#define	inb(port)			*((volatile u8_t *)(port))
#define	inw(port)			*((volatile u16_t *)(port))
#define	in(port)			       *((volatile u32_t *)(port))



#endif /* __SKYEYE_NE2K_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -