请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LC4357 主题中讨论的其他器件:HALCOGEN、 DP83640
你(们)好
HalCoGen 生成的文件 source/hL_phy_dp83640.c (所有版本都包含最新的4.6.0)包含此代码
uint32 Dp83640IDGet (uint32 mdioBaseAddr、uint32 phyAddr) { uint32 id = 0U; uint16 data = 0U; /*读取 ID1寄存器*/ (void) MDIOPhyRegRead (mdioBaseAddr、phyAddr、(uint32) PHY_ID1、&data); /*更新 ID1值*/ id =(uint32) data; id =(uint32)(((uint32) id << phy_ID_shift); /*读取 ID2寄存器*/ (void) MDIOPhyRegRead (mdioBaseAddr、phyAddr、(uint32) PHY_ID2、&data); /*更新 ID2值*/ ID |=数据; /*以 ID1:ID2格式返回 ID */ 返回 ID; }
此代码对芯片复位时的竞态条件很敏感。 当芯片复位未完成时、第一个 MDIOPhyRegRead 可能会失败。 之后可以立即完成芯片复位。 在这种情况下、第二 个 MDIOPhyRegRead 没有失败。 函数返回无效的 PHY_ID。