|
硬件平台用的是LPC1778+DP83848,原理图附件
部分初始化程序如下:
/* Power Up the EMAC controller. */
LPC_SC->PCONP |= (0x1<<30);
LPC_IOCON->P1_0 &= ~0x07; /* ENET I/O config */
LPC_IOCON->P1_0 |= 0x01; /* ENET_TXD0 */
LPC_IOCON->P1_1 &= ~0x07;
LPC_IOCON->P1_1 |= 0x01; /* ENET_TXD1 */
LPC_IOCON->P1_4 &= ~0x07;
LPC_IOCON->P1_4 |= 0x01; /* ENET_TXEN */
LPC_IOCON->P1_8 &= ~0x07;
LPC_IOCON->P1_8 |= 0x01; /* ENET_CRS */
LPC_IOCON->P1_9 &= ~0x07;
LPC_IOCON->P1_9 |= 0x01; /* ENET_RXD0 */
LPC_IOCON->P1_10 &= ~0x07;
LPC_IOCON->P1_10 |= 0x01; /* ENET_RXD1 */
LPC_IOCON->P1_14 &= ~0x07;
LPC_IOCON->P1_14 |= 0x01; /* ENET_RX_ER */
LPC_IOCON->P1_15 &= ~0x07;
LPC_IOCON->P1_15 |= 0x01; /* ENET_REF_CLK */
LPC_IOCON->P2_8 &= ~0x07; /* ENET/PHY I/O config */
LPC_IOCON->P2_8 |= 0x04; /* ENET_MDC */
// LPC_IOCON->P1_16 &= ~0x07; /* ENET/PHY I/O config */
// LPC_IOCON->P1_16 |= 0x01; /* ENET_MDC */
LPC_IOCON->P1_17 &= ~0x07;
LPC_IOCON->P1_17 |= 0x01; /* ENET_MDIO */
// LPC_IOCON->LOC_ENET_MDIO = 0x01;
LPC_EMAC->MAC1 = 0xCF00;
LPC_EMAC->Command = 0x0038;
// Short delay
for (loop = 100; loop; loop--);
LPC_EMAC->MAC1 = 0x0;
LPC_EMAC->Command &= ~0x02;
LPC_EMAC->Command &= ~0x01;
LPC_EMAC->MAC1 &= ~0x01;
LPC_EMAC->MAC2 = 0x00; /* initialize MAC2 register to default value */
/* Non back to back inter-packet gap */
LPC_EMAC->IPGR = 0x0012; /* use the default value recommended in the users manual */
LPC_EMAC->CLRT = 0x370F; /* Use the default value in the users manual */
LPC_EMAC->MAXF = 0x0600; /* Use the default value in the users manual */
/* PHY Select RMII */
LPC_EMAC->MCFG |= 0x0018;
/* RMII configuration */
LPC_EMAC->Command = 0x0240;
/* (note bit 4 was set in original test, although spec says its unused) */
LPC_EMAC->SUPP = 0x0000;
for(i=1;i<32;i++)
{
phyid1 = Read_PHY(i , 2 );
if(phyid1 == 0x2000) {
break;
}
}
if(i >= 32) {
while(1);
}
但读出来的phyid总是为0xFFFF,应该是硬件的问题,不知道原理图是不是哪里有问题?请教下各位大神 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|