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

📄 ne2kif.h

📁 最新的lwip 1.3.0版本在ucos平台上的移植
💻 H
字号:
#ifndef __HGXXX_NE2K_H__
#define __HGXXX_NE2K_H__

#include "lwip/debug.h"
#include "cc.h"
#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/ip.h"
#include "lwip/mem.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include "netif/etharp.h"

err_t ethernetif_init(struct netif *netif);

#define NE_WORDMODE		1

#define NE_START_PG		0x40     				// First page of TX buffer
#if	NE_WORDMODE
#define NE_STOP_PG		0x7e					// Last page + 1 of RX Ring
#define NE_DCRVAL		0x49
#else
#define NE_STOP_PG		0x5f
#define NE_DCRVAL		0x48
#endif

#define TX_PAGES		6       
#define TX_START_PG		NE_START_PG
#define RX_START_PG		NE_START_PG + TX_PAGES
#define RX_STOP_PG		NE_STOP_PG
#define RX_CURR_PG		RX_START_PG + 1


#define NE_IO_BASE		0x06000000UL	//0x06000300
#define NE_SHIFT(x)		(*(volatile unsigned char *)(NE_IO_BASE + ((x)<<1)))

#define NE_CR			NE_SHIFT(0x00)          //R/W,对不同的页,CR都是同一个
#define NE_DATAW		(*(volatile unsigned short *)(NE_IO_BASE + ((0x10)<<1)))
#define NE_DATAB		(*(volatile unsigned char  *)(NE_IO_BASE + ((0x10)<<1)))
#define NE_RESET	   		NE_SHIFT(0x18)	     //0x18-0x1f 是网卡复位端口,重复,只用0x1f,读写它将复位网卡

#define NE_CLDA0		NE_SHIFT(0x01)			// Low byte of current local dma addr
#define NE_CLDA1		NE_SHIFT(0x02)			// High byte of current local dma addr
#define NE_TSR			NE_SHIFT(0x04)			// Transmit status reg
#define NE_NCR			NE_SHIFT(0x05)			// Number of collision reg
#define NE_FIFO			NE_SHIFT(0x06)			// FIFO
#define NE_CRDA0		NE_SHIFT(0x08)			// Low byte of current remote dma address
#define NE_CRDA1		NE_SHIFT(0x09)			// High byte of current remote dma address
#define NE_8019ID0		NE_SHIFT(0x0a)			// 
#define NE_8019ID1		NE_SHIFT(0x0b)			//
#define NE_RSR			NE_SHIFT(0x0c)			// Rx status reg
#define	NE_CNTR0		NE_SHIFT(0x0d)			// Rcv alignment error counter
#define NE_CNTR1		NE_SHIFT(0x0e)			// Rcv CRC error counter
#define NE_CNTR2		NE_SHIFT(0x0f)			// Rcv missed frame error counter

#define NE_PSTART		NE_SHIFT(0x01)			// Starting page of ring bfr
#define NE_PSTOP		NE_SHIFT(0x02)			// Ending page +1 of ring bfr
#define NE_TPSR			NE_SHIFT(0x04)			// Transmit starting page
#define NE_TBCR0		NE_SHIFT(0x05)			// Low byte of tx byte count
#define NE_TBCR1		NE_SHIFT(0x06)			// High byte of tx byte count
#define NE_RSAR0		NE_SHIFT(0x08)			// Low byte of remote start address reg
#define NE_RSAR1		NE_SHIFT(0x09)			// High byte of remote start address reg
#define NE_RBCR0		NE_SHIFT(0x0a)			// Low byte of remote byte count reg
#define NE_RBCR1		NE_SHIFT(0x0b)			// Highe byte of remote byte count reg
#define NE_RCR			NE_SHIFT(0x0c)			// RX configuration reg
#define NE_TCR			NE_SHIFT(0x0d)			// TX configuration reg
#define NE_DCR			NE_SHIFT(0x0e)			// Data configuration reg
#define NE_IMR			NE_SHIFT(0x0f)			// Interrupt mask reg

#define NE_BNRY			NE_SHIFT(0x03)			// Boundary page of ring bfr
#define NE_ISR			NE_SHIFT(0x07)			// Interrupt status reg

#define NE_PAR0			NE_SHIFT(0x01)			// This board's physical enet addr
#define NE_PAR1			NE_SHIFT(0x02)
#define NE_PAR2			NE_SHIFT(0x03)
#define NE_PAR3			NE_SHIFT(0x04)
#define NE_PAR4			NE_SHIFT(0x05)
#define NE_PAR5			NE_SHIFT(0x06)

#define NE_CURR			NE_SHIFT(0x07)			// Current memory page

#define NE_MAR0			NE_SHIFT(0x08)			// Multicast filter mask array
#define NE_MAR1			NE_SHIFT(0x09)
#define NE_MAR2			NE_SHIFT(0x0a)
#define NE_MAR3			NE_SHIFT(0x0b)
#define NE_MAR4			NE_SHIFT(0x0c)
#define NE_MAR5			NE_SHIFT(0x0d)
#define NE_MAR6			NE_SHIFT(0x0e)
#define NE_MAR7			NE_SHIFT(0x0f)

#define NE_9346CR		NE_SHIFT(0x01)
#define NE_BPAGE		NE_SHIFT(0x02)
#define NE_CONFIG0		NE_SHIFT(0x03)
#define NE_CONFIG1		NE_SHIFT(0x04)
#define NE_CONFIG2		NE_SHIFT(0x05)
#define NE_CONFIG3		NE_SHIFT(0x06)
#define NE_TEST			NE_SHIFT(0x07)
#define NE_CSNSAV		NE_SHIFT(0x08)
#define NE_HLTCLK		NE_SHIFT(0x09)

#define NE_INTR			NE_SHIFT(0x0b)
#define NE_FMWP			NE_SHIFT(0x0c)
#define NE_CONFIG4		NE_SHIFT(0x0d)

#define ENCR_STOP	    0x01					// Stop and reset the chip         
#define ENCR_START	    0x02					// Start the chip, clear reset 
#define ENCR_TRANS	    0x04					// Transmit a frame        
#define ENCR_RREAD	    0x08					// Remote read             
#define ENCR_RWRITE	    0x10					// Remote write       
#define ENCR_NODMA	    0x20					// Remote DMA              
#define ENCR_PAGE0	    0x00					// Select page chip registers        
#define ENCR_PAGE1	    0x40					// using the two high-order bits   
#define ENCR_PAGE2	    0x80 
#define ENCR_PAGE3	    0xc0 

#define	ENISR_RX 		0x01					// Receiver, no error   
#define	ENISR_TX	    0x02					// Transceiver, no error  
#define	ENISR_RX_ERR	0x04					// Receiver, with error    
#define	ENISR_TX_ERR	0x08					// Transmitter, with error     
#define	ENISR_OVER	    0x10					// Receiver overwrote the ring    
#define	ENISR_COUNTERS	0x20					// Counters need emptying    
#define	ENISR_RDC	    0x40					// remote dma complete 
#define	ENISR_RESET     0x80					// Reset completed      
#define	ENISR_ALL	    0x35					// 3f  Interrupts we will enable 	

#define ENIMR_RX		0x01
#define ENIMR_TX		0x02
#define ENIMR_RX_ERR	0x04
#define ENIMR_TX_ERR	0x08
#define ENIMR_OVER		0x10
#define ENIMR_COUNTERS	0x20
#define ENIMR_RDC		0x40

#define ENTSR_PTX	    0x01					// Packet transmitted without error 
#define ENTSR_ND	    0x02					// The transmit wasn't deferred
#define ENTSR_COL	    0x04					// The transmit collided at least once
#define ENTSR_ABT	    0x08					// The transmit collided 16 times, and was deferred
#define ENTSR_CRS	    0x10					// The carrier sense was lost
#define ENTSR_FU	    0x20					// A "FIFO underrun" occurred during transmit
#define ENTSR_CDH	    0x40					// The collision detect "heartbeat" signal was lost
#define ENTSR_OWC	    0x80					// There was an out-of-window collision

#define ENRSR_RXOK  	0x01					// Received a good packet 	
#define ENRSR_CRC	    0x02					// CRC error(CNTR1++) 
#define ENRSR_FAE	    0x04					// Frame alignment error(CNTR0++)
#define ENRSR_FO	    0x08					// FIFO overrun when receiving 
#define ENRSR_MPA	    0x10					// Missed packet.. Gap area isn't exist 
#define ENRSR_PHY	    0x20					// Physical/multicase address 
#define ENRSR_DIS	    0x40					// Receiver disable.set in monitor mode 
#define ENRSR_DEF	    0x80					// Deferring because of collision  

#define ENTCR_TXCONFIG 	0x00    				// Normal transmit mode 
#define ENTCR_CRC	    0x01					// inhibit CRC,do not append crc when 1 
#define ENTCR_LOOP	    0x02					// set internal loopback mode 
#define ENTCR_LB01	    0x06					// encoded loopback control 
#define ENTCR_ATD	    0x08					// auto tx disable  
#define ENTCR_OFST	    0x10					// collision offset enable
#define ENTCR_TXOFF		0x02

#define ENRCR_RXCONFIG 	0x04 					// EN0_RXCR: broadcasts,no multicast,errors
#define ENRCR_CRC	    0x01					// Save error packets(admit) 
#define ENRCR_RUNT	    0x02					// Accept runt pckt(below 64bytes) 
#define ENRCR_BCST	    0x04					// Accept broadcasts when 1 
#define ENRCR_MULTI		0x08					// Multicast (if pass filter) when 0 
#define ENRCR_PROMP		0x10					// Promiscuous physical addresses when 1
#define ENRCR_MON	    0x20					// Monitor mode (no packets rcvd)
#define ENRCR_RXOFF		0x20 

#define ENDCR_WTS	    0x01					// byte transfer mode selection 0/1 byte/word width 
#define ENDCR_BOS	    0x02					// byte order selection              
#define ENDCR_LAS	    0x04					// long addr selection (must be set to zero) 
#define ENDCR_BMS	    0x08					// loopback select       set is normal  mode    
#define ENDCR_ARM	    0x10					// autoinitialize remote when 1     
#define ENDCR_FT00	    0x00					// fifo treshold   2 byte          
#define ENDCR_FT01	    0x20					//                  4 byte    
#define ENDCR_FT10	    0x40					//                  8 byte     
#define ENDCR_FT11	    0x60					//                 12 byte      

#ifndef PRINT
#define		PRINT	sio_printf
#endif  /* PRINT */

#define NE2KIF_DEBUG 1

#endif

⌨️ 快捷键说明

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