/** * In this function, the hardware should be initialized. * Called from ethernetif_init(). * * @param pxNetIf the already initialized lwip network interface structure * for this etherpxNetIf */ static void prvLowLevelInit( struct netif *pxNetIf ) { portBASE_TYPE xStatus; EMAC_CFG_Type Emac_Config; PINSEL_CFG_Type xPinConfig; /* set MAC hardware address length */ pxNetIf->hwaddr_len = ETHARP_HWADDR_LEN; /* set MAC hardware address */ pxNetIf->hwaddr[ 0 ] = configMAC_ADDR0; pxNetIf->hwaddr[ 1 ] = configMAC_ADDR1; pxNetIf->hwaddr[ 2 ] = configMAC_ADDR2; pxNetIf->hwaddr[ 3 ] = configMAC_ADDR3; pxNetIf->hwaddr[ 4 ] = configMAC_ADDR4; pxNetIf->hwaddr[ 5 ] = configMAC_ADDR5; /* device capabilities */ pxNetIf->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; /* maximum transfer unit */ pxNetIf->mtu = netifMAX_MTU; /* Broadcast capability */ pxNetIf->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; /* Enable Ethernet Pins */ boardCONFIGURE_ENET_PINS( xPinConfig ); Emac_Config.Mode = EMAC_MODE_AUTO; Emac_Config.pbEMAC_Addr = pxNetIf->hwaddr; xStatus = EMAC_Init( &Emac_Config ); if( xStatus != ERROR ) { /* Enable the interrupt and set its priority to the minimum interrupt priority. */ pxNetIfInUse = pxNetIf; NVIC_SetPriority( ENET_IRQn, configMAC_INTERRUPT_PRIORITY ); NVIC_EnableIRQ( ENET_IRQn ); } configASSERT( xStatus != ERROR ); }
portBASE_TYPE xNetworkInterfaceInitialise( void ) { EMAC_CFG_Type Emac_Config; PINSEL_CFG_Type xPinConfig; portBASE_TYPE xStatus, xReturn; extern uint8_t ucMACAddress[ 6 ]; /* Enable Ethernet Pins */ boardCONFIGURE_ENET_PINS( xPinConfig ); Emac_Config.Mode = EMAC_MODE_AUTO; Emac_Config.pbEMAC_Addr = ucMACAddress; xStatus = EMAC_Init( &Emac_Config ); LPC_EMAC->IntEnable &= ~( EMAC_INT_TX_DONE ); if( xStatus != ERROR ) { vSemaphoreCreateBinary( xEMACRxEventSemaphore ); configASSERT( xEMACRxEventSemaphore ); /* The handler task is created at the highest possible priority to ensure the interrupt handler can return directly to it. */ xTaskCreate( prvEMACHandlerTask, ( const signed char * const ) "EMAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL ); /* Enable the interrupt and set its priority to the minimum interrupt priority. */ NVIC_SetPriority( ENET_IRQn, configMAC_INTERRUPT_PRIORITY ); NVIC_EnableIRQ( ENET_IRQn ); xReturn = pdPASS; } else { xReturn = pdFAIL; } configASSERT( xStatus != ERROR ); return xReturn; }