[MSP430]/MSP430-S2016.03.20 01:43

MSP430G2433 Timer interrupt 테스트

MSP430G2433 Timer interrupt 테스트


MSP430 시리즈는 종류가 많아서 시리즈마다 약간씩 설정 부분이 다른데... 기록해 둘 필요가 있는것 같다.

(개인적으로 TI는 통합해서 설정할 수 있도록 코드를 정리 해 줬으면 좋겠다. 출시 될때마다 조금씩 바껴서 불편한점이 많다.)



MSP430G 타이머 초기화 코드

#define enable()                            __bis_SR_register(GIE)


#define TIMER0_VALUE                        8000 //@ 8Mhz -> 1ms

#define Timer0Set(Value)     (CCR0  +=  Value)  


void InitTimer0(void)

{

    //타이머 초기화

    TACTL = TASSEL_2 + MC_2;                  // SMCLK, Contmode


    CCR0 = 8000;

    CCTL0 = CCIE;                  // CCR0 toggle, interrupt enabled    

}





MSP430G 타이머 인터럽트 핸들러

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

// Timer_A  -  Interrupt Handler

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

#pragma vector = TIMER0_A0_VECTOR

__interrupt void Timer_A0_ISR(void)

{

    //Led1Toggle();


    gTimeTick++;

    Timer0Set(TIMER0_VALUE);

}






Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430i2015.06.06 13:00

[MSP430i] MSP430I2040 EVM 보드 제작

[MSP430i] MSP430I2040 EVM 보드 제작







MSP430코어에 24bit ADC를 내장하고 저렴한 MSP430i 시리즈를 표준 핀맵인 s-Type 형태로 제작 했다. 산업용이며 저전력 에너지 미터링을 타깃으로 출시 되었는데.. 소형이라 여러가지 어플리케이션에 적용하기 좋을것 같다.

24bit ADC를 내장한 MCU 시리즈로 성능이 많이 개선되었다고 한다.  





표준 핀맵을 사용하여 기존 여러가지 인터페이스 보드에 연결해서 쉽게 테스트 할 수 있도록 제작 했다.




[MSP430i EVM] 회로도






Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2013.05.12 23:00

MSP430FR5739 EVM - FRAM 시리즈 보드제작

MSP430FR5739 EVM - FRAM 시리즈 보드제작

 

 

 

MSP430의 FRAM 시리즈중 MSP430FR5739 를 테스트 해 볼수 있는 보드를 SM-Type EVM 형태로 제작했다.

 

 

 

 

 

MSP430FR5739 예제 소스

MSP430FR57xxCode.zip

 

 

 

 

MSP430FR5739 EVM 핀맵 회로도

 

 

 

 

 

 

 

MSP430FR5739 확장 테스트 보드

SM-Type 형태의 표준 핀맵으로 제작했기 때문에 여러 확장 테스트 보드에서 사용가능하다. 

 

 

 

 

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2013.05.12 15:13

MSP430 FRAM Series 검토

 MSP430 FRAM Series 검토

 

 

MSP430은 저전력 MCU로 유명한데 FRAM 타입로 더욱더 낮은 전력소모를 하는 FR시리즈가 있어 눈길을 끈다. FRAM을 RAM처럼 사용할 수 있기 때문에 아주 빈번하게 데이터를 저장하거나 저전력이 필요한 로깅 시스템에 사용하면 좋을것 같다.

 

 

전력 소모

 일반 FLASH 보다 250배나 적은 전류를 소모 한다고 한다.

Test case CPU speed @ 8MHz
Both memory options capped @ 12kB/s throughput (typical application)
FRAM consumes 9μA @ 12kB/s
Flash consumes 2200μA @ 12kB/s

 

 

 

고속 엑세스

FLASH와 비교해 속도와 전류 소모가 적은것을 확인 할 수 있다.

Test case CPU speed @ 8MHz
Both memory options writing 512B memory blocks
FRAM max throughput = 1400kB/s @ 730μA
Flash max throughput = 12kB/s @ 2200μA

 

 

 

수명

빈번하게 데이터를 써서 데이터 로깅하는 시스템에서는 FLASH의 수명이 중요한데 FRAM의 경우 1조번까지 쓰기를 보증한다고 한다. 거의 무한대라고 보면 될것 같다.

 

Test case CPU speed @ 8MHz
Both memory options capped @ 12kB/s throughput (typical application)
FRAM will last for 6.6x10^10 seconds
Flash will last for 6.6 minutes

 

 

 

MSP430 FRAM 시리즈

4~16K Byte FRAM이 있고 1K Ram이 있는데... RAM이 조금 작은것이 아쉽다. (물론 FRAM을 RAM처럼 사용하면 된다.)

 

 

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_EVM2012.12.11 12:25

[MSP430] Falsh Write - EEPOM 처럼 사용하기

[MSP430] Falsh Write - EEPOM 처럼 사용하기

 

MSP430은 EEPROM이 없고 대신 Flash 영역에 데이터를 저장할 수 있다. 실행 중에 Flash 영역에  저장할 수 있기 때문에 변경 될수 있는 설정 파라미터를 저장하기에 좋을것 같다.

 

#define _SEG_C_ADDR                     0x1040

 


void falsh_wrte(unsigned char *pBuf, int Size)
{
  char *Flash_ptr;                          // Flash pointer
  unsigned int i;

  Flash_ptr = (char *)_SEG_C_ADDR;              // Initialize Flash pointer
  FCTL2 = FWKEY + FSSEL0 + FN1;             // MCLK/3 for Flash Timing Generator
    
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptr = 0;                           // Dummy write to erase Flash segment

  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  for (i=0; i<Size; i++)
  {
    *Flash_ptr++ = pBuf[i];                   // Write value to flash
  }

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}

 

void flash_read(unsigned char *pBuf, int Size)
{
  char *Flash_ptrC;                         // Segment C pointer
  unsigned int i;

  Flash_ptrC = (char *)_SEG_C_ADDR;             // Initialize Flash segment C pointer

  for (i=0; i<Size; i++)
  {
    pBuf[i] = *Flash_ptrC++;          // copy value segment C to segment D
  }

}

Posted by nexp

댓글을 달아 주세요