📄 halrtl8019as.h
字号:
***************************************************************************//* * 修改记录: * *//** * @file * @brief * <li>功能:</li> * <li>设计思想:</li> * @date */#ifndef _HAL_RTL8019AS#define _HAL_RTL8019AS#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//**************************** 引用部分 *****************************************/#include <bspPubInfo.h> /// 使用BSP公共信息#include "dllNetEther.h" /// 引用以太网络DLL的宏定义/**************************** 声明部分 *****************************************/T_BOOL RTL8019AS_Find(T_VOID *vpHalDevData);T_BOOL RTL8019AS_GetResource(T_VOID *vpHalDevData);T_BOOL RTL8019AS_ReleaseResource(T_VOID *vpHalDevData);T_BOOL RTL8019AS_Start(T_VOID *vpHalDevData);T_BOOL RTL8019AS_Stop(T_VOID *vpHalDevData);T_BOOL RTL8019AS_SendPkt(T_VOID *vpHalDevData, T_BYTE *bpKtBuf, T_WORD wWtLen);T_BOOL RTL8019AS_ChipIntEnable(T_VOID *vpHalDevData);T_BOOL RTL8019AS_ChipIntDisable(T_VOID *vpHalDevData);T_UWORD RTL8019AS_GetIntType(T_VOID *vpHalDevData, T_UWORD uwVector, T_WORD *wpIntInfo);T_BOOL RTL8019AS_GetPktLen(T_VOID *vpHalDevData, T_WORD *wpKtLen);T_BOOL RTL8019AS_GetPktData(T_VOID *vpHalDevData, T_BYTE *bpKtBuf, T_WORD wKtLen);T_BOOL RTL8019AS_HandleOtherIsrType(T_VOID *vpHalDevData, T_WORD wIntInfo);T_BOOL RTL8019AS_ReadMacAddr(T_VOID *vpHalDevData, T_BYTE *bpMacAddr);T_BOOL RTL8019AS_LineCheck(T_VOID *vpHalDevData, T_WORD *wplineStatus);T_BOOL RTL8019AS_AddMultiAddr( T_VOID *vpHalDevData, T_CHAR *bMacAddr, T_VOID *vMultiMacChain);T_BOOL RTL8019AS_DelMultiAddr( T_VOID *vpHalDevData, T_CHAR *bMacAddr, T_VOID *vMultiMacChain);T_BOOL RTL8019AS_GetMacAddr(T_VOID *vpHalDevData, T_CHAR *cpMacAddr);T_BOOL RTL8019AS_SetMacAddr(T_VOID *vpHalDevData, T_CHAR *cpMacAddr);/**************************** 定义部分 *****************************************/#define ETHERNET_DEBUG 1 //打印调试信息(0不打印)。#define ETHERNET_DMA_WORD 1 //16位(word)DMA(0为8位DMA)。#define TX_START_PAGE 0x40 //发送缓冲区首地址。#define RX_START_PAGE 0x46 //接收FIFO缓冲队列开始页。#define RX_STOP_PAGE 0x80 //接收FIFO缓冲队列停止页。#define EN_CMD 0x00 //网卡指令寄存器。//0页寄存器偏移值。#define EN0_CLDALO 0x01 //当前本地DMA数据地址(低8位)。(只读)#define EN0_STARTPG 0x01 //接收FIFO缓冲队列开始页。#define EN0_CLDAHI 0x02 //当前本地DMA数据地址(高8位)。(只读)#define EN0_STOPPG 0x02 //接收FIFO缓冲队列停止页。(不包括此页)#define EN0_BOUNDARY 0x03 //接收FIFO缓冲队列读页指针。#define EN0_TSR 0x04 //传输状态寄存器。(只读)#define EN0_TPSR 0x04 //发送缓冲区首地址。#define EN0_NCR 0x05 //冲突数寄存器。(只读)#define EN0_TCNTLO 0x05 //本地DMA数据发送长度低位。#define EN0_FIFO 0x06 //FIFO寄存器。(只读)#define EN0_TCNTHI 0x06 //本地DMA数据发送长度高位。#define EN0_ISR 0x07 //中断状态寄存器。#define EN0_CRDALO 0x08 //当前远端DMA数据地址(低8位)。(只读)#define EN0_RSARLO 0x08 //远端DMA数据起始地址(低8位)。#define EN0_CRDAHI 0x09 //当前远端DMA数据地址(高8位)。(只读)#define EN0_RSARHI 0x09 //远端DMA数据起始地址(高8位)。#define EN0_ID0 0x0a //网卡芯片ID寄存器。(存放ASCII‘P')#define EN0_RCNTLO 0x0a //远端DMA数据长度低位。#define EN0_ID1 0x0b //网卡芯片ID寄存器。(存放ASCII‘p')#define EN0_RCNTHI 0x0b //远端DMA数据长度高位。#define EN0_RSR 0x0c //接收状态寄存器。(只读)#define EN0_RXCR 0x0c //接收结构寄存器。#define EN0_TXCR 0x0d //传输配置寄存器。#define EN0_COUNTER0 0x0d //帧同步错误记数寄存器。(只读)#define EN0_DCFG 0x0e //数据结构寄存器。#define EN0_COUNTER1 0x0e //CRC错误记录寄存器。(只读)#define EN0_IMR 0x0f //中断屏蔽寄存器(设置某一位会使相应中断打开)。#define EN0_COUNTER2 0x0f //遗失数据包数记录寄存器。(只读)//0页寄存器偏移值。#define EN1_PHYS 0x01 //网卡物理MAC地址寄存器(PAR0—PAR5)。#define EN1_CURPAG 0x07 //当前页地址。#define EN1_MULT 0x08 //Multicast filter mask array (8 bytes) RD WR#define EN_DATAPORT 0x10 //远端DMA Port//EN0_RXCR(接收结构寄存器)配置:#define ENRXCR_RXCONFIG 0x0c //EN0_RXCR:接收数据包,包括普通包和广播包。#define ENRXCR_RXOFF 0x20 //EN0_RXCR: 不接收数据包。//EN0_TXCR(传输配置寄存器)配置:#define ENTXCR_TXCONFIG 0x10 //EN0_TXCR: 使能冲突补偿。#define ENTXCR_TXLOOKL 0x02 //EN0_TXCR: 内部lookback。//EN_CMD(网卡指令寄存器):#define ENCMD_STOP 0x01 //网卡停止收发数据。#define ENCMD_START 0x02 //网卡执行命令/开始收发数据包。#define ENCMD_TXP 0x04 //启动本地DMA数据发送(网卡――>以太网)。#define ENCMD_RREAD 0x08 //启动远端DMA数据读(网卡——>CPU)。#define ENCMD_RWRITE 0x10 //启动远端DMA数据写(网卡<――CPU)。#define ENCMD_SEND 0x18 //发送数据包命令。#define ENCMD_NODMA 0x20 //停止DMA操作。#define ENCMD_PAGE0 0x00 //选择第0页(要先选页,再读写该页寄存器)。#define ENCMD_PAGE1 0x40 //选择第1页。#define ENCMD_PAGE2 0x80 //选择第2页。#define ENCMD_PAGE3 0xC0 //选择第3页。//EN0_ISR(中断状态寄存器):#define ENISR_PRX 0x01 //正确接收数据包中断。#define ENISR_PTX 0x02 //正确发送数据包中断。#define ENISR_RXE 0x04 //接收数据包出错。#define ENISR_TXE 0x08 //由于冲突次数过多,发送出错。做重发处理#define ENISR_OVW 0x10 //网卡内存溢出。做软件重启网络芯片处理。#define ENISR_CNT 0x20 //出错计数器中断。#define ENISR_RDC 0x40 //远端DMA结束中断。#define ENISR_RST 0x80 //网络芯片Reset。#define ENISR_ALL 0x3f //所有中断。#define ENISR_PART 0x35 //屏蔽发送中断。//DCR(数据结构寄存器):#define DCR_FT (0x02 << 5) //FIFO片选。#define DCR_NO (0x01 << 3) //无Loopback正常模式。#define DCR_WTS (0x01 << 0) //宽字DMA传送。//EN0_RSR(接收状态寄存器)和接受包:#define ENRSR_RXOK 0x01 //接收到一个好包。#define ENRSR_CRL 0x02 //CRC错误。#define ENRSR_FAE 0x04 //frame alignment错误。#define ENRSR_MPA 0x10 //丢包。#define ENRSR_PHY 0x20 //physical/multicase地址。#define ENRSR_DIS 0x40 //关闭接收,监视模式。#define ENRSR_DFR 0x80 //deferring//EN0_TSR(传送状态寄存器):#define ENTSR_PTX 0x01 //数据包传送无错误。#define ENTSR_ND 0x02#define ENTSR_COL 0x04 //传送时候发生传播冲突。#define ENTSR_ABT 0x08 //因为超频的冲突而导致NIC失败的传送。#define ENTSR_CRS 0x10 //传送器在传送过程中丢失数据包。#define ENTSR_FU 0x20 //传送时发生 "FIFO underrun"。#define ENTSR_CDH 0x40 //发生"heartbeat" 传送器传送信号失败。#define ENTSR_OWC 0x80 //发生out-of-window collision。///设备接口函数表宏#define HAL_RTL8019AS_DLL_NETETHER_INTERFACE {RTL8019AS_Find,\ RTL8019AS_GetResource,\ RTL8019AS_ReleaseResource,\ RTL8019AS_Start,\ RTL8019AS_Stop,\ RTL8019AS_SendPkt,\ RTL8019AS_ChipIntEnable,\ RTL8019AS_ChipIntDisable,\ RTL8019AS_GetIntType,\ RTL8019AS_GetPktLen,\ RTL8019AS_GetPktData,\ RTL8019AS_HandleOtherIsrType,\ RTL8019AS_GetMacAddr,\ RTL8019AS_SetMacAddr,\ RTL8019AS_LineCheck,\ RTL8019AS_AddMultiAddr,\ RTL8019AS_DelMultiAddr}///设备数据表结构typedef struct{ /// 第一部分:设备公共信息 T_BSP_DEV_PUB_DATA pub; /// 第二部分:HAL私有的,需要用户配置的信息 T_WORD IoBaseAddr; //基地址 /// 第三部分:HAL私有的,不需要用户配置的信息 T_UWORD word16:1; //16位(word)DMA(0为8位DMA)。 T_UBYTE txStartPage; T_UBYTE rxStartPage; T_UBYTE stopPage; T_UBYTE currentPage; T_UWORD curOffset; T_UWORD rxingPage; T_UWORD flag; T_UBYTE status; //接收到的数据包状态。 T_UBYTE next; //接收到的数据包的下一页或者下一个包。 T_UWORD count; //接收到的数据包(加包头)的长度。 T_UWORD headSize; //数据包包头长度。 T_UBYTE macaddr[6]; //存储MAC地址数组}T_HAL_RTL8019AS_DEV_DATA;typedef struct{ T_UBYTE status; //接收到的数据包状态。 T_UBYTE next; //接收到的数据包的下一页或者下一个包。 T_UHWORD count; //接收到的数据包(加包头)的长度。}EN_PKTHEADER_T; //用于存放包头信息。#ifdef __cplusplus}#endif /* __cplusplus */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -