?? lib_emac.h
字號(hào):
//*------------------------------------------------------------------------------------------------
//* 文件名 : lib_emac.h
//* 功能描述 : EMAC外設(shè)的函數(shù)庫(kù)頭文件
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、時(shí)間 : 2006/06/07 10:40
//* 最近修改日期、時(shí)間 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
#ifndef __lib_emac_h
#define __lib_emac_h
//*---------------------------------------- 結(jié)構(gòu)體及宏定義 -----------------------------------------
//* PHY芯片RTL8201的ID號(hào)
#define PHY_ID_RTL8201 0x82010000
//* PHY芯片地址
#define PHY_ADDR 0x01
//* PHY芯片內(nèi)部寄存器地址
#define PHY_REG_BMCR 0x00 //* 基本模式控制寄存器
#define PHY_REG_BMSR 0x01 //* 基本模式狀態(tài)寄存器
#define PHY_REG_ID1 0x02 //* PHY標(biāo)識(shí)寄存器1
#define PHY_REG_ID2 0x03 //* PHY標(biāo)識(shí)寄存器2
#define PHY_REG_ANLPAR 0x05 //* 自動(dòng)協(xié)商連接方能力寄存器
//* PHY寄存器位定義
#define PHY_BMSR_LINKESTABLISHED ((UWORD)(1 << 2)) //* 已經(jīng)建立了有效連接(基本模式狀態(tài)寄存器)
#define PHY_BMSR_AUTONEGEND ((UWORD)(1 << 5)) //* 自動(dòng)協(xié)商已經(jīng)結(jié)束(基本模式狀態(tài)寄存器)
#define PHY_BMCR_ENAUTONEG ((UWORD)(1 << 12)) //* 自動(dòng)協(xié)商使能(基本模式控制寄存器)
#define PHY_ANLPAR_100TXFD ((UWORD)(1 << 8)) //* 連接方支持100Base-TX全雙工
#define PHY_ANLPAR_100TX ((UWORD)(1 << 7)) //* 連接方支持100Base-TX
#define PHY_ANLPAR_10TFD ((UWORD)(1 << 6)) //* 連接方支持10Base-T全雙工
#define PHY_ANLPAR_10T ((UWORD)(1 << 5)) //* 連接方支持10Base-T
//* 網(wǎng)絡(luò)配置寄存器的速度和雙工位掩碼
#define EMAC_NCFGR_SPD_FD_MASK 0xFFFFFFFC
#define EMAC_INT_PRIOR 7 //* 指定EMAC中斷優(yōu)先級(jí)為7
//* MAC地址
#define MAC_ADDR_0 0xBC
#define MAC_ADDR_1 0x20
#define MAC_ADDR_2 0x06
#define MAC_ADDR_3 0x06
#define MAC_ADDR_4 0x07
#define MAC_ADDR_5 0x10
//* IP地址
#define IP_ADDR_0 192
#define IP_ADDR_1 168
#define IP_ADDR_2 10
#define IP_ADDR_3 72
//* 網(wǎng)關(guān)地址
#define GATEWAY_ADDR_0 192
#define GATEWAY_ADDR_1 168
#define GATEWAY_ADDR_2 10
#define GATEWAY_ADDR_3 1
//* 掩碼地址
#define NET_MASK0 255
#define NET_MASK1 255
#define NET_MASK2 255
#define NET_MASK3 0
#define NB_TX_BUFS (MEMP_NUM_PBUF/2) //* 發(fā)送緩沖區(qū)個(gè)數(shù)
#define ETH_TX_BUF_SIZE (PBUF_POOL_BUFSIZE) //* 發(fā)送緩沖區(qū)大小
#define NB_RX_BUFS 32 //* 接收緩沖區(qū)個(gè)數(shù)
#define ETH_RX_BUF_SIZE 128 //* EMAC數(shù)據(jù)手冊(cè)規(guī)定接收緩沖區(qū)古128字節(jié)大小,128 * 32接收緩沖區(qū)共4096字節(jié)
/* 接收緩沖區(qū)描述符標(biāo)志位及狀態(tài)位宏定義 */
#define RxDESC_FLAG_WARP 0x00000002 //* 標(biāo)記接收緩沖區(qū)描述符列表中的最后一個(gè)描述符
#define RxDESC_FLAG_OWNSHIP 0x00000001 //* 標(biāo)記接收緩沖區(qū)為程序所有
/* 發(fā)送緩沖區(qū)描述狀態(tài)信息宏定義 */
#define TxDESC_STATUS_BUF_SIZE ((ULONG)0x000007FF) //* 緩沖區(qū)長(zhǎng)度
#define TxDESC_STATUS_LAST_BUF ((ULONG)(1 << 15)) //* 幀的最后一個(gè)緩沖區(qū)
#define TxDESC_STATUS_NO_CRC ((ULONG)(1 << 16)) //* 沒有CRC被附加到當(dāng)前幀
#define TxDESC_STATUS_BUF_EXHAUSTED ((ULONG)(1 << 27)) //* 發(fā)送中途緩沖區(qū)就被用光
#define TxDESC_STATUS_Tx_UNDERRUN ((ULONG)(1 << 28)) //* 發(fā)送欠速
#define TxDESC_STATUS_Tx_ERROR ((ULONG)(1 << 29)) //* 發(fā)送錯(cuò)誤
#define TxDESC_STATUS_WRAP ((ULONG)(1 << 30)) //* 最后一個(gè)緩沖區(qū)
#define TxDESC_STATUS_USED ((ULONG)(1 << 31)) //* 如果成功發(fā)送,緩沖區(qū)描述符隊(duì)列的第一個(gè)緩沖區(qū)描述符的USED狀態(tài)位被EMAC置位
#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)
//* 接收緩沖區(qū)描述符結(jié)構(gòu),參見AT91SAM7X256數(shù)據(jù)手冊(cè)(完整版)
#define EMAC_RxB_ADDR_MASK 0xFFFFFFFC
typedef struct{
ULONG ulRxBAddrAndFlag;
union
{
ULONG ulStatus;
struct {
ULONG bitLen :12;
ULONG bitRxBOffset :2;
ULONG bitStartOfFrm :1;
ULONG bitEndOfFrm :1;
ULONG bitCFI :1;
ULONG bitVLANPrio :3;
ULONG bitPrioTag :1;
ULONG bitVLANTag :1;
ULONG bitTypeID :1;
ULONG bitSA4Match :1;
ULONG bitSA3Match :1;
ULONG bitSA2Match :1;
ULONG bitSA1Match :1;
ULONG bitRsrved0 :1;
ULONG bitExtAddrMatch :1;
ULONG bitUniCastHashMatch :1;
ULONG bitMultiCastHashMatch :1;
ULONG bitIsBroadCastAddr :1;
}bstStatus;
}uStatus;
}AT91S_RxBDescriptor, *AT91PS_RxBDescriptor;
//* 發(fā)送緩沖區(qū)描述符結(jié)構(gòu),按照EMAC數(shù)據(jù)手冊(cè)的描述建立,參見AT91SAM7X256數(shù)據(jù)手冊(cè)(完整版)EMAC部分
typedef struct{
ULONG ulTxBAddr;
union
{
ULONG ulStatus;
struct {
ULONG bitLen :11;
ULONG bitRsrved0 :4;
ULONG bitIsLastBuf :1;
ULONG bitIsNoCRC :1;
ULONG bitRsrved1 :10;
ULONG bitIsBExhausted :1;
ULONG bitIsTxUnderrun :1;
ULONG bitTxError :1;
ULONG bitIsWrap :1;
ULONG bitIsUsed :1;
}bstStatus;
}uStatus;
}AT91S_TxBDescriptor, *AT91PS_TxBDescriptor;
//* 使能EMAC管理數(shù)據(jù)接口
#define EnableMDI() \
{ \
AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE; \
}
//* 禁止EMAC管理數(shù)據(jù)接口
#define DisableMDI() \
{ \
AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE; \
}
//*-------------------------------------- 函數(shù)原型聲明 ---------------------------------------------
extern BOOLEAN EMACSendPacket(BYTE *pbFrom, ULONG ulLength, BOOLEAN blIsEndOfFrame);
extern void EMACReadPacket(BYTE *pbTo, UWORD uwSegmentLen, BOOLEAN blIsLastPbuf);
extern void EMACInit(void);
extern UWORD GetInputPacketLen(void);
#endif
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -