00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 #include "board.h"
00109
00110 #include "uip.h"
00111 #include "uip_arp.h"
00112 #include "gmac_tapdev.h"
00113 #include "timer.h"
00114
00115
00116
00117
00118
00119 #define TWCK 400000
00120
00121 #define AT24MAC_SERIAL_NUM_ADD 0x5F
00122
00123 #define PAGE_SIZE 16
00124
00125 #define EEPROM_PAGES 16
00126
00127 #define BOARD_PINS_TWI_EEPROM PINS_TWI0
00128
00129 #define BOARD_ID_TWI_EEPROM ID_TWIHS0
00130
00131 #define BOARD_BASE_TWI_EEPROM TWIHS0
00132
00133
00134 #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
00135
00136
00137 static Twid twid;
00138
00139
00140 static const Pin twiPins[] = BOARD_PINS_TWI_EEPROM;
00141
00142 static struct uip_eth_addr GMacAddress = {{0x3a, 0x1f, 0x34, 0x08, 0x54, 0x54}};
00143
00144
00145 static uint8_t HostIpAddress[4] = {192, 168, 1, 3 };
00146
00147
00148 static const uint8_t RoutIpAddress[4] = {192, 168, 1, 2 };
00149
00150 static const uint8_t NetMask[4] = {255, 255, 255, 0};
00151
00152
00153
00154
00155
00156
00157
00158
00159 static void _app_init(void)
00160 {
00161 printf("P: hello-world application init\n\r");
00162 hello_world_init();
00163
00164 #ifdef __DHCPC_H__
00165 printf("P: DHCPC Init\n\r");
00166 dhcpc_init(MacAddress.addr, 6);
00167 #endif
00168 }
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 void uip_log(char *m)
00179 {
00180 TRACE_INFO("-uIP log- %s\n\r", m);
00181 }
00182
00183 #ifdef __DHCPC_H__
00184
00185
00186
00187
00188
00189 void dhcpc_configured(const struct dhcpc_state *s)
00190 {
00191 u8_t *pAddr;
00192
00193 printf("\n\r");
00194 printf("=== DHCP Configurations ===\n\r");
00195 pAddr = (u8_t *)s->ipaddr;
00196 printf("- IP : %d.%d.%d.%d\n\r",
00197 pAddr[0], pAddr[1], pAddr[2], pAddr[3]);
00198 pAddr = (u8_t *)s->netmask;
00199 printf("- Mask : %d.%d.%d.%d\n\r",
00200 pAddr[0], pAddr[1], pAddr[2], pAddr[3]);
00201 pAddr = (u8_t *)s->default_router;
00202 printf("- GW : %d.%d.%d.%d\n\r",
00203 pAddr[0], pAddr[1], pAddr[2], pAddr[3]);
00204 pAddr = (u8_t *)s->dnsaddr;
00205 printf("- DNS : %d.%d.%d.%d\n\r",
00206 pAddr[0], pAddr[1], pAddr[2], pAddr[3]);
00207 printf("===========================\n\r\n");
00208 uip_sethostaddr(s->ipaddr);
00209 uip_setnetmask(s->netmask);
00210 uip_setdraddr(s->default_router);
00211
00212 #ifdef __RESOLV_H__
00213 resolv_conf(s->dnsaddr);
00214 #else
00215 printf("DNS NOT enabled in the demo\n\r");
00216 #endif
00217 }
00218 #endif
00219
00220
00221
00222
00223
00224
00225 int main(void)
00226 {
00227 uip_ipaddr_t ipaddr;
00228 struct timer periodic_timer, arp_timer;
00229 uint32_t i;
00230 struct uip_eth_addr OrigiGMacAddr;
00231
00232
00233 WDT_Disable(WDT);
00234
00235 SCB_EnableICache();
00236 SCB_EnableDCache();
00237
00238 printf("-- GMAC uIP Hello World Example %s --\n\r", SOFTPACK_VERSION);
00239 printf("-- %s\n\r", BOARD_NAME);
00240 printf("-- Compiled: %s %s With %s--\n\r", __DATE__, __TIME__ ,
00241 COMPILER_NAME);
00242
00243
00244
00245 TimeTick_Configure();
00246
00247
00248 PIO_Configure(twiPins, PIO_LISTSIZE(twiPins));
00249
00250 PMC_EnablePeripheral(BOARD_ID_TWI_EEPROM);
00251 TWI_ConfigureMaster(BOARD_BASE_TWI_EEPROM, TWCK, BOARD_MCK);
00252 TWID_Initialize(&twid, BOARD_BASE_TWI_EEPROM);
00253
00254
00255 TWID_Read(&twid, AT24MAC_SERIAL_NUM_ADD, 0x9A, 1, OrigiGMacAddr.addr, PAGE_SIZE,
00256 0);
00257
00258 if ((OrigiGMacAddr.addr[0] == 0xFC) && (OrigiGMacAddr.addr[1] == 0xC2)
00259 && (OrigiGMacAddr.addr[2] == 0x3D)) {
00260 for (i = 0; i < 6; i++)
00261 GMacAddress.addr[i] = OrigiGMacAddr.addr[i];
00262 }
00263
00264 printf("-- MAC %x:%x:%x:%x:%x:%x\n\r",
00265 GMacAddress.addr[0], GMacAddress.addr[1], GMacAddress.addr[2],
00266 GMacAddress.addr[3], GMacAddress.addr[4], GMacAddress.addr[5]);
00267
00268 #ifndef __DHCPC_H__
00269 printf(" - Host IP %d.%d.%d.%d\n\r",
00270 HostIpAddress[0], HostIpAddress[1], HostIpAddress[2], HostIpAddress[3]);
00271 printf(" - Router IP %d.%d.%d.%d\n\r",
00272 RoutIpAddress[0], RoutIpAddress[1], RoutIpAddress[2], RoutIpAddress[3]);
00273 printf(" - Net Mask %d.%d.%d.%d\n\r",
00274 NetMask[0], NetMask[1], NetMask[2], NetMask[3]);
00275 #endif
00276
00277
00278 gmac_tapdev_setmac((uint8_t *)GMacAddress.addr);
00279 gmac_tapdev_init();
00280 clock_init();
00281 timer_set(&periodic_timer, CLOCK_SECOND / 2);
00282 timer_set(&arp_timer, CLOCK_SECOND * 10);
00283
00284
00285 uip_init();
00286
00287 #ifdef __DHCPC_H__
00288 printf("P: DHCP Supported\n\r");
00289 uip_ipaddr(ipaddr, 0, 0, 0, 0);
00290 uip_sethostaddr(ipaddr);
00291 uip_ipaddr(ipaddr, 0, 0, 0, 0);
00292 uip_setdraddr(ipaddr);
00293 uip_ipaddr(ipaddr, 0, 0, 0, 0);
00294 uip_setnetmask(ipaddr);
00295 #else
00296
00297 uip_ipaddr(ipaddr, HostIpAddress[0], HostIpAddress[1],
00298 HostIpAddress[2], HostIpAddress[3]);
00299 uip_sethostaddr(ipaddr);
00300
00301 uip_ipaddr(ipaddr, RoutIpAddress[0], RoutIpAddress[1],
00302 RoutIpAddress[2], RoutIpAddress[3]);
00303 uip_setdraddr(ipaddr);
00304
00305 uip_ipaddr(ipaddr, NetMask[0], NetMask[1], NetMask[2], NetMask[3]);
00306 uip_setnetmask(ipaddr);
00307 #endif
00308 uip_setethaddr(GMacAddress);
00309
00310 _app_init();
00311
00312 while (1) {
00313 uip_len = gmac_tapdev_read();
00314
00315 if (uip_len > 0) {
00316 if (BUF->type == htons(UIP_ETHTYPE_IP)) {
00317 uip_arp_ipin();
00318 uip_input();
00319
00320
00321
00322
00323 if (uip_len > 0) {
00324 uip_arp_out();
00325 gmac_tapdev_send();
00326 }
00327 } else if (BUF->type == htons(UIP_ETHTYPE_ARP)) {
00328
00329 uip_arp_arpin();
00330
00331
00332
00333
00334 if (uip_len > 0)
00335 gmac_tapdev_send();
00336 }
00337 } else if (timer_expired(&periodic_timer)) {
00338 timer_reset(&periodic_timer);
00339
00340 for (i = 0; i < UIP_CONNS; i++) {
00341 uip_periodic(i);
00342
00343
00344
00345
00346 if (uip_len > 0) {
00347
00348 uip_arp_out();
00349 gmac_tapdev_send();
00350 }
00351 }
00352
00353 #if UIP_UDP
00354
00355 for (i = 0; i < UIP_UDP_CONNS; i++) {
00356 uip_udp_periodic(i);
00357
00358
00359
00360
00361 if (uip_len > 0) {
00362 uip_arp_out();
00363 gmac_tapdev_send();
00364 }
00365 }
00366
00367 #endif
00368
00369
00370 if (timer_expired(&arp_timer)) {
00371 timer_reset(&arp_timer);
00372 uip_arp_timer();
00373 }
00374 }
00375 }
00376 }
00377