?? lib_emac.h
字號:
//*------------------------------------------------------------------------------------------------
//* 文件名 : lib_emac.h
//* 功能描述 : EMAC外設的函數庫頭文件
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、時間 : 2006/06/07 10:40
//* 最近修改日期、時間 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
#ifndef __lib_emac_h
#define __lib_emac_h
//*---------------------------------------- 結構體及宏定義 -----------------------------------------
//* PHY芯片RTL8201的ID號
#define PHY_ID_RTL8201 0x82010000
//* PHY芯片地址
#define PHY_ADDR 0x01
#define PHY_REG_BMSR 0x01 //* 基本模式狀態寄存器
#define PHY_REG_ID1 0x02 //* PHY標識寄存器1
#define PHY_REG_ID2 0x03 //* PHY標識寄存器2
#define PHY_REG_ANLPAR 0x05 //* 自動協商連接方能力寄存器
//* PHY寄存器位定義
#define PHY_BMSR_LINKESTABLISHED ((UWORD)(1 << 2)) //* 已經建立了有效連接(基本模式狀態寄存器)
#define PHY_BMSR_AUTONEGEND ((UWORD)(1 << 5)) //* 自動協商已經結束(基本模式狀態寄存器)
#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 EMAC_NCFGR_SPD_FD_MASK 0xFFFFFFFC
#define NB_TX_BUFS 16 //* 發送緩沖區個數
#define ETH_TX_BUF_SIZE 256 //* 發送緩沖區大小
#define NB_RX_BUFS 32 //* 接收緩沖區個數
#define ETH_RX_BUF_SIZE 128 //* EMAC數據手冊規定接收緩沖區僅占128字節大小,128 * 32接收緩沖區共4096字節
/* 接收緩沖區描述符標志位及狀態位宏定義 */
#define RxDESC_FLAG_WARP 0x00000002 //* 標記接收緩沖區描述符列表中的最后一個描述符
#define RxDESC_FLAG_OWNSHIP 0x00000001 //* 標記接收緩沖區為程序所有
/* 發送緩沖區描述狀態信息宏定義 */
#define TxDESC_STATUS_BUF_SIZE ((ULONG)0x000007FF) //* 緩沖區長度
#define TxDESC_STATUS_LAST_BUF ((ULONG)(1 << 15)) //* 幀的最后一個緩沖區
#define TxDESC_STATUS_NO_CRC ((ULONG)(1 << 16)) //* 沒有CRC被附加到當前幀
#define TxDESC_STATUS_BUF_EXHAUSTED ((ULONG)(1 << 27)) //* 發送中途緩沖區就被用光
#define TxDESC_STATUS_Tx_UNDERRUN ((ULONG)(1 << 28)) //* 發送欠速
#define TxDESC_STATUS_Tx_ERROR ((ULONG)(1 << 29)) //* 發送錯誤
#define TxDESC_STATUS_WRAP ((ULONG)(1 << 30)) //* 最后一個緩沖區
#define TxDESC_STATUS_USED ((ULONG)(1 << 31)) //* 如果成功發送,緩沖區描述符隊列的第一個緩沖區描述符的USED狀態位被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)
//* 接收緩沖區描述符結構,參見AT91SAM7X256數據手冊(完整版)
#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;
//* 發送緩沖區描述符結構,按照EMAC數據手冊的描述建立,參見AT91SAM7X256數據手冊(完整版)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管理數據接口
#define EnableMDI() \
{ \
AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE; \
}
//* 禁止EMAC管理數據接口
#define DisableMDI() \
{ \
AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE; \
}
//*-------------------------------------- 函數原型聲明 ---------------------------------------------
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -