static void low_level_init(struct netif *netif) { // struct ethernetif *ethernetif = netif->state; unsigned portBASE_TYPE uxPriority; /* maximum transfer unit */ netif->mtu = netifMTU; /* broadcast capability */ netif->flags = NETIF_FLAG_BROADCAST; /* Do whatever else is needed to initialize interface. */ xNetIf = netif; /* Initialise the MACB. This routine contains code that polls status bits. If the Ethernet cable is not plugged in then this can take a considerable time. To prevent this starving lower priority tasks of processing time we lower our priority prior to the call, then raise it back again once the initialisation is complete. */ uxPriority = uxTaskPriorityGet( NULL ); vTaskPrioritySet( NULL, tskIDLE_PRIORITY ); while( xMACBInit(&AVR32_MACB) == FALSE ) { __asm__ __volatile__ ( "nop" ); } vTaskPrioritySet( NULL, uxPriority ); /* Create the task that handles the MACB. */ // xTaskCreate( ethernetif_input, ( signed portCHAR * ) "ETH_INT", netifINTERFACE_TASK_STACK_SIZE, NULL, netifINTERFACE_TASK_PRIORITY, NULL ); sys_thread_new( ethernetif_input, NULL, netifINTERFACE_TASK_PRIORITY ); }
/** * In this function, the hardware should be initialized. * Called from ethernetif_init(). * * @param netif the already initialized lwip network interface structure * for this ethernetif */ static void low_level_init(struct netif *netif) { #ifdef FREERTOS_USED unsigned portBASE_TYPE uxPriority; #endif /* set MAC hardware address length */ netif->hwaddr_len = ETHARP_HWADDR_LEN; /* set MAC hardware address */ netif->hwaddr[0] = cMACAddress[0]; netif->hwaddr[1] = cMACAddress[1]; netif->hwaddr[2] = cMACAddress[2]; netif->hwaddr[3] = cMACAddress[3]; netif->hwaddr[4] = cMACAddress[4]; netif->hwaddr[5] = cMACAddress[5]; /* maximum transfer unit */ netif->mtu = 1500; /* device capabilities */ /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP #if defined(DHCP_USED) | NETIF_FLAG_DHCP #endif ; /* Do whatever else is needed to initialize interface. */ /* Initialise the MACB. */ #ifdef FREERTOS_USED // NOTE: This routine contains code that polls status bits. If the Ethernet // cable is not plugged in then this can take a considerable time. To prevent // this from starving lower priority tasks of processing time we lower our // priority prior to the call, then raise it back again once the initialization // is complete. // Read the priority of the current task. uxPriority = uxTaskPriorityGet( NULL ); // Set the priority of the current task to the lowest possible. vTaskPrioritySet( NULL, tskIDLE_PRIORITY ); #endif // Init the MACB interface. while( xMACBInit(&AVR32_MACB) == false ) { __asm__ __volatile__ ( "nop" ); } #ifdef FREERTOS_USED // Restore the priority of the current task. vTaskPrioritySet( NULL, uxPriority ); /* Create the task that handles the MACB input packets. */ sys_thread_new( "ETHINT", ethernetif_input, netif, netifINTERFACE_TASK_STACK_SIZE, netifINTERFACE_TASK_PRIORITY ); #endif }