These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Committer:
frank26080115
Date:
Sun Mar 20 05:38:56 2011 +0000
Revision:
0:bf7b9fba3924

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:bf7b9fba3924 1 #include <stdio.h>
frank26080115 0:bf7b9fba3924 2 #include <string.h>
frank26080115 0:bf7b9fba3924 3
frank26080115 0:bf7b9fba3924 4 #include "debug_frmwrk.h"
frank26080115 0:bf7b9fba3924 5 #include "clock-arch.h"
frank26080115 0:bf7b9fba3924 6 #include "timer.h"
frank26080115 0:bf7b9fba3924 7 #include "uip-conf.h"
frank26080115 0:bf7b9fba3924 8 #include "uipopt.h"
frank26080115 0:bf7b9fba3924 9 #include "uip_arp.h"
frank26080115 0:bf7b9fba3924 10 #include "uip.h"
frank26080115 0:bf7b9fba3924 11 #include "emac.h"
frank26080115 0:bf7b9fba3924 12 #include "lpc_types.h"
frank26080115 0:bf7b9fba3924 13 #include "lpc17xx_libcfg.h"
frank26080115 0:bf7b9fba3924 14 #include "lpc17xx_pinsel.h"
frank26080115 0:bf7b9fba3924 15 #include "lpc17xx_gpio.h"
frank26080115 0:bf7b9fba3924 16
frank26080115 0:bf7b9fba3924 17
frank26080115 0:bf7b9fba3924 18 #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
frank26080115 0:bf7b9fba3924 19
frank26080115 0:bf7b9fba3924 20 #define LED_PIN (1<<6)
frank26080115 0:bf7b9fba3924 21 #define LED2_MASK ((1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6))
frank26080115 0:bf7b9fba3924 22 #define LED1_MASK ((1<<28) | (1<<29) | (1<<31))
frank26080115 0:bf7b9fba3924 23
frank26080115 0:bf7b9fba3924 24
frank26080115 0:bf7b9fba3924 25 /* For debugging... */
frank26080115 0:bf7b9fba3924 26 #include <stdio.h>
frank26080115 0:bf7b9fba3924 27 #define DB _DBG((uint8_t *)_db)
frank26080115 0:bf7b9fba3924 28 char _db[64];
frank26080115 0:bf7b9fba3924 29
frank26080115 0:bf7b9fba3924 30 void LED_Init (void)
frank26080115 0:bf7b9fba3924 31 {
frank26080115 0:bf7b9fba3924 32 PINSEL_CFG_Type PinCfg;
frank26080115 0:bf7b9fba3924 33
frank26080115 0:bf7b9fba3924 34 uint8_t temp;
frank26080115 0:bf7b9fba3924 35
frank26080115 0:bf7b9fba3924 36 PinCfg.Funcnum = 0;
frank26080115 0:bf7b9fba3924 37 PinCfg.OpenDrain = 0;
frank26080115 0:bf7b9fba3924 38 PinCfg.Pinmode = 0;
frank26080115 0:bf7b9fba3924 39 PinCfg.Portnum = 2;
frank26080115 0:bf7b9fba3924 40 for (temp = 2; temp <= 6; temp++){
frank26080115 0:bf7b9fba3924 41 PinCfg.Pinnum = temp;
frank26080115 0:bf7b9fba3924 42 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 43 }
frank26080115 0:bf7b9fba3924 44
frank26080115 0:bf7b9fba3924 45 PinCfg.Funcnum = 0;
frank26080115 0:bf7b9fba3924 46 PinCfg.OpenDrain = 0;
frank26080115 0:bf7b9fba3924 47 PinCfg.Pinmode = 0;
frank26080115 0:bf7b9fba3924 48 PinCfg.Portnum = 1;
frank26080115 0:bf7b9fba3924 49 PinCfg.Pinnum = 28;
frank26080115 0:bf7b9fba3924 50 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 51 PinCfg.Pinnum = 29;
frank26080115 0:bf7b9fba3924 52 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 53 PinCfg.Pinnum = 31;
frank26080115 0:bf7b9fba3924 54 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 55
frank26080115 0:bf7b9fba3924 56 // Set direction to output
frank26080115 0:bf7b9fba3924 57 GPIO_SetDir(2, LED2_MASK, 1);
frank26080115 0:bf7b9fba3924 58 GPIO_SetDir(1, LED1_MASK, 1);
frank26080115 0:bf7b9fba3924 59
frank26080115 0:bf7b9fba3924 60 /* Turn off all LEDs */
frank26080115 0:bf7b9fba3924 61 GPIO_ClearValue(2, LED2_MASK);
frank26080115 0:bf7b9fba3924 62 GPIO_ClearValue(1, LED1_MASK);
frank26080115 0:bf7b9fba3924 63 }
frank26080115 0:bf7b9fba3924 64
frank26080115 0:bf7b9fba3924 65 /*************************************************************************
frank26080115 0:bf7b9fba3924 66 * Function Name: uip_log
frank26080115 0:bf7b9fba3924 67 * Parameters: none
frank26080115 0:bf7b9fba3924 68 *
frank26080115 0:bf7b9fba3924 69 * Return: none
frank26080115 0:bf7b9fba3924 70 *
frank26080115 0:bf7b9fba3924 71 * Description: Events logging
frank26080115 0:bf7b9fba3924 72 *
frank26080115 0:bf7b9fba3924 73 *************************************************************************/
frank26080115 0:bf7b9fba3924 74 void uip_log (char *m)
frank26080115 0:bf7b9fba3924 75 {
frank26080115 0:bf7b9fba3924 76 _DBG("uIP log message: ");
frank26080115 0:bf7b9fba3924 77 _DBG(m);
frank26080115 0:bf7b9fba3924 78 _DBG_("");
frank26080115 0:bf7b9fba3924 79 }
frank26080115 0:bf7b9fba3924 80
frank26080115 0:bf7b9fba3924 81 /*************************************************************************
frank26080115 0:bf7b9fba3924 82 * Function Name: main
frank26080115 0:bf7b9fba3924 83 * Parameters: none
frank26080115 0:bf7b9fba3924 84 *
frank26080115 0:bf7b9fba3924 85 * Return: none
frank26080115 0:bf7b9fba3924 86 *
frank26080115 0:bf7b9fba3924 87 * Description: main
frank26080115 0:bf7b9fba3924 88 *
frank26080115 0:bf7b9fba3924 89 *************************************************************************/
frank26080115 0:bf7b9fba3924 90 int c_entry(void)
frank26080115 0:bf7b9fba3924 91 {
frank26080115 0:bf7b9fba3924 92 UNS_32 i, delay;
frank26080115 0:bf7b9fba3924 93 uip_ipaddr_t ipaddr;
frank26080115 0:bf7b9fba3924 94 struct timer periodic_timer, arp_timer;
frank26080115 0:bf7b9fba3924 95
frank26080115 0:bf7b9fba3924 96 /* Initialize debug via UART0
frank26080115 0:bf7b9fba3924 97 * – 115200bps
frank26080115 0:bf7b9fba3924 98 * – 8 data bit
frank26080115 0:bf7b9fba3924 99 * – No parity
frank26080115 0:bf7b9fba3924 100 * – 1 stop bit
frank26080115 0:bf7b9fba3924 101 * – No flow control
frank26080115 0:bf7b9fba3924 102 */
frank26080115 0:bf7b9fba3924 103 debug_frmwrk_init();
frank26080115 0:bf7b9fba3924 104
frank26080115 0:bf7b9fba3924 105 _DBG_("Hello NXP Semiconductors");
frank26080115 0:bf7b9fba3924 106 _DBG_("uIP porting on LPC17xx");
frank26080115 0:bf7b9fba3924 107
frank26080115 0:bf7b9fba3924 108
frank26080115 0:bf7b9fba3924 109 // Initialize LED for system tick timer
frank26080115 0:bf7b9fba3924 110 LED_Init();
frank26080115 0:bf7b9fba3924 111
frank26080115 0:bf7b9fba3924 112 _DBG_("Init Clock");
frank26080115 0:bf7b9fba3924 113 // Sys timer init 1/100 sec tick
frank26080115 0:bf7b9fba3924 114 clock_init();
frank26080115 0:bf7b9fba3924 115
frank26080115 0:bf7b9fba3924 116 timer_set(&periodic_timer, CLOCK_SECOND / 2); /*0.5s */
frank26080115 0:bf7b9fba3924 117 timer_set(&arp_timer, CLOCK_SECOND * 10); /*10s */
frank26080115 0:bf7b9fba3924 118
frank26080115 0:bf7b9fba3924 119 _DBG_("Init EMAC");
frank26080115 0:bf7b9fba3924 120 // Initialize the ethernet device driver
frank26080115 0:bf7b9fba3924 121 while(!tapdev_init()){
frank26080115 0:bf7b9fba3924 122 // Delay for a while then continue initializing EMAC module
frank26080115 0:bf7b9fba3924 123 _DBG_("Error during initializing EMAC, restart after a while");
frank26080115 0:bf7b9fba3924 124 for (delay = 0x100000; delay; delay--);
frank26080115 0:bf7b9fba3924 125 }
frank26080115 0:bf7b9fba3924 126
frank26080115 0:bf7b9fba3924 127
frank26080115 0:bf7b9fba3924 128 #if 1
frank26080115 0:bf7b9fba3924 129
frank26080115 0:bf7b9fba3924 130 _DBG_("Init uIP");
frank26080115 0:bf7b9fba3924 131 // Initialize the uIP TCP/IP stack.
frank26080115 0:bf7b9fba3924 132 uip_init();
frank26080115 0:bf7b9fba3924 133
frank26080115 0:bf7b9fba3924 134 // init MAC address
frank26080115 0:bf7b9fba3924 135 uip_ethaddr.addr[0] = EMAC_ADDR0;
frank26080115 0:bf7b9fba3924 136 uip_ethaddr.addr[1] = EMAC_ADDR1;
frank26080115 0:bf7b9fba3924 137 uip_ethaddr.addr[2] = EMAC_ADDR2;
frank26080115 0:bf7b9fba3924 138 uip_ethaddr.addr[3] = EMAC_ADDR3;
frank26080115 0:bf7b9fba3924 139 uip_ethaddr.addr[4] = EMAC_ADDR4;
frank26080115 0:bf7b9fba3924 140 uip_ethaddr.addr[5] = EMAC_ADDR5;
frank26080115 0:bf7b9fba3924 141 uip_setethaddr(uip_ethaddr);
frank26080115 0:bf7b9fba3924 142
frank26080115 0:bf7b9fba3924 143
frank26080115 0:bf7b9fba3924 144 uip_ipaddr(ipaddr, 192,168,0,100);
frank26080115 0:bf7b9fba3924 145 sprintf(_db, "Set own IP address: %d.%d.%d.%d \n\r", \
frank26080115 0:bf7b9fba3924 146 ((uint8_t *)ipaddr)[0], ((uint8_t *)ipaddr)[1], \
frank26080115 0:bf7b9fba3924 147 ((uint8_t *)ipaddr)[2], ((uint8_t *)ipaddr)[3]);
frank26080115 0:bf7b9fba3924 148 DB;
frank26080115 0:bf7b9fba3924 149 uip_sethostaddr(ipaddr);
frank26080115 0:bf7b9fba3924 150
frank26080115 0:bf7b9fba3924 151 uip_ipaddr(ipaddr, 192,168,0,1);
frank26080115 0:bf7b9fba3924 152 sprintf(_db, "Set Router IP address: %d.%d.%d.%d \n\r", \
frank26080115 0:bf7b9fba3924 153 ((uint8_t *)ipaddr)[0], ((uint8_t *)ipaddr)[1], \
frank26080115 0:bf7b9fba3924 154 ((uint8_t *)ipaddr)[2], ((uint8_t *)ipaddr)[3]);
frank26080115 0:bf7b9fba3924 155 DB;
frank26080115 0:bf7b9fba3924 156 uip_setdraddr(ipaddr);
frank26080115 0:bf7b9fba3924 157
frank26080115 0:bf7b9fba3924 158 uip_ipaddr(ipaddr, 255,255,255,0);
frank26080115 0:bf7b9fba3924 159 sprintf(_db, "Set Subnet mask: %d.%d.%d.%d \n\r", \
frank26080115 0:bf7b9fba3924 160 ((uint8_t *)ipaddr)[0], ((uint8_t *)ipaddr)[1], \
frank26080115 0:bf7b9fba3924 161 ((uint8_t *)ipaddr)[2], ((uint8_t *)ipaddr)[3]);
frank26080115 0:bf7b9fba3924 162 DB;
frank26080115 0:bf7b9fba3924 163 uip_setnetmask(ipaddr);
frank26080115 0:bf7b9fba3924 164
frank26080115 0:bf7b9fba3924 165 // Initialize the HTTP server ----------------------------
frank26080115 0:bf7b9fba3924 166 _DBG_("Init HTTP");
frank26080115 0:bf7b9fba3924 167 httpd_init();
frank26080115 0:bf7b9fba3924 168 _DBG_("Init complete!");
frank26080115 0:bf7b9fba3924 169
frank26080115 0:bf7b9fba3924 170 while(1)
frank26080115 0:bf7b9fba3924 171 {
frank26080115 0:bf7b9fba3924 172 uip_len = tapdev_read(uip_buf);
frank26080115 0:bf7b9fba3924 173 if(uip_len > 0)
frank26080115 0:bf7b9fba3924 174 {
frank26080115 0:bf7b9fba3924 175 if(BUF->type == htons(UIP_ETHTYPE_IP))
frank26080115 0:bf7b9fba3924 176 {
frank26080115 0:bf7b9fba3924 177 uip_arp_ipin();
frank26080115 0:bf7b9fba3924 178 uip_input();
frank26080115 0:bf7b9fba3924 179 /* If the above function invocation resulted in data that
frank26080115 0:bf7b9fba3924 180 should be sent out on the network, the global variable
frank26080115 0:bf7b9fba3924 181 uip_len is set to a value > 0. */
frank26080115 0:bf7b9fba3924 182
frank26080115 0:bf7b9fba3924 183 if(uip_len > 0)
frank26080115 0:bf7b9fba3924 184 {
frank26080115 0:bf7b9fba3924 185 uip_arp_out();
frank26080115 0:bf7b9fba3924 186 tapdev_send(uip_buf,uip_len);
frank26080115 0:bf7b9fba3924 187 }
frank26080115 0:bf7b9fba3924 188 }
frank26080115 0:bf7b9fba3924 189 else if(BUF->type == htons(UIP_ETHTYPE_ARP))
frank26080115 0:bf7b9fba3924 190 {
frank26080115 0:bf7b9fba3924 191 uip_arp_arpin();
frank26080115 0:bf7b9fba3924 192 /* If the above function invocation resulted in data that
frank26080115 0:bf7b9fba3924 193 should be sent out on the network, the global variable
frank26080115 0:bf7b9fba3924 194 uip_len is set to a value > 0. */
frank26080115 0:bf7b9fba3924 195 if(uip_len > 0)
frank26080115 0:bf7b9fba3924 196 {
frank26080115 0:bf7b9fba3924 197 tapdev_send(uip_buf,uip_len);
frank26080115 0:bf7b9fba3924 198 }
frank26080115 0:bf7b9fba3924 199 }
frank26080115 0:bf7b9fba3924 200 }
frank26080115 0:bf7b9fba3924 201 else if(timer_expired(&periodic_timer))
frank26080115 0:bf7b9fba3924 202 {
frank26080115 0:bf7b9fba3924 203 timer_reset(&periodic_timer);
frank26080115 0:bf7b9fba3924 204 for(i = 0; i < UIP_CONNS; i++)
frank26080115 0:bf7b9fba3924 205 {
frank26080115 0:bf7b9fba3924 206 uip_periodic(i);
frank26080115 0:bf7b9fba3924 207 /* If the above function invocation resulted in data that
frank26080115 0:bf7b9fba3924 208 should be sent out on the network, the global variable
frank26080115 0:bf7b9fba3924 209 uip_len is set to a value > 0. */
frank26080115 0:bf7b9fba3924 210 if(uip_len > 0)
frank26080115 0:bf7b9fba3924 211 {
frank26080115 0:bf7b9fba3924 212 uip_arp_out();
frank26080115 0:bf7b9fba3924 213 tapdev_send(uip_buf,uip_len);
frank26080115 0:bf7b9fba3924 214 }
frank26080115 0:bf7b9fba3924 215 }
frank26080115 0:bf7b9fba3924 216 #if UIP_UDP
frank26080115 0:bf7b9fba3924 217 for(i = 0; i < UIP_UDP_CONNS; i++) {
frank26080115 0:bf7b9fba3924 218 uip_udp_periodic(i);
frank26080115 0:bf7b9fba3924 219 /* If the above function invocation resulted in data that
frank26080115 0:bf7b9fba3924 220 should be sent out on the network, the global variable
frank26080115 0:bf7b9fba3924 221 uip_len is set to a value > 0. */
frank26080115 0:bf7b9fba3924 222 if(uip_len > 0) {
frank26080115 0:bf7b9fba3924 223 uip_arp_out();
frank26080115 0:bf7b9fba3924 224 tapdev_send();
frank26080115 0:bf7b9fba3924 225 }
frank26080115 0:bf7b9fba3924 226 }
frank26080115 0:bf7b9fba3924 227 #endif /* UIP_UDP */
frank26080115 0:bf7b9fba3924 228 /* Call the ARP timer function every 10 seconds. */
frank26080115 0:bf7b9fba3924 229 if(timer_expired(&arp_timer))
frank26080115 0:bf7b9fba3924 230 {
frank26080115 0:bf7b9fba3924 231 timer_reset(&arp_timer);
frank26080115 0:bf7b9fba3924 232 uip_arp_timer();
frank26080115 0:bf7b9fba3924 233 }
frank26080115 0:bf7b9fba3924 234 }
frank26080115 0:bf7b9fba3924 235 }
frank26080115 0:bf7b9fba3924 236 #endif
frank26080115 0:bf7b9fba3924 237
frank26080115 0:bf7b9fba3924 238 while (1);
frank26080115 0:bf7b9fba3924 239 }
frank26080115 0:bf7b9fba3924 240
frank26080115 0:bf7b9fba3924 241 int main(void)
frank26080115 0:bf7b9fba3924 242 {
frank26080115 0:bf7b9fba3924 243 return c_entry();
frank26080115 0:bf7b9fba3924 244 }
frank26080115 0:bf7b9fba3924 245
frank26080115 0:bf7b9fba3924 246 #ifdef DEBUG
frank26080115 0:bf7b9fba3924 247 /*******************************************************************************
frank26080115 0:bf7b9fba3924 248 * @brief Reports the name of the source file and the source line number
frank26080115 0:bf7b9fba3924 249 * where the CHECK_PARAM error has occurred.
frank26080115 0:bf7b9fba3924 250 * @param[in] file Pointer to the source file name
frank26080115 0:bf7b9fba3924 251 * @param[in] line assert_param error line source number
frank26080115 0:bf7b9fba3924 252 * @return None
frank26080115 0:bf7b9fba3924 253 *******************************************************************************/
frank26080115 0:bf7b9fba3924 254 void check_failed(uint8_t *file, uint32_t line)
frank26080115 0:bf7b9fba3924 255 {
frank26080115 0:bf7b9fba3924 256 /* User can add his own implementation to report the file name and line number,
frank26080115 0:bf7b9fba3924 257 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
frank26080115 0:bf7b9fba3924 258
frank26080115 0:bf7b9fba3924 259 /* Infinite loop */
frank26080115 0:bf7b9fba3924 260 while(1);
frank26080115 0:bf7b9fba3924 261 }
frank26080115 0:bf7b9fba3924 262 #endif