mbed NXP LPC1768+RTOS+KEIL+HTTP CGI (управление мк через WEB)
.
MDK ARM 4.14 & RL-ARM 4.12
main.c
#include "LPC17xx.h" #include "RTL.h" #include "stdio.h" #include "string.h" #include "Net_Config.h" #define EVT_RTC_SEC 0x0100 #define EVT_LIFE_LED 0x0101 unsigned long long tcp_stack[1024/8]; const unsigned long led_mask[] = { 1UL<<23, 1UL<<21, 1UL<<20, 1UL<< 18 }; char LED1stat = 0; char LED2stat = 0; char LED3stat = 0; LPC_UART_TypeDef *pUart; typedef struct { uint32_t RTC_Sec; /* Second value - [0,59] */ uint32_t RTC_Min; /* Minute value - [0,59] */ uint32_t RTC_Hour; /* Hour value - [0,23] */ uint32_t RTC_Mday; /* Day of the month value - [1,31] */ uint32_t RTC_Mon; /* Month value - [1,12] */ uint32_t RTC_Year; /* Year value - [0,4095] */ uint32_t RTC_Wday; /* Day of week value - [0,6] */ uint32_t RTC_Yday; /* Day of year value - [1,365] */ } RTCTime; RTCTime CurrentTime = {0,1,1,1,1,2011}; OS_TID t_DEBUG_PRINT; OS_TID t_RTC_TIME; OS_TID t_LIFE_LED; OS_TID t_TIMER_HTTP; OS_TID t_HTTP; void RTCSetTime( RTCTime Time ) { LPC_RTC->SEC = Time.RTC_Sec; LPC_RTC->MIN = Time.RTC_Min; LPC_RTC->HOUR = Time.RTC_Hour; LPC_RTC->DOM = Time.RTC_Mday; LPC_RTC->DOW = Time.RTC_Wday; LPC_RTC->DOY = Time.RTC_Yday; LPC_RTC->MONTH = Time.RTC_Mon; LPC_RTC->YEAR = Time.RTC_Year; } RTCTime RTCGetTime( void ) { RTCTime LocalTime; LocalTime.RTC_Sec = LPC_RTC->SEC; LocalTime.RTC_Min = LPC_RTC->MIN; LocalTime.RTC_Hour = LPC_RTC->HOUR; LocalTime.RTC_Mday = LPC_RTC->DOM; LocalTime.RTC_Wday = LPC_RTC->DOW; LocalTime.RTC_Yday = LPC_RTC->DOY; LocalTime.RTC_Mon = LPC_RTC->MONTH; LocalTime.RTC_Year = LPC_RTC->YEAR; return ( LocalTime ); } void RTC_IRQHandler (void) { LPC_RTC->ILR |= 0x01; isr_evt_set (EVT_RTC_SEC, t_RTC_TIME); } void DeviceInit (void) { LPC_GPIO1->FIODIR = (1<<23) | (1<<21) | (1<<20) | (1<<18); LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 (Com0) */ LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 (Com0) */ pUart = (LPC_UART_TypeDef *)LPC_UART0; pUart->LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ pUart->DLL = 9; /* 115200 Baud Rate @ 24.0 MHZ PCLK */ pUart->FDR = 0x21; /* FR 1,51, DIVADDVAL = 1, MULVAL = 2 */ pUart->DLM = 0; /* High divisor latch = 0 */ pUart->LCR = 0x03; /* DLAB = 0 */ LPC_SC->PCONP |= (1 << 9); if ( LPC_RTC->RTC_AUX & (0x1<<4) ) { LPC_RTC->RTC_AUX |= (0x1<<4); } LPC_RTC->AMR = 0; LPC_RTC->CIIR = 1; LPC_RTC->CCR = 0x10; RTCSetTime(CurrentTime); LPC_RTC->CCR |= 0x01; NVIC_EnableIRQ(RTC_IRQn) ; } int SER_putChar (int uart, U8 c) { LPC_UART_TypeDef *pUart; pUart = (uart == 0) ? (LPC_UART_TypeDef *)LPC_UART0 : (LPC_UART_TypeDef *)LPC_UART1; while (!(pUart->LSR & 0x20)); return (pUart->THR = c); } void SER_putString (int uart, U8 *s) { while (*s != 0) { SER_putChar(uart, *s++); } } void LEDon (unsigned int num) { LPC_GPIO1->FIOPIN |= led_mask[num]; if (num == 1) { LED1stat = 1; } if (num == 2) { LED2stat = 1; } if (num == 3) { LED3stat = 1; } } void LEDoff (unsigned int num) { LPC_GPIO1->FIOPIN &= ~led_mask[num]; if (num == 1) { LED1stat = 0; } if (num == 2) { LED2stat = 0; } if (num == 3) { LED3stat = 0; } } U16 cgi_func (U8 *env, U8 *buf, U16 buflen, U32 *pcgi) { U32 len = 0; switch (env [0]) { case 'a': { if (LED1stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FF0000"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#00FF00"); } } break; case 'b': { if (LED1stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "0"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "1"); } } break; case 'c': { if (LED2stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FF0000"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#00FF00"); } } break; case 'd': { if (LED2stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "0"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "1"); } } break; case 'e': { if (LED3stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FF0000"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#00FF00"); } } break; case 'f': { if (LED3stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "0"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "1"); } } break; case 'g': { if (LED1stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FFFFFF"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#0066FF"); } } break; case 'h': { if (LED2stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FFFFFF"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#0066FF"); } } break; case 'j': { if (LED3stat ==0) { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#FFFFFF"); } else { len = sprintf ((S8 *) buf, (const S8 *) &env [2], "#0066FF"); } } break; } return ((U16) len); } void cgi_process_data (U8 code, U8 *dat, U16 len) { unsigned char text1 [16]; unsigned char text2 [16]; unsigned char text3 [16]; U8 *var; var = (U8 *) alloc_mem (40); do { dat = http_get_var (dat, var, 40); SER_putString (0, var); if (var [0] != 0 ) { if (str_scomp (var, "textbox1=1") == __TRUE) { LEDon (1); } if (str_scomp (var, "textbox1=0") == __TRUE) { LEDoff (1); } if (str_scomp (var, "textbox2=1") == __TRUE) { LEDon (2); } if (str_scomp (var, "textbox2=0") == __TRUE) { LEDoff (2); } if (str_scomp (var, "textbox3=1") == __TRUE) { LEDon (3); } if (str_scomp (var, "textbox3=0") == __TRUE) { LEDoff (3); } } } while (dat); free_mem ((OS_FRAME *)var); } __task void f_LIFE_LED (void) { char i = 1; while (1) { os_evt_wait_or (EVT_LIFE_LED, 0xffff); if (i) { LEDon(0); i=!i; } else { LEDoff(0); i=!i; } } } __task void f_RTC_TIME (void) { while (1) { os_evt_wait_or (EVT_RTC_SEC, 0xffff); os_evt_set (EVT_LIFE_LED, t_LIFE_LED); } } __task void f_TIMER_HTTP (void) { os_itv_set (10); while (1) { timer_tick (); os_itv_wait (); } } __task void f_HTTP (void) { while (1) { main_TcpNet(); os_tsk_pass(); } } __task void f_DEBUG_PRINT (void) { while (1) { os_dly_wait (100); } } __task void init (void) { os_tsk_prio_self (100); SystemInit (); DeviceInit (); init_TcpNet (); SER_putString (0, "\n\nRTOS Starting ... \n\n"); t_DEBUG_PRINT = os_tsk_create (f_DEBUG_PRINT, 3); SER_putString (0, "DEBUG_PRINT started\n"); t_RTC_TIME = os_tsk_create (f_RTC_TIME, 50); SER_putString (0, "RTC_TIME started\n"); t_LIFE_LED = os_tsk_create (f_LIFE_LED, 2); SER_putString (0, "LIFE_LED started\n"); t_TIMER_HTTP = os_tsk_create (f_TIMER_HTTP, 99); SER_putString (0, "TIMER_HTTP started\n"); t_HTTP = os_tsk_create_user (f_HTTP, 1, &tcp_stack, sizeof(tcp_stack)); SER_putString (0, "HTTP started\n"); SER_putString (0, "\n\nOK!\n\n"); os_tsk_delete_self (); } int main (void) { os_sys_init(init); }
web.inp
index.htm, leds.cgi, mbedMicrocontroller.gif, pinout.gif to Web.c nopr root(Web)
index.htm
<HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <meta http-equiv="Content-Language" content="ru"> <title>mkWEB Server - Main</title> </head> <body style="text-align: center"> <table border="1" width="100%" id="table1" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"> <div align="center"> <img border="0" src="mbedMicrocontroller.gif" width="172" height="149"><table border="1" width="800" id="table2" style="border-width: 0px"> <tr> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> Ãëàâíàÿ</td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> <span lang="en-us"><a href="leds.cgi"> <span style="text-decoration: none"><font color="#000000">LEDs</font></span></a></span></td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> </tr> </table> </div> </td> </tr> </table> <table border="1" width="100%" id="table3" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"> <p align="center"> <img border="0" src="pinout.gif" width="610" height="383"></td> </tr> </table> </body> </HTML>
leds.cgi
t <HTML> t <head> t <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> t <meta http-equiv="Content-Language" content="ru"> t <title>mkWEB Server - LEDs</title> t </head> t <body style="text-align: center"> t <table border="1" width="100%" id="table3" style="border-width: 0px"> t <tr> t <td style="border-style: none; border-width: medium"> t <div align="center"> t <img border="0" src="mbedMicrocontroller.gif" width="172" height="149"> t <table border="1" width="800" id="table4" style="border-width: 0px"> t <tr> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> t <a href="index.htm"><span style="text-decoration: none"> t <font color="#000000">Ãëàâíàÿ</font></span></a></td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> t <span lang="en-us"><font color="#000000"> t <span style="text-decoration: none">LEDs</span></font></span></td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00"> </td> t </tr> t </table> t </div> t </td> t </tr> t </table> t <table border="1" width="100%" id="table7" style="border-width: 0px"> t <tr> t <td style="border-style: none; border-width: medium"> t <p align="center"> t <img border="0" src="pinout.gif" width="610" height="383"></p> t <div align="center"> t <table border="0" width="140" id="table8" style="border-width: 0px" cellspacing="3" cellpadding="0"> t <tr> c g <td style="border-style: none; border-width: medium" bgcolor="%s"> </td> c h <td style="border-style: none; border-width: medium" bgcolor="%s"> </td> c j <td style="border-style: none; border-width: medium" bgcolor="%s"> </td> t <td style="border-style: none; border-width: medium"> </td> t </tr> t </table> t </div> t <p align="center"> </td> t </tr> t </table> t <table border="1" width="100%" id="table5" style="border-width: 0px"> t <tr> t <td style="border-style: none; border-width: medium"> t <div align="center"><a name="leds"></a> t <table border="1" width="800" id="table6" style="border-width: 0px"> t <tr> t <td align="center" width="260" style="border-style: none; c a border-width: medium" bgcolor="%s"> c b <p align="center"><span lang="en-us">LED #1 = %s</span></p> t <p align="center"> t <FORM ACTION="leds.cgi#leds" METHOD="POST" NAME="CGI"> t <TABLE> t <TR> t <TD> c b <INPUT TYPE="TEXT" id="textbox1" name="textbox1" SIZE="16" VALUE="%s"></TD> t <TD ALIGN="right"> t <INPUT TYPE="SUBMIT" id="change1" name="change1" VALUE="SET 1/0"></TD> t </TR> t </TABLE> t </FORM> t </p></td> t <td align="center" width="260" style="border-style: none; c c border-width: medium" bgcolor="%s"> c d <p align="center"><span lang="en-us">LED #2 = %s</span></p> t <p align="center"> t <FORM ACTION="leds.cgi#leds" METHOD="POST" NAME="CGI"> t <TABLE> t <TR> t <TD> c d <INPUT TYPE="TEXT" id="textbox2" name="textbox2" SIZE="16" VALUE="%s"></TD> t <TD ALIGN="right"> t <INPUT TYPE="SUBMIT" id="change2" name="change2" VALUE="SET 1/0"></TD> t </TR> t </TABLE> t </FORM> t </p></td> t </td> t <td align="center" width="260" style="border-style: none; c e border-width: medium" bgcolor="%s"> c f <p align="center"><span lang="en-us">LED #3 = %s</span></p> t <p align="center"> t <FORM ACTION="leds.cgi#leds" METHOD="POST" NAME="CGI"> t <TABLE> t <TR> t <TD> c f <INPUT TYPE="TEXT" id="textbox3" name="textbox3" SIZE="16" VALUE="%s"></TD> t <TD ALIGN="right"> t <INPUT TYPE="SUBMIT" id="change3" name="change3" VALUE="SET 1/0"></TD> t </TR> t </TABLE> t </FORM> t </p></td> t </td> t </tr> t </table> t </div> t </td> t </tr> t </table> t </body> t </HTML> .
4 comments on mbed NXP LPC1768+RTOS+KEIL+HTTP CGI (управление мк через WEB) :
Please log in to post comments.
This does not compile in my uVision4 compiler from Keil or on the mbed online compiler. Just lots of errors.....