static int lpc43_phyread(uint16_t phydevaddr, uint16_t phyregaddr, uint16_t *value)
{
volatile uint32_t timeout;
uint32_t regval;
regval = lpc43_getreg(LPC43_ETH_MACMIIA);
regval &= ETH_MACMIIA_CR_MASK;
regval |= (((uint32_t)phydevaddr << ETH_MACMIIA_PA_SHIFT) & ETH_MACMIIA_PA_MASK);
regval |= (((uint32_t)phyregaddr << ETH_MACMIIA_MR_SHIFT) & ETH_MACMIIA_MR_MASK);
regval |= ETH_MACMIIA_GB;
lpc43_putreg(regval, LPC43_ETH_MACMIIA);
for (timeout = 0; timeout < PHY_READ_TIMEOUT; timeout++)
{
if ((lpc43_getreg(LPC43_ETH_MACMIIA) & ETH_MACMIIA_GB) == 0)
{
*value = (uint16_t)lpc43_getreg(LPC43_ETH_MACMIID);
return OK;
}
}
} |