Столкнулся с проблемой:
от блока EMAC нужен только модуль MDIO (для загрузки LXT972).
настроил EMAC так:
Код
//запрещаем PIO использовать ножки в качестве обычных I/O
pPIOB->PIO_PDR = AT91C_PB8_EMDC | AT91C_PB9_EMDIO;
//назначаем ножкам свои функции
pPIOB->PIO_ASR = AT91C_PB8_EMDC | AT91C_PB9_EMDIO;
//включаем питание EMAC
*AT91C_PMC_PCER = ((unsigned long)1 << AT91C_ID_EMAC);
//разрешаем порт MDIO
pPHY->EMAC_NCR = AT91C_EMAC_MPE;
pPHY->EMAC_NCFGR = AT91C_EMAC_CLK_HCLK_8;
передача по MDIO работает, все что надо передает.
А вот прием никак не запускается
вот код в котором передаются данные:
Код
INT16U PhyReadData(INT8U reg_addr)
{
INT32U tmp;
AT91PS_EMAC pPHY = AT91C_BASE_EMAC;
tmp = (1 << 30) | (1 << 29) | (0 << 23) | (reg_addr << 18) |\
(2 << 16);
pPHY->EMAC_MAN = tmp;
while(!(*AT91C_EMAC_ISR & 0x01));
tmp = pPHY->EMAC_MAN;
return (INT16U)tmp;
}
может кто сталкивался - подскажите, что неправильно делаю?