bool startLwip(LWIP_IF* const lwipIfPort) { const unsigned int ifNum = DEFAULT_INST_NUM; bool ret; /*Initialization of low level device*/ cpswInit(); /*Initialization of the PHY and getting of MAC Address.*/ phyInit(lwipIfPort); /*Set ISR for the device*/ interruptSetup(); printk("Acquiring IP Address... \n\r" ); /*Set up lwipIfPort properly for the desired mode*/ startLwipIf(lwipIfPort); /*Start Lwip stack with the desired address*/ ret = lwIPInit(lwipIfPort, ifNum); if(ret) { IpAddrDisplay(&cpswNetIF[ifNum].ip_addr); } else /*Failed lwipinit, Print a message and reset the board*/ { ipFailed(); } return ret; }
/* ------------------------------------------------------------------------------------------------------ * lwIP_init() * * Description : main function. * * Argument(s) : none. * */ void lwIP_init(void) { // struct ip_addr stIpAddr, stNetMsk, stGatWay; /*load local net parameter*/ // lwIPLocalMACGet(MACAddress); /*use dhcp mode*/ lwIPInit(MACAddress, 0, 0, 0, IPADDR_USE_DHCP); g_bNetStatus = NETS_INIT; }
//***************************************************************************** // // Initialize the Ethernet client // // This function initializes all the Ethernet components to not configured. // This tells the SysTick interrupt which timer modules to call. // // \return None. // //***************************************************************************** void EthClientInit(tEventFunction pfnEvent) { uint32_t ui32User0, ui32User1; // // Initialize all the Ethernet components to not configured. This tells // the SysTick interrupt which timer modules to call. // HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DHCP_EN) = 0; HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 0; HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_TCP_EN) = 0; g_sEnet.eState = iEthNoConnection; g_sEnet.pfnEvent = pfnEvent; // // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC // address needed to program the hardware registers, then program the MAC // address into the Ethernet Controller registers. // FlashUserGet(&ui32User0, &ui32User1); g_sEnet.pui8MACAddr[0] = ((ui32User0 >> 0) & 0xff); g_sEnet.pui8MACAddr[1] = ((ui32User0 >> 8) & 0xff); g_sEnet.pui8MACAddr[2] = ((ui32User0 >> 16) & 0xff); g_sEnet.pui8MACAddr[3] = ((ui32User1 >> 0) & 0xff); g_sEnet.pui8MACAddr[4] = ((ui32User1 >> 8) & 0xff); g_sEnet.pui8MACAddr[5] = ((ui32User1 >> 16) & 0xff); lwIPInit(g_ui32SysClock, g_sEnet.pui8MACAddr, 0, 0, 0, IPADDR_USE_DHCP); // // Start lwIP tick interrupt. // HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DHCP_EN) = 1; }
/* ** The main function */ int main(void) { unsigned int ipAddr; LWIP_IF lwipIfPort1, lwipIfPort2; MMUConfigAndEnable(); #ifdef LWIP_CACHE_ENABLED CacheEnable(CACHE_ALL); #endif CPSWPinMuxSetup(); CPSWClkEnable(); /* Initialize console for communication with the Host Machine */ ConsoleUtilsInit(); /* Select the console type based on compile time check */ ConsoleUtilsSetType(CONSOLE_UART); /* Chip configuration RGMII selection */ EVMPortMIIModeSelect(); /* Get the MAC address */ EVMMACAddrGet(0, lwipIfPort1.macArray); EVMMACAddrGet(1, lwipIfPort2.macArray); AintcCPSWIntrSetUp(); //DelayTimerSetup(); ConsoleUtilsPrintf("\n\rStarterWare Ethernet Echo Application. \n\r\n\r" ); ConsoleUtilsPrintf("Acquiring IP Address for Port 1... \n\r" ); #if STATIC_IP_ADDRESS_PORT1 lwipIfPort1.instNum = 0; lwipIfPort1.slvPortNum = 1; lwipIfPort1.ipAddr = STATIC_IP_ADDRESS_PORT1; lwipIfPort1.netMask = 0; lwipIfPort1.gwAddr = 0; lwipIfPort1.ipMode = IPADDR_USE_STATIC; ipAddr = lwIPInit(&lwipIfPort1); #else lwipIfPort1.instNum = 0; lwipIfPort1.slvPortNum = 1; lwipIfPort1.ipAddr = 0; lwipIfPort1.netMask = 0; lwipIfPort1.gwAddr = 0; lwipIfPort1.ipMode = IPADDR_USE_DHCP; ipAddr = lwIPInit(&lwipIfPort1); #endif if(ipAddr) { ConsoleUtilsPrintf("\n\r\n\rPort 1 IP Address Assigned: "); IpAddrDisplay(ipAddr); } else { ConsoleUtilsPrintf("\n\r\n\rPort 1 IP Address Acquisition Failed."); } /* Initialize the sample httpd server. */ echo_init(); /* Loop forever. All the work is done in interrupt handlers. */ while(1) { ; /* Perform nothing */ } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { unsigned char pucMACArray[8]; uint32_t temp; /* Chip revision alignment and errata fixes */ CHIP_Init(); /* Ensure core frequency has been updated */ SystemCoreClockUpdate(); CMU_ClockEnable(cmuClock_ADC0, true); /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(SystemCoreClock / 1000)) while (1) ; /* Setup ADC for sampling internal temperature sensor. */ setupSensor(); /* Spi init*/ spiInit(); #if LWIP_DHCP /* Initialze the lwIP library, using DHCP.*/ lwIPInit(pucMACArray, 0, 0, 0, IPADDR_USE_DHCP); #else /* Initialze the lwIP library, using Static IP.*/ lwIPInit(pucMACArray, IPADDR(192, 168, 79, 160), IPADDR(255, 255, 255, 0), \ IPADDR(192, 168, 79, 1), IPADDR_USE_STATIC); #endif /* Initialize a sample httpd server.*/ httpd_init(); /* Start one ADC sample */ ADC_Start(ADC0, adcStartSingle); /* Enable board control interrupts */ gpioSetup(); axspi_write_reg(~IMR_RXPKT, P0_IMR); /* Start LCD without boost */ SegmentLCD_Init(false); CMU_ClockEnable(cmuClock_RTC, true); /* RTC configuration structure */ RTC_Init_TypeDef rtcInit = { .enable = false, .debugRun = false, .comp0Top = true }; /* Initialize RTC */ RTC_Init(&rtcInit); /* Set COMP0 value which will be the top value as well */ RTC_CompareSet(RTC_COMP, RTC_COMP_VALUE); /* Clear all pending interrupts */ RTC_IntClear(0x7); /* Enable COMP0 interrupts */ RTC_IntEnable(0x2); /* Enable interrupts */ NVIC_ClearPendingIRQ(RTC_IRQn); NVIC_EnableIRQ(RTC_IRQn); RTC_Enable(true); while (1) { /* check temperature flag*/ if (read_temperature) { temp = ADC_DataSingleGet(ADC0); /* Show Celsius on numeric part of display */ temperature = (int)(convertToCelsius(temp)); /* Start a new conversion */ ADC_Start(ADC0, adcStartSingle); /* Reset temperature flag */ read_temperature = 0; } if (updateIpFlag) { switch (ip_field) { case 1: { SegmentLCD_Write(IP_ADDR_FIRST_TEXT); SegmentLCD_Number(IP_ADDR_FIRST_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 2: { SegmentLCD_Write(IP_ADDR_SECOND_TEXT); SegmentLCD_Number(IP_ADDR_SECOND_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 3: { SegmentLCD_Write(IP_ADDR_THIRD_TEXT); SegmentLCD_Number(IP_ADDR_THIRD_NUM(lwip_netif.ip_addr.addr)); ip_field++; } break; case 4: { SegmentLCD_Write(IP_ADDR_FOURTH_TEXT); SegmentLCD_Number(IP_ADDR_FOURTH_NUM(lwip_netif.ip_addr.addr)); ip_field = 1; } break; default: break; } updateIpFlag = false; } } }