我正在尝试将 Stellaris 项目移植到 Tivaware、并且我遇到了初始化 lwiplib 的问题。 我使用的是 Tivaware 2.1.4.178。
位于 TivaWare\driverlib 中的 EMAC.c 正在为以太网控制器使用不正确的存储器位置。 根据数据表、以太网控制器从0x400E.C000开始。 但是、EMAC.c 使用 SYSCLT_Periph_EPHY0 #define (位于 TivaWare\Driverlib\sysctl.h 中)。 SYSCTL_PERIPH_EPHY0定义为0xF000.3000
这是在 EMA c 中导致问题的函数
void EMACPHYConfigSet (uint32_t ui32Base、uint32_t ui32Config) { // //将以太网 PHY 配置写入外设配置 //寄存器。 // HWREG (ui32Base + EMAC_O_PC)= ui32Config; // //如果使用内部 PHY,请将其复位以确保新配置为 //锁定在此处。 // if (((ui32Config & EMAC_PHY_TYPE_MASK)== EMAC_PHY_TYPE_INTERNAL) { SysCtlPeripheralReset (SYSCTL_Periph_EPHY0); while (!SysCtlPeripheralReady (SYSCTL_Periph_EPHY0)) { // //等待 PHY 复位完成。 // } // //延迟一点以确保 PHY 复位已完成。 // SysCtlDelay (10000); } // //如果使用外部 RMII PHY,我们必须在以太网 MAC 中设置2个位 //时钟配置寄存器。 // if (((ui32Config & EMAC_PHY_TYPE_MASK)== EMAC_PHY_TYPE_EXTERNAL_RMII) { // //从 RMII PHY 选择和启用外部时钟。 // HWREG (EMAC0_BASE + EMAC_O_CC)|= EMAC_CC_CLKEN; } 其他 { // //禁用外部时钟。 // HWREG (EMAC0_BASE + EMAC_O_CC)&&~EMAC_CC_CLKEN; } // //重置 MAC,不管 PHY 连接是否更改。 // EMACReset (EMAC0_BASE); SysCtlDelay (1000); }
根据数据表、所有 SYSCTL_PERIPh #defines 都位于0xF000.XXXX 存储器区域中、应保留该区域。
我的代码正在"等待 PHY 复位完成"自旋等待循环中挂起。