This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Not Able to Init ARM LPC2378 for Ethernet

I am interfacing ARM Controller LPC2378 with DP83848C Ethernet Physical Layer Transceiver. I have downloaded a code for ethernet related to the above interface called -EasyWEB- from NXP. While compiling the program, it was not showing any error. But while running the program in my board it was Hanging. As soon as it reach -MAC_COMMAND- to execute the instruction in -Init_EMAC- function, the program Hangs over there:

void Init_EMAC(void)

{

/* Power Up the EMAC controller. */

PCONP = PCONP | 0x40000000;

/* Enable P1 Ethernet Pins. */

if ( MAC_MODULEID == OLD_EMAC_MODULE_ID )

PINSEL2 = 0x50151105; else

PINSEL2 = 0x50150105; PINSEL3 = ( PINSEL3 & ~0x0000000F ) | 0x00000005;

/* Reset all EMAC internal modules. */

MAC_MAC1 = MAC1_RES_TX|MAC1_RES_MCS_TX|MAC1_RES_RX| MAC1_RES_MCS_RX|MAC1_SIM_RES| MAC1_SOFT_RES;

MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES;

:

:

Since the code was hanging in -MAC_COMMAND, I modified the code. I brought the Command register before the Power Control (PCONP) register to Reset the Rx, Tx and RegReset bit. Then the program was working properly. I was able to write and read to/from DP83848C, I was able to get the correct PHY ID. But I was not able to Initialise Tx and Rx DMA Descriptors. While in the function -rx_descr_init- it gets hanged in the instruction -MAC_RXSTATUS-.

void Init_EMAC(void)

{

unsigned int regv, tout, id1, id2;

/* Enable Reduced MII interface. */

MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES;

for (tout = 100; tout; tout--); // A Short Delay

/* Power Up the EMAC controller. */

PCONP = PCONP | 0x40000000;

/* Enable P1 Ethernet Pins. */

if ( MAC_MODULEID == OLD_EMAC_MODULE_ID )

PINSEL2 = 0x50151105;

else

PINSEL2 = 0x50150105;

PINSEL3 = ( PINSEL3 & ~0x0000000F ) | 0x00000005;

: :

void rx_descr_init (void)

{

unsigned int i;

for (i = 0; i < NUM_RX_FRAG; i++)

{

RX_DESC_PACKET(i) = RX_BUF(i);

RX_DESC_CTRL(i)= RCTRL_INT | (ETH_FRAG_SIZE-1);

RX_STAT_INFO(i) = 0;

RX_STAT_HASHCRC(i) = 0;

}

/* Set EMAC Receive Descriptor Registers. */

MAC_RXDESCRIPTOR = RX_DESC_BASE;

MAC_RXSTATUS = RX_STAT_BASE;

: :

Can you please give me a solution for this, and please explain me why it gets hang in that places.

0