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

📄 lib_emac.h

📁 《嵌入式网络系统设计-基于Atmel ARM7 系列》这个本书的光盘资料
💻 H
字号:
//*------------------------------------------------------------------------------------------------
//* 文件名				: lib_emac.h
//* 功能描述			: EMAC外设的函数库头文件
//* 作者    			: 焦海波
//* 版本				: 0.1
//* 建立日期、时间		: 2006/06/07 10:40
//* 最近修改日期、时间	: 
//* 修改原因			: 
//*------------------------------------------------------------------------------------------------

#ifndef	__lib_emac_h
#define	__lib_emac_h

//*---------------------------------------- 结构体及宏定义 -----------------------------------------
//* IP地址
#define IP_ADDR_0			192
#define IP_ADDR_1			168
#define IP_ADDR_2			10
#define IP_ADDR_3			72

//* 网关地址
#define	GATEWAY_ADDR_0 		192
#define	GATEWAY_ADDR_1 		168
#define	GATEWAY_ADDR_2 		10
#define	GATEWAY_ADDR_3 		1

//* 掩码地址
#define	NET_MASK_0			255
#define	NET_MASK_1			255
#define	NET_MASK_2			255
#define	NET_MASK_3			0

#define	EMAC_MII_PINS		(AT91C_PB8_EMDC         | \
							AT91C_PB9_EMDIO         | \
							AT91C_PB2_ETX0          | \
							AT91C_PB3_ETX1          | \
							AT91C_PB10_ETX2         | \
							AT91C_PB11_ETX3         | \
							AT91C_PB1_ETXEN         | \
							AT91C_PB0_ETXCK_EREFCK  | \
							AT91C_PB15_ERXDV_ECRSDV | \
							AT91C_PB5_ERX0			| \
							AT91C_PB6_ERX1			| \
							AT91C_PB13_ERX2			| \
							AT91C_PB14_ERX3			| \
							AT91C_PB17_ERXCK		| \
							AT91C_PB16_ECOL			| \
							AT91C_PB4_ECRS			| \
							AT91C_PB7_ERXER)
							
//* PHY芯片地址
#define	PHY_ADDR			0x01

//* PHY芯片RTL8201的ID号
#define	PHY_ID_RTL8201		0x82010000
										
#define	PHY_REG_ID1			0x02		//* PHY标识寄存器1
#define	PHY_REG_ID2			0x03		//* PHY标识寄存器2

#define	PHY_REG_BMSR		0x01		//* 基本模式状态寄存器
#define	PHY_REG_ANLPAR		0x05		//* 自动协商连接方能力寄存器

//* PHY寄存器位定义
#define	PHY_BMSR_LINKESTABLISHED	((INT16U)(1 << 2))	//* 已经建立了有效连接(基本模式状态寄存器)
#define	PHY_BMSR_AUTONEGEND			((INT16U)(1 << 5))	//* 自动协商已经结束(基本模式状态寄存器)
#define	PHY_ANLPAR_100TXFD			((INT16U)(1 << 8))	//* 连接方支持100Base-TX全双工
#define	PHY_ANLPAR_100TX			((INT16U)(1 << 7))	//* 连接方支持100Base-TX
#define	PHY_ANLPAR_10TFD			((INT16U)(1 << 6))	//* 连接方支持10Base-T全双工

#define	EMAC_NCFGR_SPD_FD_MASK		0xFFFFFFFC			//* 网络配置寄存器的速度和双工位掩码数

#define	NB_RX_BUFS					32					//* 接收缓冲区个数
#define	ETH_RX_BUF_SIZE				128					//* EMAC数据手册规定接收缓冲区仅占128字节大小,128 * 32接收缓冲区共4096字节

#define	NB_TX_BUFS					16					//* 发送缓冲区个数
#define	ETH_TX_BUF_SIZE				256					//* 发送缓冲区大小

/* 接收缓冲区描述符标志位及状态位宏定义 */
#define	RxDESC_FLAG_WARP			0x00000002			//* 标记接收缓冲区描述符列表中的最后一个描述符
#define	RxDESC_FLAG_OWNSHIP			0x00000001			//* 标记接收缓冲区为程序所有

/* 发送缓冲区描述符状态信息宏定义 */
#define	TxDESC_STATUS_LAST_BUF		((INT32U)(1 << 15))	//* 帧的最后一个缓冲区
#define	TxDESC_STATUS_BUF_SIZE		((INT32U)0x000007FF)//* 缓冲区长度掩码
#define	TxDESC_STATUS_WRAP			((INT32U)(1 << 30))	//* 最后一个缓冲区

//* 接收缓冲区描述符
#define	EMAC_RxB_ADDR_MASK			0xFFFFFFFC			//* 接收缓冲区描述符地址掩码
typedef struct{
	INT32U u32RxBAddrAndFlag;
	union
	{
		INT32U u32Status;
		struct {
			INT32U bitLen					:12;
			INT32U bitRxBOffset				:2;
			INT32U bitStartOfFrm			:1;
			INT32U bitEndOfFrm				:1;
			INT32U bitCFI					:1;
			INT32U bitVLANPrio				:3;
			INT32U bitPrioTag				:1;
			INT32U bitVLANTag				:1;
			INT32U bitTypeID				:1;
			INT32U bitSA4Match				:1;
			INT32U bitSA3Match				:1;
			INT32U bitSA2Match				:1;
			INT32U bitSA1Match				:1;
			INT32U bitRsrved0				:1;
			INT32U bitExtAddrMatch			:1;
			INT32U bitUniCastHashMatch		:1;
			INT32U bitMultiCastHashMatch	:1;
			INT32U bitIsBroadCastAddr		:1;
		}bstStatus;		
	}uStatus;
}AT91S_RxBDescriptor, *AT91PS_RxBDescriptor;

//* 发送缓冲区描述符 
typedef struct{
	INT32U u32TxBAddr;
	union
	{
		INT32U u32Status;
		struct {
			INT32U bitLen			:11;
			INT32U bitRsrved0		:4;
			INT32U bitIsLastBuf		:1;
			INT32U bitIsNoCRC		:1;
			INT32U bitRsrved1		:10;
			INT32U bitIsBExhausted	:1;
			INT32U bitIsTxUnderrun	:1;
			INT32U bitTxError		:1;
			INT32U bitIsWrap		:1;
			INT32U bitIsUsed		:1;
		}bstStatus;		
	}uStatus;
}AT91S_TxBDescriptor, *AT91PS_TxBDescriptor;
										
//* 使能EMAC管理数据接口
#define	macEnableMDI()								\
{													\
	AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE;	\
}

//* 禁止EMAC管理数据接口
#define	macDisableMDI()								\
{													\
	AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE;	\
}
//*-------------------------------------------- 原型声明 -----------------------------------------
extern void EMACInit(void);
extern INT16U GetInputPacketLen(void);
extern void EMACReadPacket(INT8S *pbTo, INT16U u16SegmentLen, BOOLEAN blIsLastPbuf);
extern BOOLEAN EMACSendPacket(INT8S *pbFrom, INT32U u32Length, BOOLEAN blIsEndOfFrame);
#endif

⌨️ 快捷键说明

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