LM3S8962 ADC 테스트

[TI]/LM3S8962 | 2011.11.14 15:15
Posted by nexp

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)

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





[LM3S8962 EVM] 웹서버 테스트

[TI]/LM3S8962 | 2010.05.23 19:54
Posted by nexp
[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();
 }
}

[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 ) 테스트 동영상


[LM3S8962 EVM] 확장보드 제어 관련자료

확장 보드 <-> LM3S8962  핀맵
myMCU-EXP  LM3S8962 EVM
 

 

LED1 -> PWM2 -> PE0
SWITCH1 -> INT0 -> PC4
BUZZER ->PWM3 -> PG1


LM3S8962 EVM ->확장보드 : LED, Buzzer, Switch 회로도





/-----------------------------------------------------------------------------
//Switch Driver
#define SW1_BIT       BIT0
#define SW1_PORT      GPIO_PORTG_DATA_R
#define Sw1Init()      SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);\
          GPIOPinTypeGPIOInput(GPIO_PORTG_BASE, SW1_BIT)

#define GetSw1()      !(SW1_PORT&SW1_BIT)
#define WaitForSw1()     while(GetSw1())

//-----------------------------------------------------------------------------
//Buzzer Driver
#define BUZZER_BIT      BIT1
#define BUZZER_PORT      GPIO_PORTG_DATA_R
#define BUZZER_OFF()     Sbi(BUZZER_PORT, BUZZER_BIT)
#define BUZZER_ON()      Cbi(BUZZER_PORT, BUZZER_BIT)
#define BUZZER_Init()     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);\
          GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE, BUZZER_BIT)



[LM3S8962 EVM] 보드제작 - LM3S8962 관련 자료


Luminary Micro Cortex-M3 LM3S8962 EVM 보드를 제작 했다. [M-Type EVM] 표준으로 제작해 기존 보드와 호환이 되도록 했다.
LM3S8962는 50Mhz Cortex-M3 코어에 Ethernet MAC, Phy를 포함하고 256k Flash, 64k Ram으로 이더넷 제어용으로 상당히 편리하다.






LM3S8962 확장 테스트 보드





LM3S8962 테스트 동영상



LM3S8962 TFT LCD테스트



LM3S8962 회로도




on board LED - PE0/PWM4, PE1/PWM5


on Board Swtich - PG0, UART




[iRadio-8962] LM3S8962 인터넷 라디오 모듈 제작



LM3S8962 를 이용하여 인터넷 라디오 모듈을 제작 했다. LM3S8962의 기본적인 테스트를 해 볼 수 있도록 범용성을 두면서 각종 모듈을을 연결하면 인터넷 라디오로도 사용할 수 있도록 제작해 보았다.



VS1033 MP3모듈을 연결하여 MP3출력, SD카드 테스트를 해 볼 수 있다.



LCD를 두어 이더넷 웹서버나 웹기반제어에서 디버깅 용도로 가능하다.



FTF LCD를 연결하여 출력 가능하다









LM3S8962 JTAG커넥터

myCortex-LM8962 관련자료

[TI]/LM3S8962 | 2009.11.24 18:41
Posted by nexp

LM3S8962 회로도








LM3S8962 JTAG Error - TRST핀 처리

[TI]/LM3S8962 | 2009.02.20 18:21
Posted by nexp
LM3S8962 JTAG Error - TRST핀 처리

LM3S862에서 JTAG-TRST핀은 반드시 연결해야 한다.
다른 시리즈에서는 문제가 없었는데 유독 8962만 문제가 있네...

리비전 문제 인가?
좀더 확인이 필요하다.

이것때문에 하루 정도 버린것 같다.
TRST핀의 상태에 따라 JTAG모드로 진입여부를 결정하는데... 기존에 사용한 Cortex-M3에서는 디폴트 값이 JTAG모드로 진입하게 되어 있었기 때문에 문제가 없었다. 문제는 TRST핀을 연결하지 않아도 디폴트로 동작하기는 하지만 흔들리기 때문에 동작하다 안하다 해서 문제가 된다. 

Luminary 제품에는 이런점이 마음에 안든다.
JTAG에서 GPIO호환문제를 해결하지 못하면 그냥 JTAG전용으로 만들지... 여기저기 GPIO 못쓰게 이게 몬지...

PC0~ PC3, PB7은 GPIO로 사용할때 조심해야 된다.

모든것이 다 그렇겠지만 특히나 하드웨어에서는 경험 해 보지 못한것에 대한 적당한 시간과 경험이 필요한거 같다.


블로그 이미지

nexp

카테고리

분류 전체보기 (1560)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (140)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (213)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (129)
[SENSOR] (41)
[DATA] (21)
[FPGA] (32)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)