mbed NXP LPC1768+RTOS+KEIL+HTTP CGI (управление мк через WEB)

/media/uploads/lexanet/sait1.jpg /media/uploads/lexanet/sait2.jpg /media/uploads/lexanet/sait3.jpg

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">&nbsp;</td>
					<td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
					<td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
					<td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
					<td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</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">&nbsp;</td>
t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</td>
t <td align="center" width="100" style="border-style: none; border-width: medium" bgcolor="#00FF00">&nbsp;</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">&nbsp;</td>
c h <td style="border-style: none; border-width: medium" bgcolor="%s">&nbsp;</td>
c j <td style="border-style: none; border-width: medium" bgcolor="%s">&nbsp;</td>
t <td style="border-style: none; border-width: medium">&nbsp;</td>
t </tr>
t </table>
t </div>
t <p align="center">&nbsp;</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) :

28 Apr 2011

This does not compile in my uVision4 compiler from Keil or on the mbed online compiler. Just lots of errors.....

30 Apr 2011

At you it is installed Real-Time Library? http://www.keil.com/rl-arm/

04 Jan 2012

idd lots of errors. Even with RTL installed. Can you prepare us a zip file of you build environment?

18 May 2012

Nice job, a zip file for the mbed online compiler would be very helpful !

Please log in to post comments.