📄 haldm9000.h
字号:
/*
* 修改记录:
* 20060310 创建文件。
*
*/
/**
* @file halDM9000.h
* @brief
* <li>功能: DM9000设备HAL相关数据和宏等</li>
* @date 20060310
*/
#ifndef _DM9000_H
#define _DM9000_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************** 引用部分 *********************************/
#include <sysTypes.h> /// 使用系统类型定义
#include <bspPubInfo.h>
#include "dllNetEther.h"
/****************************** 声明部分 *********************************/
T_BOOL DM9000_Find( T_VOID *vpEtherDevData );
T_BOOL DM9000_GetResource( T_VOID *vpEtherDevData );
T_BOOL DM9000_ReleaseResource( T_VOID *vpEtherDevData );
T_BOOL DM9000_Start( T_VOID *vpEtherDevData );
T_BOOL DM9000_Stop( T_VOID *vpEtherDevData );
T_BOOL DM9000_SendPkt( T_VOID *vpEtherDevData, T_CHAR * pktBuf, T_WORD wWtLen );
T_BOOL DM9000_ChipIntEnable( T_VOID *vpEtherDevData );
T_BOOL DM9000_ChipIntDisable( T_VOID *vpEtherDevData );
T_UWORD DM9000_GetIntType( T_VOID *vpEtherDevData, T_UWORD uwVector, T_WORD *wpIntInfo );
T_BOOL DM9000_GetPktLen( T_VOID *vpEtherDevData, T_WORD *pktLen);
T_BOOL DM9000_GetPktData( T_VOID *vpEtherDevData, T_CHAR * bpKtBuf, T_WORD wKtLen );
T_BOOL DM9000_HandleOtherIsrType( T_VOID *vpEtherDevData, T_WORD wIntInfo);
T_BOOL DM9000_GetMacAddr( T_VOID *vpEtherDevData, T_CHAR *bpmacAddr );
T_BOOL DM9000_SetMacAddr( T_VOID *vpEtherDevData, T_CHAR *bpmacAddr );
T_BOOL DM9000_LineCheck( T_VOID *vpEtherDevData, T_WORD *wplineStatus);
T_BOOL DM9000_AddMultiAddr( T_VOID * vpEtherDevData, T_CHAR *bMacAddr, T_VOID * vMultiMacChain);
T_BOOL DM9000_DelMultiAddr( T_VOID * vpEtherDevData, T_CHAR *bMacAddr, T_VOID * vMultiMacChain);
/****************************** 定义部分 *********************************/
#define DMFE_TX_TIMEOUT 2000
//DM9000寄存器描述.
#define NCR 0x00 // Network Control Register
#define NSR 0x01 // Network Status Register
#define TCR 0x02 // TX Control Register
#define TSR1 0x03 // TX Status Register 1, mainly including various error states
#define TSR2 0x04 // TX Status Register 2, mainly including various error states
#define RCR 0x05 // RX Control Register
#define RSR 0x06 // RX Status Register
#define ROCR 0x07 // Receive Overflow Count Register
#define BPTR 0x08 // Back Pressure Threshold Register
#define FCTR 0x09 // Flow Control Threshold Register
#define FCR 0x0a // RX/TX Flow Control Register
#define EPCR 0x0b // EEPROM & PHY Control Register
#define EPAR 0x0c // EEPROM & PHY Word Address Register
#define EPDRL 0x0d // EEPROM & PHY Low-byte Data Register
#define EPDRH 0x0e // EEPROM & PHY High-byte Data Register
#define WCR 0x0f // Wake Up Control Register
#define PAR 0x10 // Physical Address Register
#define MAR 0x16 // Multicast Address Register
#define GPCR 0x1e // General Purpose Control Register
#define GPR 0x1f // General Purpose Register
#define TRPAL 0x22 // TX SRAM Read Pointer Address Low Byte
#define TRPAH 0x23 // TX SRAM Read Pointer Address High Byte
#define RWPAL 0x24 // RX SRAM Write Pointer Address Low Byte
#define RWPAH 0x25 // RX SRAM Write Pointer Address High Byte
#define VID 0x28 // Vendor ID
#define VID_L 0x28 // Vendor ID Low Byte
#define VID_H 0x29 // Vendor ID High Byte
#define PID 0x2a // Product ID
#define PID_L 0x2a // Product ID Low Byte
#define PID_H 0x2b // Product ID High Byte
#define CHIPR 0x2c // CHIP Revision
#define SMCR 0x2f // Special Mode Control Register
#define MRCMDX 0xf0 // Memory Data Read Command Without Address Increment Register
#define MRCMD 0xf2 // Memory Data Read Command With Address Increment Register
#define MRRL 0xf4 // Memory Data Read Address Register Low Byte
#define MRRH 0xf5 // Memory Data Read Address Register High Byte
#define MWCMDX 0xf6 // Memory Data Write Command Without Address Increment Register
#define MWCMD 0xf8 // Memory Data Write Command With Address Increment Register
#define MWRL 0xfa // Memory Data Write Address Register Low Byte
#define MWRH 0xfb // Memory Data Write Address Register High Byte
#define TXPLL 0xfc // TX Packet Length Low Byte Register
#define TXPLH 0xfd // TX Packet Length Low Byte Register
#define ISR 0xfe // Interrupt Status Register
#define IMR 0xff // Interrupt Mask Register
#define DM9000_ID 0x90000A46l
#define DM9000_REG00 0x00
#define DM9000_REG05 0x30 // SKIP_CRC/SKIP_LONG
#define DM9000_REG08 0x27
#define DM9000_REG09 0x38
#define DM9000_REG0A 0x08
#define DM9000_REGFF 0x83 // 83 2 81 wangz 040524
//NCR command bits
#define MSK_RESET 0x01 //software reset
//ISR and TSR status bits
#define MSK_PRX 0x01 // rx with no error
#define MSK_PTX 0x02 // tx with no error
#define MSK_OVF 0x04 // rx overflow
#define DM9000_PHY 0x40 // PHY address 0x01
#define DM9000_PKT_MAX 1536 // Received packet max size
#define DM9000_PKT_RDY 0x01 // Packet ready to receive
#define DM9000_INT_MII 0x00
#define DM9000_EXT_MII 0x81
#define DM9000_VID_L 0x28
#define DM9000_VID_H 0x29
#define DM9000_PID_L 0x2A
#define DM9000_PID_H 0x2B
#define EPCR_EPOS 0x08
#define EPCR_EPRD 0x04
#define EPCR_EPWE 0x02
#define EPCR_EPST 0x01
/// 设备接口函数表宏
#define HAL_DM9000_DLL_NETETHER_INTERFACE {DM9000_Find,\
DM9000_GetResource,\
DM9000_ReleaseResource,\
DM9000_Start,\
DM9000_Stop,\
DM9000_SendPkt,\
DM9000_ChipIntEnable,\
DM9000_ChipIntDisable,\
DM9000_GetIntType,\
DM9000_GetPktLen,\
DM9000_GetPktData,\
DM9000_HandleOtherIsrType,\
DM9000_GetMacAddr,\
DM9000_SetMacAddr,\
DM9000_LineCheck,\
DM9000_AddMultiAddr,\
DM9000_DelMultiAddr}
typedef struct
{
T_UDWORD rx_packets;
T_UDWORD tx_packets;
T_UDWORD rx_errors;
T_UDWORD tx_errors;
T_UDWORD rx_length_errors;
T_UDWORD runt_length_errors;
T_UDWORD long_length_errors;
T_UDWORD rx_fifo_errors;
T_UDWORD rx_crc_errors;
} T_EnetStatistics;
typedef struct
{
T_UDWORD trans_start;
//T_UHWORD op_mode;
T_UHWORD io_mode;
T_UHWORD tx_pkt_cnt;
T_UDWORD queue_pkt_len;
T_UHWORD reg0;
T_UHWORD reg5;
T_UHWORD reg8;
T_UHWORD reg9;
T_UHWORD rega;
T_UBYTE local_mac_address[6];
T_BYTE tbusy;
T_BYTE interrupt;
T_BYTE start;
T_EnetStatistics stat;
} T_EiDevice;
/// 设备数据表结构
typedef struct{
//-------------------------系统统一要求的配置项
T_BSP_DEV_PUB_DATA pub;
//--------------------------HAL本身需要配置的部分,该部分由HAL设计
T_VBYTE *vbpDM9000Addr;
T_UHWORD op_mode;
T_BYTE mac0;
T_BYTE mac1;
T_BYTE mac2;
T_BYTE mac3;
T_BYTE mac4;
T_BYTE mac5;
//--------------------------HAL本身不需要配置的部分
T_EiDevice tEiStatus; //设备信息结构
}T_HAL_DM9000_DEV_DATA;
enum DM9000_PHY_mode {DM9000_10MHD = 0, DM9000_100MHD = 1, DM9000_10MFD = 4,
DM9000_100MFD = 5, DM9000_AUTO = 8, DM9000_1M_HPNA =0x10 };
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif //#ifndef _DM9000_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -