📄 halat91rm9200emac.h
字号:
***********************************************************************//* * 修改记录: * 20060517 实现at91rm9200EMAC的HAL,该HAL目前支持网络组件的DLL。 * 20060706 修改at91rm9200EMAC在M4下实现,将mac地址和通讯方式提出让用户配置。 *//** * @file halat91rm9200EMAC.h * @brief * <li>功能:实现at91rm9200EMAC的HAL,该HAL目前支持网络组件的DLL</li> * @date 20060517 */#ifndef _HAL_AT91RM9200EMAC#define _HAL_AT91RM9200EMAC#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//**************************** 引用部分 **********************************/#include <bspPubInfo.h> //使用BSP公共信息。//#include <sysTypes.h> //使用系统定义的数据类型。#include "dllNetEther.h" //引用以太网络DLL的宏定义。/**************************** 声明部分 *********************************/T_BOOL AT91RM9200EMAC_Find(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_GetResource(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_ReleaseResource(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_Start(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_Stop(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_SendPkt(T_VOID *vpHalDevData, T_BYTE *bpKtBuf, T_WORD wWtLen);T_BOOL AT91RM9200EMAC_ChipIntEnable(T_VOID *vpHalDevData);T_BOOL AT91RM9200EMAC_ChipIntDisable(T_VOID *vpHalDevData);T_UWORD AT91RM9200EMAC_GetIntType(T_VOID *vpHalDevData, T_UWORD uwVector, T_WORD *wpIntInfo);T_BOOL AT91RM9200EMAC_GetPktLen(T_VOID *vpHalDevData, T_WORD *wpKtLen);T_BOOL AT91RM9200EMAC_GetPktData(T_VOID *vpHalDevData, T_BYTE *bpKtBuf, T_WORD wKtLen);T_BOOL AT91RM9200EMAC_HandleOtherIsrType(T_VOID *vpHalDevData, T_WORD wIntInfo);T_BOOL AT91RM9200EMAC_GetMacAddr(T_VOID *vpHalDevData, T_CHAR *bpMacAddr);T_BOOL AT91RM9200EMAC_SetMacAddr(T_VOID *vpHalDevData, T_CHAR *bpMacAddr);T_BOOL AT91RM9200EMAC_LineCheck(T_VOID *vpHalDevData, T_WORD *wplineStatus);T_BOOL AT91RM9200EMAC_AddMultiAddr( T_VOID * pEtherDevData, T_CHAR *macAddr, T_VOID * multiMacChain);T_BOOL AT91RM9200EMAC_DelMultiAddr( T_VOID * pEtherDevData, T_CHAR *macAddr, T_VOID * multiMacChain);/*************************** 定义部分 *********************************////设备接口函数表宏#define HAL_AT91RM9200EMAC_DLL_NETETHER_INTERFACE {AT91RM9200EMAC_Find,\ AT91RM9200EMAC_GetResource,\ AT91RM9200EMAC_ReleaseResource,\ AT91RM9200EMAC_Start,\ AT91RM9200EMAC_Stop,\ AT91RM9200EMAC_SendPkt,\ AT91RM9200EMAC_ChipIntEnable,\ AT91RM9200EMAC_ChipIntDisable,\ AT91RM9200EMAC_GetIntType,\ AT91RM9200EMAC_GetPktLen,\ AT91RM9200EMAC_GetPktData,\ AT91RM9200EMAC_HandleOtherIsrType,\ AT91RM9200EMAC_GetMacAddr,\ AT91RM9200EMAC_SetMacAddr,\ AT91RM9200EMAC_LineCheck,\ AT91RM9200EMAC_AddMultiAddr,\ AT91RM9200EMAC_DelMultiAddr}///设备数据表结构typedef struct{ /// 第一部分:设备公共信息 T_BSP_DEV_PUB_DATA pub; /// 第二部分:HAL私有的,需要用户配置的信息 T_UWORD vector1; //中断 PHY的 T_WORD mobileEtherType; //通讯模式 T_CHAR emacAddr[6]; //MAC地址}T_HAL_AT91RM9200EMAC_DEV_DATA;enum MobileEtherType{MBPS_AUTO_AUTO_NEGOTIATE,MBPS10_HALF_DUPLEX,MBPS10_FULL_DUPLEX,MBPS100_HALF_DUPLEX,MBPS100_FULL_DUPLEX};typedef volatile T_UWORD AT91_REG; //At91Rm9200寄存器硬件定义。///电源管理控制器软件API定义。#ifndef ASMtypedef struct T_AT91_PMC{ AT91_REG PMC_SCER; //系统时钟使能寄存器。 AT91_REG PMC_SCDR; //系统时钟禁用寄存器。 AT91_REG PMC_SCSR; //系统时钟状态寄存器。 AT91_REG Reserved0[1];//保留。 AT91_REG PMC_PCER; //外设时钟使能寄存器。 AT91_REG PMC_PCDR; //外设时钟禁用寄存器。 AT91_REG PMC_PCSR; //外设时钟状态寄存器。 AT91_REG Reserved1[5];//保留。 AT91_REG PMC_MCKR; //主机时钟寄存器。 AT91_REG Reserved2[3];//保留。 AT91_REG PMC_PCKR[8]; //可编程时钟寄存器。 AT91_REG PMC_IER; //中断使能寄存器。 AT91_REG PMC_IDR; //中断禁用寄存器。 AT91_REG PMC_SR; //状态寄存器。 AT91_REG PMC_IMR; //中断屏蔽寄存器。}tAT91_PMC, *tpAT91_PMC;///并行输入/输出控制器软件API定义。typedef struct T_AT91_PIO{ AT91_REG PIO_PER; //PIO使能寄存器。 AT91_REG PIO_PDR; //PIO禁用寄存器。 AT91_REG PIO_PSR; //PIO状态寄存器。 AT91_REG Reserved0[1];//保留。 AT91_REG PIO_OER; //输出使能寄存器。 AT91_REG PIO_ODR; //输出禁用寄存器。 AT91_REG PIO_OSR; //输出状态寄存器。 AT91_REG Reserved1[1];//保留。 AT91_REG PIO_IFER; //毛刺输入滤波器使能寄存器。 AT91_REG PIO_IFDR; //毛刺输入滤波器禁用寄存器。 AT91_REG PIO_IFSR; //毛刺输入滤波器状态寄存器。 AT91_REG Reserved2[1];//保留。 AT91_REG PIO_SODR; //PIO置位输出数据寄存器。 AT91_REG PIO_CODR; //PIO清零输出数据寄存器。 AT91_REG PIO_ODSR; //PIO输出数据状态寄存器。 AT91_REG PIO_PDSR; //PIO引脚数据状态寄存器。 AT91_REG PIO_IER; //中断使能寄存器。 AT91_REG PIO_IDR; //中断禁用寄存器。 AT91_REG PIO_IMR; //中断屏蔽寄存器。 AT91_REG PIO_ISR; //中断状态寄存器。 AT91_REG PIO_MDER; //PIO多驱动使能寄存器。 AT91_REG PIO_MDDR; //PIO多驱动禁用寄存器。 AT91_REG PIO_MDSR; //PIO多驱动状态寄存器。 AT91_REG Reserved3[1];//保留。 AT91_REG PIO_PPUDR; //PIO Pad上位禁用寄存器。 AT91_REG PIO_PPUER; //PIO Pad上位禁用寄存器。 AT91_REG PIO_PPUSR; //PIO Pad上位状态寄存器。 AT91_REG Reserved4[1];//保留。 AT91_REG PIO_ASR; //PIO外设A选择寄存器。 AT91_REG PIO_BSR; //PIO外设B选择寄存器。 AT91_REG PIO_ABSR; //PIO AB状态寄存器。 AT91_REG Reserved5[9];//保留。 AT91_REG PIO_OWER; //PIO输出写使能寄存器。 AT91_REG PIO_OWDR; //PIO输出写禁用寄存器。 AT91_REG PIO_OWSR; //PIO输出写状态寄存器。}tAT91_PIO, *tpAT91_PIO;///高级中断控制器软件API定义。typedef struct T_AT91_AIC{ AT91_REG AIC_SMR[32]; //源模式寄存器0-31。 AT91_REG AIC_SVR[32]; //源向量寄存器0-31。 AT91_REG AIC_IVR; //中断向量寄存器。 AT91_REG AIC_FVR; //快速中断向量寄存器。 AT91_REG AIC_ISR; //中断状态寄存器。 AT91_REG AIC_IPR; //中断挂起寄存器。 AT91_REG AIC_IMR; //中断屏蔽寄存器。 AT91_REG AIC_CISR; //内核中断状态寄存器。 AT91_REG Reserved0[2];//保留。 AT91_REG AIC_IECR; //中断使能命令寄存器。 AT91_REG AIC_IDCR; //中断禁用命令寄存器。 AT91_REG AIC_ICCR; //中断清零命令寄存器。 AT91_REG AIC_ISCR; //中断置位命令寄存器。 AT91_REG AIC_EOICR; //中断结束命令寄存器。 AT91_REG AIC_SPU; //伪中断向量寄存器。 AT91_REG AIC_DCR; //调试控制寄存器。 AT91_REG Reserved1[1];//保留。 AT91_REG AIC_FFER; //快速强制使能寄存器。 AT91_REG AIC_FFDR; //快速强制禁用寄存器。 AT91_REG AIC_FFSR; //快速强制状态寄存器。}tAT91_AIC, *tpAT91_AIC;///Ethernet MAC软件API定义。typedef struct T_AT91_EMAC{ AT91_REG EMAC_CTL; //EMAC控制寄存器。 AT91_REG EMAC_CFG; //EMAC配置寄存器。 AT91_REG EMAC_SR; //EMAC控制寄存器。 AT91_REG EMAC_TAR; //EMAC发送地址寄存器。 AT91_REG EMAC_TCR; //EMAC发送控制寄存器。 AT91_REG EMAC_TSR; //EMAC发送状态寄存器。 AT91_REG EMAC_RBQP; //EMAC接收缓冲队列指针。 AT91_REG Reserved0[1];//保留。 AT91_REG EMAC_RSR; //EMAC接收状态寄存器。 AT91_REG EMAC_ISR; //EMAC中断状态寄存器。 AT91_REG EMAC_IER; //EMAC中断使能寄存器。 AT91_REG EMAC_IDR; //EMAC中断禁用寄存器。 AT91_REG EMAC_IMR; //EMAC中断屏蔽寄存器。 AT91_REG EMAC_MAN; //EMAC PHY维护寄存器。 AT91_REG Reserved1[2];//保留。 AT91_REG EMAC_FRA; //帧发送成功寄存器。 AT91_REG EMAC_SCOL; //单冲突帧寄存器。 AT91_REG EMAC_MCOL; //多冲突帧寄存器。 AT91_REG EMAC_OK; //帧接收成功寄存器。 AT91_REG EMAC_SEQE; //帧检查下列错误寄存器。 AT91_REG EMAC_ALE; //对齐错误寄存器。 AT91_REG EMAC_DTE; //延期发送帧寄存器。 AT91_REG EMAC_LCOL; //最后冲突寄存器。 AT91_REG EMAC_ECOL; //额外冲突寄存器。 AT91_REG EMAC_CSE; //载波敏感错误寄存器。 AT91_REG EMAC_TUE; //发送欠载运行错误寄存器。 AT91_REG EMAC_CDE; //代码错误寄存器。 AT91_REG EMAC_ELR; //长度超过错误寄存器。 AT91_REG EMAC_RJB; //接收超时错误寄存器。 AT91_REG EMAC_USF; //过小帧寄存器。 AT91_REG EMAC_SQEE; //SQE 测试错误寄存器。 AT91_REG EMAC_DRFC; //丢弃RX帧寄存器。 AT91_REG Reserved2[3];//保留。 AT91_REG EMAC_HSH; //EMAC Hash地址高[63:32]。 AT91_REG EMAC_HSL; //EMAC Hash地址低[31:0]。 AT91_REG EMAC_SA1L; //EMAC 专用地址1低, 前4 bytes AT91_REG EMAC_SA1H; //EMAC 专用地址1高, 后2 bytes AT91_REG EMAC_SA2L; //EMAC 专用地址2低, 前4 bytes AT91_REG EMAC_SA2H; //EMAC 专用地址2高, 后2 bytes AT91_REG EMAC_SA3L; //EMAC 专用地址3低, 前4 bytes AT91_REG EMAC_SA3H; //EMAC 专用地址3高, 后2 bytes AT91_REG EMAC_SA4L; //EMAC 专用地址4低, 前4 bytes AT91_REG EMAC_SA4H; //EMAC 专用地址4高, 后2 bytes}tAT91_EMAC, *tpAT91_EMAC;#endif///AIC_SMR(AIC中断源模式寄存器): (AIC 偏移: 0x0)#define AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE ((T_UWORD) 0x0 << 5)//设置中断源类型为电平敏感(在AIC_SMR第5、6位设置)。///EMAC_CTL(EMAC控制寄存器): (EMAC 偏移: 0x0)#define AT91C_EMAC_LB ((T_UWORD) 0x1 << 0) //(EMAC) 回送,可选。设置时回送信号为电平。#define AT91C_EMAC_LBL ((T_UWORD) 0x1 << 1) //(EMAC) 本地回送。#define AT91C_EMAC_RE ((T_UWORD) 0x1 << 2) //(EMAC) 使能接收数据。#define AT91C_EMAC_TE ((T_UWORD) 0x1 << 3) //(EMAC) 使能发送数据。#define AT91C_EMAC_MPE ((T_UWORD) 0x1 << 4) //(EMAC) 管理端口使能。#define AT91C_EMAC_CSR ((T_UWORD) 0x1 << 5) //(EMAC) 清除统计寄存器。#define AT91C_EMAC_ISR ((T_UWORD) 0x1 << 6) //(EMAC) 添加统计寄存器。#define AT91C_EMAC_WES ((T_UWORD) 0x1 << 7) //(EMAC) 统计寄存器写使能。#define AT91C_EMAC_BP ((T_UWORD) 0x1 << 8) //(EMAC) 反压。设置该位,则载半双工模式冲突时强制所有接收帧,通过发送64位数据。///EMAC_CFG(EMAC配置寄存器): (EMAC 偏移: 0x4)#define AT91C_EMAC_SPD ((T_UWORD) 0x1 << 0) //(EMAC) 速度。1为100Mbits/s,0为10Mbits/s。#define AT91C_EMAC_FD ((T_UWORD) 0x1 << 1) //(EMAC) 全双工。发送时允许接收。#define AT91C_EMAC_BR ((T_UWORD) 0x1 << 2) //(EMAC) 位速,可选。#define AT91C_EMAC_CAF ((T_UWORD) 0x1 << 4) //(EMAC) 接收所有有效帧。#define AT91C_EMAC_NBC ((T_UWORD) 0x1 << 5) //(EMAC) 无广播。#define AT91C_EMAC_MTI ((T_UWORD) 0x1 << 6) //(EMAC) 多点函数Hash使能。当目的地址的6位指向的hash寄存器置为位,多点帧接收。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -