| LPCOpen Platform v1.03 LPCOpen Platform for NXP LPC Microcontrollers

- Main Page
- Modules
- Data Structures
- Files
- Related Pages

- File List
- Globals

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
main.c
Go to the documentation of this file.
1 /*
2 * @brief IPerf Server example
3 *
4 * @note
5 * Copyright(C) NXP Semiconductors, 2012
6 * All rights reserved.
7 *
8 * @par
9 * Software that is described herein is for illustrative purposes only
10 * which provides customers with programming information regarding the
11 * LPC products. This software is supplied "AS IS" without any warranties of
12 * any kind, and NXP Semiconductors and its licensor disclaim any and
13 * all warranties, express or implied, including all implied warranties of
14 * merchantability, fitness for a particular purpose and non-infringement of
15 * intellectual property rights. NXP Semiconductors assumes no responsibility
16 * or liability for the use of the software, conveys no license or rights under any
17 * patent, copyright, mask work right, or any other intellectual property rights in
18 * or to any products. NXP Semiconductors reserves the right to make changes
19 * in the software without notification. NXP Semiconductors also makes no
20 * representation or warranty that such application will be suitable for the
21 * specified use without further testing or modification.
22 *
23 * @par
24 * Permission to use, copy, modify, and distribute this software and its
25 * documentation is hereby granted, under NXP Semiconductors' and its
26 * licensor's relevant copyrights in the software, without fee, provided that it
27 * is used in conjunction with NXP Semiconductors microcontrollers. This
28 * copyright, permission, and disclaimer notice must appear in all copies of
29 * this code.
30 */
31
32 #include "lwip/init.h"
33 #include "lwip/opt.h"
34 #include "lwip/sys.h"
35 #include "lwip/memp.h"
36 #include "lwip/tcpip.h"
37 #include "lwip/ip_addr.h"
38 #include "lwip/netif.h"
39 #include "lwip/timers.h"
40 #include "netif/etharp.h"
41
42 #if LWIP_DHCP
43 #include "lwip/dhcp.h"
44 #endif
45
46 #include "board.h"
47 #include "lpc_phy.h"
48 #include "arch\lpc17xx_40xx_emac.h"
49 #include "arch\lpc_arch.h"
50 #include "echo.h"
51
81 /*****************************************************************************
82 * Private types/enumerations/variables
83 ****************************************************************************/
84
85 /* NETIF data */
86 static struct netif lpc_netif;
87
88 /*****************************************************************************
89 * Public types/enumerations/variables
90 ****************************************************************************/
91
92 /*****************************************************************************
93 * Private functions
94 ****************************************************************************/
95
96 /* Sets up system hardware */
97 static void prvSetupHardware(void)
98 {
99 /* LED0 is used for the link status, on = PHY cable detected */
100 Board_Init();
101
102 /* Initial LED state is off to show an unconnected cable state */
103 Board_LED_Set(0, false);
104
105 /* Setup a 1mS sysTick for the primary time base */
106 SysTick_Enable(1);
107 }
108
109 /*****************************************************************************
110 * Public functions
111 ****************************************************************************/
112
117 int main(void)
118 {
119 uint32_t physts;
120 ip_addr_t ipaddr, netmask, gw;
121 static int prt_ip = 0;
122
123 prvSetupHardware();
124
125 /* Initialize LWIP */
126 lwip_init();
127
128 LWIP_DEBUGF(LWIP_DBG_ON, ("Starting LWIP TCP echo server...\n"));
129
130 /* Static IP assignment */
131 #if LWIP_DHCP
132 IP4_ADDR(&gw, 0, 0, 0, 0);
133 IP4_ADDR(&ipaddr, 0, 0, 0, 0);
134 IP4_ADDR(&netmask, 0, 0, 0, 0);
135 #else
136 IP4_ADDR(&gw, 10, 1, 10, 1);
137 IP4_ADDR(&ipaddr, 10, 1, 10, 234);
138 IP4_ADDR(&netmask, 255, 255, 255, 0);
139 // APP_PRINT_IP(&ipaddr);
140 #endif
141
142 /* Add netif interface for lpc17xx_8x */
143 netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init,
144 ethernet_input);
145 netif_set_default(&lpc_netif);
146 netif_set_up(&lpc_netif);
147
148 #if LWIP_DHCP
149 dhcp_start(&lpc_netif);
150 #endif
151
152 /* Initialize and start application */
153 echo_init();
154
155
156 iperf_server_init();
157
158 /* This could be done in the sysTick ISR, but may stay in IRQ context
159 too long, so do this stuff with a background loop. */
160 while (1) {
161 /* Handle packets as part of this loop, not in the IRQ handler */
162 lpc_enetif_input(&lpc_netif);
163
164 /* lpc_rx_queue will re-qeueu receive buffers. This normally occurs
165 automatically, but in systems were memory is constrained, pbufs
166 may not always be able to get allocated, so this function can be
167 optionally enabled to re-queue receive buffers. */
168 #if 0
169 while (lpc_rx_queue(&lpc_netif)) {}
170 #endif
171
172 /* Free TX buffers that are done sending */
173 lpc_tx_reclaim(&lpc_netif);
174
175 /* LWIP timers - ARP, DHCP, TCP, etc. */
176 sys_check_timeouts();
177
178 /* Call the PHY status update state machine once in a while
179 to keep the link status up-to-date */
180 physts = lpcPHYStsPoll();
181
182 /* Only check for connection state when the PHY status has changed */
183 if (physts & PHY_LINK_CHANGED) {
184 if (physts & PHY_LINK_CONNECTED) {
185 Board_LED_Set(0, true);
186 prt_ip = 0;
187
188 /* Set interface speed and duplex */
189 if (physts & PHY_LINK_SPEED100) {
190 Chip_ENET_Set100Mbps(LPC_ETHERNET);
191 NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 100000000);
192 }
193 else {
194 Chip_ENET_Set10Mbps(LPC_ETHERNET);
195 NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 10000000);
196 }
197 if (physts & PHY_LINK_FULLDUPLX) {
198 Chip_ENET_SetFullDuplex(LPC_ETHERNET);
199 }
200 else {
201 Chip_ENET_SetHalfDuplex(LPC_ETHERNET);
202 }
203
204 netif_set_link_up(&lpc_netif);
205 }
206 else {
207 Board_LED_Set(0, false);
208 netif_set_link_down(&lpc_netif);
209 }
210
211 DEBUGOUT("Link connect status: %d\r\n", ((physts & PHY_LINK_CONNECTED) != 0));
212 }
213
214 /* Print IP address info */
215 if (!prt_ip) {
216 if (lpc_netif.ip_addr.addr) {
217 static char tmp_buff[16];
218 DEBUGOUT("IP_ADDR : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.ip_addr, tmp_buff, 16));
219 DEBUGOUT("NET_MASK : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.netmask, tmp_buff, 16));
220 DEBUGOUT("GATEWAY_IP : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.gw, tmp_buff, 16));
221 prt_ip = 1;
222 }
223 }
224 }
225
226 /* Never returns, for warning only */
227 return 0;
228 }
229