⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halat91rm9200emac.h

📁 包含8139
💻 H
📖 第 1 页 / 共 2 页
字号:
***********************************************************************//* * 修改记录: *	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 + -