[DSP]/DSP283352011. 11. 4. 22:00

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용


[EXP-ALL EVM] 보드에는  FND모듈을 연결할 수 있고 아래와 같으 핀맵이다.
D0 - LATCH (GPIO79)
D2 - SCLK (GPSIO77)
D4 - DATA (GPIO75)







FND모듈 제어를 위한 드라이버 함수

#define D0_GPIO79    BIT15// 15     GPIO79
#define D2_GPIO77    BIT13// 13     GPIO77
#define D4_GPIO75    BIT11// 11     GPIO75

#define SHIFT_DATA_PORT   GPIOC
#define SHIFT_DATA_BIT   D4_GPIO75

#define SHIFT_CLK_PORT   GPIOC
#define SHIFT_CLK_BIT   D2_GPIO77

#define SHIFT_LATCH_PORT  GPIOC
#define SHIFT_LATCH_BIT   D0_GPIO79

#define ShiftDataSet()   sbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftDataClear()  cbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftClkSet()   sbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftClkClear()   cbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftLatchSet()   sbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);
#define ShiftLatchClear()  cbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);

#define SHIFT_HAL_INIT()  EALLOW;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO79 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO77 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO75 = 1;\
        EDIS;



TMS320F28335 FND출력 테스트 예제
#include "system.h"
#include "serial.h"
#include "shift.h"
#include "fnd_m.h"

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 QEP Test\r\n");

 FndInit();
 FndOut(10);

wihle(1)
{
}
}


[EXP-ALL EVM] 테스트 보드
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/WIZNET_EVM2010. 8. 22. 21:06

[W5100 EVM] 초간단 TCP서버 테스트

[W5100 EVM] 초간단 TCP서버 테스트


임베디드 시스템에서 이더넷을 통한 네트웍제어는 여러가지 솔루션이 있지만 특히 소형의 임베디드 환경에서는 상당한 부하를 차지한다. 임베디드 환경에서 좀더 쉽고 간단히 이더넷을 제어하기 위해 TCP/IP스택이 하드웨어적으로 처리되는 W5100을 이용하여 초간단 TCP서버를 구축해 보았다.

먼저 소형 [W5100 EVM] 모듈과 AVR128 보드, 확장 테스트보드(EXP-) 를 연결한다.


회로적으로 아래와 같이 연결된다.




소스코드
소스코드는 예전에 작성했던 코드를 좀더 간단하고 사용하기 편하도록 몇가지 수정을 했다.(좀더 자세한 내용은 [AVR TCP Server 테스트 예제 참고)


[config.h]
W5100의 SPI_CS핀은 PD5에 연결되어 있다.
//-----------------------------------------------------------------------------
// W5100 Driver
#define IINCHIP_SpiInit     SPI0_Init
#define IINCHIP_SpiSendData    SPI0_SendByte 
#define IINCHIP_SpiRecvData    SPI0_RxData

#define IINCHIP_CS_BIT     BIT5
#define IINCHIP_CS_DDR     DDRD
#define IINCHIP_CS_PORT     PORTD

#define IINCHIP_CSInit()    Sbi(IINCHIP_CS_DDR, IINCHIP_CS_BIT)
#define IINCHIP_CSon()     Sbi(IINCHIP_CS_PORT, IINCHIP_CS_BIT)
#define IINCHIP_CSoff()     Cbi(IINCHIP_CS_PORT, IINCHIP_CS_BIT)
//-----------------------------------------------------------------------------


[/01_drv/wiznet/mcu/types.h]
SPI모드 제어를 위한 설정
//#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_DIRECT_MODE__
//#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_INDIRECT_MODE__
#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_SPI_MODE__ /*Enable SPI_mode*/


네트웍 초기화
MAC Address는 고유하 번호를 할당받아야 하지만 테스트용으로 충돌 나지 않는 할당하면 된다.
보드의 IP역시 충돌나지 않는 값으로 설정하면되지만 공유기를 사용하는 경우 자동 할당번호 내의 값으로 설정해야 한다.
#define MY_NET_MAC   {0x00, 0x08, 0xdc, 0x00, 0x00, 0x00} // MY Mac Address : 00.08.DC.00.00.00

#define MY_NET_GWIP   {192,  168, 0,    1} //Gateway     : 192.168.0.1
#define MY_SOURCEIP   {192,  168, 0,  101} //보드 IP     : 192.168.0.101
#define MY_SUBNET   {255, 255, 255,   0}

#define MY_LISTEN_PORT  5000  //서버 포트 : 5000


TCP 서버 데이터 처리
ProcessTcpSever() 함수에서 TCP 시퀀스를 폴링으로 처리 한다.
소켓의 상태를 검사 하다 데이터가 수신되면 recv()함수로 수신된 바이트를 읽어오면 된다.
//TCP-Server 처리
void ProcessTcpSever(void)
{
 int len;       
 unsigned char data_buf[TX_RX_MAX_BUF_SIZE];
 unsigned int port = MY_LISTEN_PORT;
 
 switch (getSn_SR(SOCK_TCPS))
 {
 case SOCK_ESTABLISHED:
  //데이터 수신 검사
  if((len = getSn_RX_RSR(SOCK_TCPS)) > 0)    
  {
   //if Rx data size is lager than TX_RX_MAX_BUF_SIZE
   if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE; 
   
   //데이터 수신
   len = recv(SOCK_TCPS, data_buf, len);   
   
   // send the received data
   //send(SOCK_MYTEST, data_buf, len); 

   EthernetTest(data_buf, len);
  }  
  break;
  
 case SOCK_CLOSE_WAIT:                             
  //If the client request to close
  disconnect(SOCK_TCPS);
  
  m_SokStatus1 = 0;
  break;
  
 case SOCK_CLOSED:
  if(!m_SokStatus1)
  {
   m_SokStatus1 = 1;
  }
  
  //reinitialize the socket
  if(socket(SOCK_TCPS,Sn_MR_TCP, port,0x00) == 0)
  {
   DebugPrint("Fail to create socket.");
   m_SokStatus1 = 0;
  }
  else
  {
   listen(SOCK_TCPS);
  }
  break;
 }
}


TCP클라이언트로 데이터가 수신되면 처리 하는 함수로 테스트 예제로 이번 예제에서 첫번째 데이터로 LED를 제어하고 있다. ->이부분을 원하는 형태로 수정하면 된다.
//수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
 unsigned int i;

 DebugPrint("Read Data[%d]\r\n", len);
 
 for(i=0;i<len;i++)
 {
  //수신데이터 표시
  DebugPrint("%c ", pRcvBuffer[i]);
 }

 //데이터 처리 - LED제어
 if(pRcvBuffer[0] == '1')
 {
  Led1On();
 }
 else if(pRcvBuffer[0] == '0')
 {
  Led1Off();
 }
}



메인함수
//-----------------------------------------------------------------------------
int main(void)
{
 SystemInit();

 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("W5100 TCP Server Program\r\n");

 Led1Init();
 Led1On();

 //W5100 Chip Initialize
 //----------------------------
 InitWiznet();
 NetInit();
 //----------------------------

 //설정된 IP 표시
 DisplayConfig();

 while(1)
 {
  //TCP Server Process
  ProcessTcpSever();
 }
}
//-----------------------------------------------------------------------------


W5100 TCP 서버 테스트
실행파일


보드가 서버로 동작하기 때문에 PC프로그램은 Client로 접속에서 데이터 전송할 수 있다. 예제에서는보드 IP인 192.168.0.101로 접속 가능하다.



W5100 테스트 동영상
TCP서버로 동작하는 보드에 접속하여 데이터를 전송해 LED를 제어 하는 예제. '1'을 전송하면 LED On, '0'을 전송하면 LED Off.




Posted by nexp

댓글을 달아 주세요

[TI]/LM3S89622010. 5. 23. 19:54

[LM3S8962 EVM] 웹서버 테스트

[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();
 }
}

Posted by nexp

댓글을 달아 주세요

  1. ykryden

    항상 멋진 물건을 만들어 내시는 주인장님 대단하십니다^^

    저는 lm3s8962로 http프로토콜을 구현해서 웹서버 파싱을 해보고 싶은데

    혹시 한번 테스트해주실 수는 없으신지요...

    제가 내공이 워낙 딸린 관계로 맨땅에 헤딩하려니 죽겠습니다..ㅠㅠ

    2010.05.28 23:52 [ ADDR : EDIT/ DEL : REPLY ]
  2. STM32F103 + Ethernet(10/100) 개발보드를 구매하고 싶습니다. (sdkim365@gmail.com)

    2010.09.19 13:09 [ ADDR : EDIT/ DEL : REPLY ]
  3. 비밀댓글입니다

    2010.09.21 11:23 [ ADDR : EDIT/ DEL : REPLY ]
  4. 각이

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.06.19 23:39 [ ADDR : EDIT/ DEL : REPLY ]
  5. 승진

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.05.22 09:40 [ ADDR : EDIT/ DEL : REPLY ]