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

📄 halat91rm9200emac.h

📁 包含8139
💻 H
📖 第 1 页 / 共 2 页
字号:
#define AT91C_EMAC_UNI        ((T_UWORD) 0x1 <<  7)  //(EMAC) Unicast Hash使能。当目的地址的6位指向的hash寄存器置为位,Unicast帧接收。#define AT91C_EMAC_BIG        ((T_UWORD) 0x1 <<  8)  //(EMAC) MAC最多接收1522字节。(通常接收帧长为1518字节)#define AT91C_EMAC_EAE        ((T_UWORD) 0x1 <<  9)  //(EMAC) 外部地址匹配使能。#define AT91C_EMAC_CLK        ((T_UWORD) 0x3 << 10)  //(EMAC) 系统时钟(MCK)分频产生MDC(MDIO时钟)。MCK64分频。#define AT91EMAC_CLK_HCLK_8   ((T_UWORD) 0x0 << 10)  //(EMAC) MCK8分频。#define AT91EMAC_CLK_HCLK_16  ((T_UWORD) 0x1 << 10)  //(EMAC) MCK16分频。#define AT91EMAC_CLK_HCLK_32  ((T_UWORD) 0x2 << 10)  //(EMAC) MCK32分频。#define AT91EMAC_CLK_HCLK_64  ((T_UWORD) 0x3 << 10)  //(EMAC) MCK64分频。#define AT91C_EMAC_RTY        ((T_UWORD) 0x1 << 12)  //(EMAC) 重新测试。#define AT91C_EMAC_RMII       ((T_UWORD) 0x1 << 13)  //(EMAC) 使能RMⅡ操作模式。复位时,选择MⅡ模式。///EMAC_SR(EMAC状态寄存器): (EMAC 偏移: 0x8)#define AT91C_EMAC_MDIO       ((T_UWORD) 0x1 <<  1)  //(EMAC) MDIO引脚设置。0 = MDIO引脚未设置。#define AT91C_EMAC_IDLE       ((T_UWORD) 0x1 <<  2)  //(EMAC) PHY逻辑运行。0 = PHY逻辑空闲。///EMAC_TCR(EMAC发送控制寄存器): (EMAC 偏移: 0x10)#define AT91C_EMAC_LEN        ((T_UWORD) 0x7FF <<  0)//(EMAC) 发送帧长。#define AT91C_EMAC_NCRC       ((T_UWORD) 0x1 << 15)  //(EMAC) 无CRC。假设CRC包含在写入的长度中,MAC不会在发送帧中添加CRC。///EMAC_TSR(发送状态寄存器): (EMAC 偏移: 0x14)#define AT91C_EMAC_OVR        ((T_UWORD) 0x1 <<  0)  //(EMAC) 以太网发送缓冲溢出。#define AT91C_EMAC_COL        ((T_UWORD) 0x1 <<  1)  //(EMAC) 冲突出现。#define AT91C_EMAC_RLE        ((T_UWORD) 0x1 <<  2)  //(EMAC) 超出限制重试。#define AT91C_EMAC_TXIDLE     ((T_UWORD) 0x1 <<  3)  //(EMAC) 发送器空闲。#define AT91C_EMAC_BNQ        ((T_UWORD) 0x1 <<  4)  //(EMAC) 以太网发送缓冲器无队列。有帧发送就绪或有其他正在发送帧时清除。#define AT91C_EMAC_COMP       ((T_UWORD) 0x1 <<  5)  //(EMAC) 发送结束。#define AT91C_EMAC_UND        ((T_UWORD) 0x1 <<  6)  //(EMAC) 发送欠载运行。当发送DMA不能即时从存储器中读取数据时。此时,发送器强制破坏CRC。///EMAC_RSR(EMAC接收状态寄存器): (EMAC 偏移: 0x20)#define AT91C_EMAC_BNA        ((T_UWORD) 0x1 <<  0)  //(EMAC) 缓冲器无效。尝试得到新缓冲器失败。#define AT91C_EMAC_REC        ((T_UWORD) 0x1 <<  1)  //(EMAC) 帧接收。已收到一个或多个帧。///EMAC_ISR(EMAC中断状态寄存器): (EMAC 偏移: 0x24)#define AT91C_EMAC_DONE       ((T_UWORD) 0x1 <<  0)  //(EMAC) 管理完成。PHY维护寄存器完成其操作。#define AT91C_EMAC_RCOM       ((T_UWORD) 0x1 <<  1)  //(EMAC) 接收完成。帧已存入存储器。#define AT91C_EMAC_RBNA       ((T_UWORD) 0x1 <<  2)  //(EMAC) 接收缓冲器无效。#define AT91C_EMAC_TOVR       ((T_UWORD) 0x1 <<  3)  //(EMAC) 发送缓冲器溢出。#define AT91C_EMAC_TUND       ((T_UWORD) 0x1 <<  4)  //(EMAC) 发送缓冲器欠载运行。#define AT91C_EMAC_RTRY       ((T_UWORD) 0x1 <<  5)  //(EMAC) 重试限制超出。#define AT91C_EMAC_TBRE       ((T_UWORD) 0x1 <<  6)  //(EMAC) 发送缓冲寄存器空。软件在发送DMA控制器中写入新缓冲器地址和长度。#define AT91C_EMAC_TCOM       ((T_UWORD) 0x1 <<  7)  //(EMAC) 发送完成。#define AT91C_EMAC_TIDLE      ((T_UWORD) 0x1 <<  8)  //(EMAC) 发送空闲。#define AT91C_EMAC_LINK       ((T_UWORD) 0x1 <<  9)  //(EMAC) 当LINK引脚改变值时置位。#define AT91C_EMAC_ROVR       ((T_UWORD) 0x1 << 10)  //(EMAC) RX溢出。#define AT91C_EMAC_HRESP      ((T_UWORD) 0x1 << 11)  //(EMAC) 中止。当DMA传输时发生中止时置位。///EMAC_IER(EMAC中断使能寄存器): (EMAC 偏移: 0x28)///EMAC_IDR(EMAC中断禁止寄存器): (EMAC 偏移: 0x2c)///EMAC_IMR(EMAC中断屏蔽寄存器): (EMAC 偏移: 0x30)///EMAC_MAN(EMAC PHY维护寄存器): (EMAC 偏移: 0x34)#define AT91C_EMAC_DATA       ((T_UWORD) 0xFFFF << 0)//(EMAC) 对于写操作,是要写如PHY的数据。读操作后,它的数据是由PHY读取的数据。#define AT91C_EMAC_CODE       ((T_UWORD) 0x3 << 16)  //(EMAC) 必须写入10,读和写相同。#define AT91C_EMAC_REGA       ((T_UWORD) 0x1F << 18) //(EMAC) 寄存器地址。指定PHY访问寄存器地址。#define AT91C_EMAC_PHYA       ((T_UWORD) 0x1F << 23) //(EMAC) PHY地址。#define AT91C_EMAC_RW         ((T_UWORD) 0x3 << 28)  //(EMAC) 无效。#define AT91C_EMAC_R          ((T_UWORD) 0x2 << 28)  //(EMAC) 读操作。#define AT91C_EMAC_W          ((T_UWORD) 0x1 << 28)  //(EMAC) 写操作。#define AT91C_EMAC_HIGH       ((T_UWORD) 0x1 << 30)  //(EMAC) 必须写入1,以保证PHY管理帧有效。#define AT91C_EMAC_LOW        ((T_UWORD) 0x1 << 31)  //(EMAC) 必须写入0,以保证PHY管理帧有效。///AT91RM9200 并行输入/输出控制器(PIO_PDR)#define AT91C_PIO_PA10       ((T_UWORD) 1 << 10)          //引脚由PA10控制。#define AT91C_PA10_ETX1      ((T_UWORD) AT91C_PIO_PA10)   //EMAC发送数据1。#define AT91C_PIO_PA11       ((T_UWORD) 1 << 11)          //引脚由PA11控制。#define AT91C_PA11_ECRS_ECRSDV ((T_UWORD) AT91C_PIO_PA11) //EMAC Carrier Sense/Carrier Sense 有效数据#define AT91C_PIO_PA12       ((T_UWORD) 1 << 12)          //引脚由PA12控制。#define AT91C_PA12_ERX0     ((T_UWORD) AT91C_PIO_PA12)    //EMAC接收数据0。#define AT91C_PIO_PA13       ((T_UWORD) 1 << 13)          //引脚由PA11控制。#define AT91C_PA13_ERX1     ((T_UWORD) AT91C_PIO_PA13)    //EMAC接收数据1。#define AT91C_PIO_PA14       ((T_UWORD) 1 << 14)          //引脚由PA14控制。#define AT91C_PA14_ERXER    ((T_UWORD) AT91C_PIO_PA14)    //EMAC接受错误。#define AT91C_PIO_PA15       ((T_UWORD) 1 << 15)          //引脚由PA15控制。#define AT91C_PA15_EMDC     ((T_UWORD) AT91C_PIO_PA15)    //EMAC时钟管理。#define AT91C_PIO_PA16       ((T_UWORD) 1 << 16)          //引脚由PA16控制。#define AT91C_PA16_EMDIO    ((T_UWORD) AT91C_PIO_PA16)    //Ethernet MAC Management Data Input/Output#define AT91C_PIO_PA7        ((T_UWORD) 1 <<  7)          //引脚由PA7控制。#define AT91C_PA7_ETXCK_EREFCK ((T_UWORD) AT91C_PIO_PA7)  //Ethernet MAC Transmit Clock/Reference Clock#define AT91C_PIO_PA8        ((T_UWORD) 1 <<  8)          //引脚由PA8控制。#define AT91C_PA8_ETXEN    ((T_UWORD) AT91C_PIO_PA8)      //EMAC发送使能。#define AT91C_PIO_PA9        ((T_UWORD) 1 <<  9)          //引脚由PA9控制。#define AT91C_PA9_ETX0     ((T_UWORD) AT91C_PIO_PA9)      //EMAC发送数据0。#define AT91C_PIO_PB29       ((T_UWORD) 1 << 29)          //引脚由PB29控制。#define AT91C_PB29_IRQ0     ((T_UWORD) AT91C_PIO_PB29)    //中断输入0(Phylink_isr)///AT91RM9200外围ID确定(用于中断)#define AT91C_ID_SYS    ((T_UWORD)  1)                    //系统设备。#define AT91C_ID_PIOB   ((T_UWORD)  3)                    //PIOB。#define AT91C_ID_EMAC   ((T_UWORD) 24)                    //EMAC。#define AT91C_ID_IRQ0   ((T_UWORD) 25)                    //IRQ0(Phylink_isr)。///AT91RM9200设备基地址。#define pAT91C_BASE_PMC       ((tpAT91_PMC) 	BASE_PMC) //(PMC)  基地址。#define pAT91C_BASE_PIOC      ((tpAT91_PIO) 	BASE_PIOC)//(PIOC) 基地址。#define pAT91C_BASE_PIOB      ((tpAT91_PIO) 	BASE_PIOB)//(PIOB) 基地址。#define pAT91C_BASE_PIOA      ((tpAT91_PIO) 	BASE_PIOA)//(PIOA) 基地址。#define pAT91C_BASE_AIC       ((tpAT91_AIC) 	BASE_AIC) //(AIC)  基地址。#define pAT91C_BASE_EMAC      ((tpAT91_EMAC) 	BASE_EMAC)//(EMAC) 基地址。#define PHYHWADDR0		(0x01 << 23)#define PHYHWADDR		(0x02 << 23)#define PHYREGWRITE    (0x1 << 10)#define MiiBusy        (0x1 << 11)#define	PHY_CNTL_REG 		(0x00 <<18)#define	PHY_STATUS_REG 	    (0x01 <<18)#define	PHY_ID_REG1    		(0x02 <<18)#define	PHY_ID_REG2    		(0x03 <<18)#define	PHY_ANA_REG    		(0x04 <<18)#define	PHY_ANLPAR_REG      (0x05 <<18)#define	PHY_ANE_REG    		(0x06 <<18)#define	PHY_ECNTL_REG1 	    (0x10 <<18)#define	PHY_QPDS_REG   	    (0x11 <<18)#define	PHY_10BOP_REG  	    (0x12 <<18)#define	PHY_ECNTL_REG2 	    (0x13 <<18)#define	PHY_INT_REG 		(0x1b <<18)#define	PHY_TXCNTL_REG 	    (0x1f <<18)///PHY Auto-negotiation Advertisement 寄存器。#define MBPS10		0#define MBPS100 	1#define MBPS_AUTO  2#define HALF_DUPLEX 		0	//半双工#define FULL_DUPLEX 		1	//全双工#define AUTO_NEGOTIATE	 	2	//自动协商///PHY 中断寄存器。#define PHY_LINKUP_EN	(1 << 8)#define Clear_PHY_INT 	(1 << 9)#define CODE ((T_UWORD) 0x2 << 16)///PHY 控制寄存器。#define SOFT_RESET_PHY		(1 << 15)#define ENABLE_LOOPBACK	(1 << 14)#define DR_100MB		(1 << 13)#define ENABLE_AN		(1 << 12)#define PHY_MAC_ISOLATE	(1 << 10)#define RESTART_AN		(1 << 9)#define PHY_FULLDUPLEX	(1 << 8)#define PHY_COL_TEST	(1 << 7)///PHY 状态寄存器。#define AN_COMPLETE	(1 << 5)#define LINK_ON			0x4///TX PHY Controller。#define PHY_STATE_AN_NOT_COMPLETE	0xffe3#define PHY_STATE_100		0x8#define PHY_STATE_10		0x4#define PHY_STATE_FULL		0x10#define RESET_PHY			0x00020000/** * @brief *	  将电源控制器(PMC)提供的外设时钟使能。 * @param[in]    pPMC:指向电源控制器(PMC)控制结构体的指针。 * @param[in]    uwPeriphIds:要使能的外设ID。 * @return	无。 */T_INLINE T_VOID AT91PMCEnablePeriphClock(tpAT91_PMC tpPMC,                                          T_UWORD uwPeriphIds){	tpPMC->PMC_PCER = uwPeriphIds;}///PIO软件API。/** * @brief *	  给外设分配引脚,I/O线分配给外设A或外设B。 * @param[in]    pPio:指向并行输入/输出控制器(PIO)控制结构体的指针。 * @param[in]    uwPeriphAEnable:外设A。 * @param[in]    uwPeriphBEnable:外设B。 * @return	无。 */T_INLINE T_VOID AT91PIOCfgPeriph(tpAT91_PIO tpPio,                                   T_UWORD uwPeriphAEnable,								   T_UWORD uwPeriphBEnable){	tpPio->PIO_ASR = uwPeriphAEnable;	tpPio->PIO_BSR = uwPeriphBEnable;	tpPio->PIO_PDR = (uwPeriphAEnable | uwPeriphBEnable);}/** * @brief *	  禁用引脚。 * @param[in]    pPio:指向并行输入/输出控制器(PIO)控制结构体的指针。 * @param[in]    uwPeriphIds:禁用PIO控制相应引脚(使能引脚外设控制)。 * @return	无。 */T_INLINE T_VOID AT91PIODisable(tpAT91_PIO tpPio,                                    T_UWORD uwFlag){        tpPio->PIO_PDR = uwFlag;}/** * @brief *	  将电源控制器(PMC)提供给EMAC的外设时钟使能。 * @param[in]    无。 * @return	无。 */T_INLINE T_VOID AT91EMACCfgPMC (T_VOID){	AT91PMCEnablePeriphClock(pAT91C_BASE_PMC,((T_UWORD) 1 << AT91C_ID_EMAC));}/** * @brief *	  给EMAC分配引脚,将I/O线分配给EMAC。 * @param[in]    无。 * @return	无。 */T_INLINE T_VOID AT91EMACCfgPIO (T_VOID){	AT91PIOCfgPeriph(pAT91C_BASE_PIOA,	                    ((T_UWORD) AT91C_PA14_ERXER) |						((T_UWORD) AT91C_PA12_ERX0) |						((T_UWORD) AT91C_PA13_ERX1) |						((T_UWORD) AT91C_PA8_ETXEN) |						((T_UWORD) AT91C_PA16_EMDIO) |						((T_UWORD) AT91C_PA9_ETX0) |						((T_UWORD) AT91C_PA10_ETX1) |						((T_UWORD) AT91C_PA11_ECRS_ECRSDV) |						((T_UWORD) AT91C_PA15_EMDC) |						((T_UWORD) AT91C_PA7_ETXCK_EREFCK),						0);}#ifdef __cplusplus}#endif  /* __cplusplus */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -