[TI]/LM3S89622011. 11. 14. 15:15

LM3S8962 ADC 테스트

LM3S8962 ADC 테스트


Sample rate of 500 thousand samples/second

Converter uses an internal 3-V reference



LM3S8962 ADC블록도





LM3S8962 ADC초기화 함수

//ADC Initialize

void AdcInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);      //ADC enable   


//ADCProcessorTrigger()에서 ADC 시작. 프로세서 트리거가 일어날때 작동한다.   

ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);   

//ADC0의 sequence를 구성한다.sequence number 0인 ADC를 single ended mode로 setting   

ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH0);   

//ADC를 사용 가능하게 해준다.   

ADCSequenceEnable(ADC_BASE, 0);  

}



LM3S8962 ADC Read 함수

//Read ADC Value

unsigned int AdcRead(unsigned char port)

{

unsigned long cnt;

unsigned long adc_result = 0;

ADCProcessorTrigger(ADC_BASE, 0);   


//sample sequence 가 완료될때 까지 대기한다.   

while(!ADCIntStatus(ADC_BASE, 0, false)){}  

ADCSequenceDataGet(ADC_BASE, port, &adc_result);


return adc_result;

}





LM3S8962 ADC Test 예제 소스코드


//-----------------------------------------------------------------------------

int main(void)

{

    unsigned long adc_result;

//시스템 초기화

SystemInit();

//LED포트 초기화

Led1Init();

Led1On();


DebugInit(BAUD_115200);

DebugPrint("LM3S8962 EVM ADC Test Program.\r\n");

//ADC 초기화

AdcInit();

while(1)

{

adc_result = AdcRead(0);

                DebugPrint("%ld\r\n", adc_result);

Delay(100);

}

}

//-----------------------------------------------------------------------------









LM3S8962 Internal Temperature Sensor

SENSO = 2.7 - ((T + 55) / 75)

Posted by nexp

댓글을 달아 주세요

[TI]/LM3S89622011. 9. 1. 19:49

[LM3S8962 EVM] SPI테스트 - 3축 가속도센서 테스트

[LM3S8962 EVM] SPI테스트 - 3축 가속도센서 테스트




가속도 센서 테스트 드라이버
myMCU-EXP 보드의 가속도 센서(LIS3LV02)는 SPI0, CS(J18->16) ->RD3에 연결되어 있으므로 아래와 같이 드라이버 코드를 작성할 수 있다.
//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

#define ACCEL_CS_BIT     BIT3
#define ACCEL_CS_PORT     PORTD

#define ACCEL_CS_INIT()     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);\
          GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, ACCEL_CS_BIT);\
          GPIOPadConfigSet(GPIO_PORTD_BASE, ACCEL_CS_BIT, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
          
#define ACCEL_CS_ASSERT()    Cbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_CS_DEASSERT()    Sbi(ACCEL_CS_PORT, ACCEL_CS_BIT)

#define ACCEL_SPI_INIT()    SPI0_Init()
#define ACCEL_Read      SPI0_WriteReadByte
#define ACCEL_Write      SPI0_WriteReadByte
//-----------------------------------------------------------------------------


LM3S8962 SPI데이터 송수신 드라이버 함수 작성
unsigned char SPI0_WriteReadByte(unsigned char Data)
{
 unsigned long rcv_data;
    SSIDataPut(SSI0_BASE,Data);
 SSIDataGet(SSI0_BASE, &rcv_data);
 return rcv_data;
}



[LM3S8962 EVM] SPI 테스트 소스 코드
#include "system.h"
#include "serial.h"
#include "myAccel.h"

int main()
{
 short data;
 
 SystemInit();

 Led1Init();
 Led1On();

 U0_Init(BAUD_115200);
 DebugPrint("CANTUS SPI - Accel LIS3LV02 Test\r\n");

 //가속도 센서 초기화
 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xC7);
 
 while(1)
 {
  if(U0_IsGetByte())
  {
   switch(U0_GetByte())
   {
    case '0':
     DebugPrint("Led1 Off\r\n");
     Led1Off();
     break;

    case '1':
     DebugPrint("Led1 On\r\n");     
     Led1On();
    break;
    
    case 'i':
     myAccel3lvWrite(CTRL_REG1, 0xC7);  //1000.0111 Power on, enable all axis, self test off
     DebugPrint("Accel Init\r\n");
     break;   

    case 'r':
     data = myAccel3lvRead(WHO_AM_I);

     DebugPrint("Who am I? 0x%02X\r\n", data);  
     break; 
     
    case 'x':
     GetAccelValue(AXIS_X, &data);

     DebugPrint("%d\r\n", data);  
     break; 
   }
  }
Posted by nexp

댓글을 달아 주세요

[TI]/LM3S89622011. 9. 1. 11:31

[LM3S8962 EVM] 이더넷 포팅 하기 정리

[LM3S8962 EVM] 이더넷 포팅 하기 정리

먼저 lwip스택을 사용하기 위해 TI에서 제공하는 third_party, utils 폴더를 drv폴더에 복사 한다.


util/lwiplib.c 를 프로젝트에 삽입한다.
컴파일 하면 아래 링크가 없다고 나온다.
#include "lwip/opt.h"

패스 설정에서 아래와 같이 잡아 주면 된다.
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\src\include\

또 아래 링크도 없다고 나오는데...
#include "lwipopts.h"

TI예제 폴더에 보면 정의되어 있으므로 현재 프로젝트 루트로 복사 한다.

이후 아래 링크 에러가 발생하며 각각 패스를 잡아 주면 된다.
#include "arch/cc.h"
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\ports\stellaris\include\

#include "lwip/ip.h"
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\src\include\ipv4

결론적으로 아래 패스를 잡아 주면 된다.
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\src\include\
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\ports\stellaris\include\
$PROJ_DIR$\..\01_drv\third_party\lwip-1.3.2\src\include\ipv4


\01_drv\driverlib\rom_map.h
파일을 최신으로 업데이트 해야 에러가 발생하지 않는다.


startup_ewarm.c

    lwIPEthernetIntHandler,                      // Ethernet





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 ]

[TI]/LM3S89622010. 5. 23. 17:07

[LM3S8962 EVM] COM26T2844 TFT LCD 테스트

[LM3S8962 EVM] COM26T2844 TFT LCD 테스트



[LCD-EXP EVM]
보드를 이용하여 COM26T2844 TFT LCD테스트 진행을 했다. LM3S8962는 MAC, Phy가 포함되어 있으므로 추후 이더넷을 이용하여 TFT LCD제어에 사용할 예정이다.

LCD-EXP보드의 핀맵



LM3S8962 보드 핀맵



핀맵 정의
//LM3S8962 EVM TFT LCD Pin Map defination
#define LCD_EN_BIT      BIT1
#define LCD_EN_PORT      PORTG
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      BIT6
#define LCD_RST_PORT     PORTC
#define LCD_RST_ON()     Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT7
#define LCD_RS_PORT      PORTC
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

define LCD_WR_BIT      BIT7
#define LCD_WR_PORT      PORTA
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      //BIT6
#define LCD_RD_PORT      //PORTA
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT0
#define LCD_BL_PORT      PORTF
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)


LM3S8962 TFT LCD(COM26T2844 ) 테스트 동영상


Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.06.23 14:44 [ ADDR : EDIT/ DEL : REPLY ]
  2. 박현일

    전자재품 특허등록받은 사람입니다 제품을 만들려고 하는데 모듈에 관하여 상담좀 하고 싶습니다 연락좀 부탁 드리겠습니다 010-8239-3737

    2010.06.23 14:45 [ ADDR : EDIT/ DEL : REPLY ]