[LM3S8962 EVM] 웹서버 테스트
LM3S8962는 Cortex-M3코어에 Ehternet MAC + Phy가 포함되어 있는 MCU로 상당히 간단하게 임베디드 이더넷을 구현할 수 있다.
무료 TCP/IP protocol stack 인 lwIP를 이용해서 임베디드 웹서버 테스트를 진행 했다.
간단한 스텍임에도 속도 빠르고 여러가 다양한 프로토콜을 지원하고 있다.
먼저 luminary micro에서 포팅해서 third party로 제공하는 lwip-1.3.0폴더를 복사하고 패스를 잡아 준다.
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.0\src\include\
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.0\src\include\ipv4\
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.0\apps\httpserver_raw
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.0\ports\stellaris\include
웹페이지를 제작하고 롬파일 시스템을 제작하면 된다. 롬파일 시스템은 여러 툴이 있지만 makefsfile를 이용하면 쉽게 제작 할 수 있다.
LM3S8962 WebServer 테스트 동영상
예제 소스코드
LM3S8962 이더넷 관련 초기화
// LM3S8962 이더넷 Controller 초기화 및 리셋
SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
// Ethernet LED 초기화
// LED0 Bit 3 Output
// LED1 Bit 2 Output
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
// Enable processor interrupts.
IntMasterEnable();
MAC어드레스는 임의로 할당했다. lwIPInit() 함수로 설정 가능하다. IP는 IP공유기를 이용하므로 DHCP에서 자동으로 할당받도록 했다. 예전의 DHCP프로토콜은 공유기에 따라 고려해야 할 사항이 많았었는데... 요즘에는 상다히 간단히 처리 가능하다.
pMACArray[0] = 1;
pMACArray[1] = 2;
pMACArray[2] = 3;
pMACArray[3] = 4;
pMACArray[4] = 5;
pMACArray[5] = 6;
// MAC초기화 및 DHCP 사용 설정
lwIPInit(pucMACArray, 0, 0, 0, IPADDR_USE_DHCP);
LM3S8962 웹서버 초기화
// Initialize a sample httpd server.
httpd_init();
// Pass our tag information to the HTTP server.
http_set_ssi_handler(SSIHandler, g_pcConfigSSITags, NUM_CONFIG_SSI_TAGS);
// Pass our CGI handlers to the HTTP server.
http_set_cgi_handlers(g_psConfigCGIURIs, NUM_CONFIG_CGI_URIS);
// Initialize IO controls
io_init();
main 소스코드
/*
- LM3S8962 Webserver Test
*/
#include "system.h"
#include "serial.h"
#include "ether_io.h"
int main()
{
SystemInit();
Led1Init();
Led1Off();
Led2Init();
Led2Off();
//Serial Init
DebugInit(BAUD_115200);
DebugPrint("LM3S8962 Ethernet Test Program.\r\n");
EtherNetInit();
DebugPrint("Ethernet I/O Init\r\n");
while(1)
{
ProcessWebServer();
}
}