MSP430G2433 Timer interrupt 테스트

[MSP430]/MSP430-S | 2016.03.20 01:43
Posted by nexp

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);

}






[MSP430i] MSP430I2040 EVM 보드 제작

[MSP430]/MSP430i | 2015.06.06 13:00
Posted by nexp

[MSP430i] MSP430I2040 EVM 보드 제작







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

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





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




[MSP430i EVM] 회로도






MSP430FR5739 EVM - FRAM 시리즈 보드제작

 

 

 

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

 

 

 

 

 

MSP430FR5739 예제 소스

MSP430FR57xxCode.zip

 

 

 

 

MSP430FR5739 EVM 핀맵 회로도

 

 

 

 

 

 

 

MSP430FR5739 확장 테스트 보드

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

 

 

 

 

 

 

 

 

 

 

MSP430 FRAM Series 검토

[MSP430]/MSP430_FRAM | 2013.05.12 15:13
Posted by nexp

 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처럼 사용하면 된다.)

 

 

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

}

[MSP430AFE EVM] 24bit ADC테스트 - LCD에 ADC24 데이터 그래프 표시하기

 

 

MSP430AFE2xx 의 가장 큰 특징은 24bit ADC를 내장하고 저전력, 저가격의 MCU이다.

ADC특징을 보면 아래와 같다.

 

Features of the SD24_A include
-Up to three 24-bit second-order ΣΔ ADC
- Differential inputs o Simultaneous sampling
- Oversampling of up to 1024
- Integrated Programmable Gain amplifier of gains up to 32
- Integrated temperature and voltage sensor
- Integrated accurate 1.2V ADC reference with 18ppm/ ºC

 

 

MSP430AFE253은 DIFF 3채널의 24bit ADC가 있다.

 

 

 

 

MSP430AFE2xx ADC24블록도

 

 

 

 

MSP430 ADC24 출력 포멧

24bit ADC 이지만 출력레지스터 SD24MEMx는 16비트 레지스트 이고 24bit를 읽기 위해서는 SD24CCTLx의 SD24LSBACC비트를 설정해 주어야 한다.

SD24LSBACC = 0 -> 상위 16비트

SD24LSBACC = 1 -> 하위 16비트

 

 

 

MSP430 AFE ADC24 초기화

    SD24CTL = SD24REFON+SD24SSEL0;            // 1.2V ref, SMCLK
    SD24CCTL0 |= SD24IE + SD24DF;            // CH0, enable interrupt

 

    for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup

 

 

 

ADC 인터럽트 처리 코드

24bit로 데이터 받으면 값이 좀 이상하다.(아무래도 오버샘플링으로 비트수를 늘이는것 같은데, 이부분은 좀더 들여다 봐야 할것 같다.)

우선 상위 16비트만을 이용해 처리하도록 했다.

 #pragma vector=SD24_VECTOR
__interrupt void SD24AISR(void)
{
  switch (SD24IV)
  {
  case 2:                                   // SD24MEM Overflow
    break;

 

  case 4:                                   // SD24MEM0 IFG

      //하위 16비트 데이터
      Sbi(SD24CCTL0, SD24LSBACC);
      adc_value = SD24MEM0;

 

      //상위 16비트 데이터

      Cbi(SD24CCTL0, SD24LSBACC);
      //adc_value = (SD24MEM0<<16) | adc_value;

      adc_value = (SD24MEM0);
    break;


  case 6: 


    break;
  case 8:                                   // SD24MEM2 IFG
                       // Save CH2 results (clears IFG)
    break;
  }

   __bic_SR_register_on_exit(LPM0_bits);    // Exit LPM0
}

 

 

 

 

 

MSP430AEF ADC24 테스트 동영상

24bit ADC A0, A1에 연결되 VR값을 TFT LCD에 출력하는 예제를 테스트 했다.

 

 [MSP430AFE EVM] 24bit ADC MSP430 보드 제작

 

 

 

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

성능은 아직 어떨지 모르겠지만 24bit ADC를 내장한 MCU 중에는 가장 저렴한것 같다.  

 

핀맵은 표준을 따르고 최대한 심플하고 소형으로 제작 해보았다. 전원은 아날로그를 위해 안정적인 레귤레이터로 LP2985를 사용했다.

 

 

표준 핀맵으로 다양한 확장보드에 연결하여 테스트 가능하다.

 

 

 

 

[MSP430AFE EVM] 핀맵

 

 

 

 

 

 

 

OnBoard LED

디버깅을 위한 LED로 P1.0에 연결되어 있다

 

 

 

VREF

MSP430AFE 내부에 1.2V REF가 있지만 추가로 필요한 경우를 대비해 가변 REF인 0.1% tolerance를 가진 LM4041을 사용할수 있도록 했다.

[MSP430AFE] 24bit ADC MSP430

[MSP430]/MSP430_AFE | 2012.06.19 11:26
Posted by nexp

[MSP430AFE] 24bit ADC MSP430

MSP430 코어에 24bit ADC가 포함된 MSP430AFE시리즈가 출시되었다. 저전력 저비용 계측 솔루션으로 사용하면 좋을것같다.

 

- 2400:1 동작 범위에서 우수한 0.1% 오차의 정밀성을 지원하는 싱글-페이즈 계측 아날로그 프론트 엔드 
- 싱글-페이즈 계측 및 무단조작 방지를 위해 동시 샘플링 기능을 가진 세 개의 24bit 시그마-델타 ADC(analog-to-digital converters)

- 최적의 공간 절약형 소형 24 핀 TSSOP 패키지

 

 

msp430afe253.pdf

 

 

 

 

 

 

 

 

 

MSP430™ MCU를 위한  새로운 μC/OS-II RTOS


TI MSP430용 uCOS RTOS를 공개 하고 있다.
[TI 무료 MSP430 RTOS SYS BIOS 사용하기] 의 TI RTOS도 나쁘지 않았는데... uCOS를 밀고 있네...
MSP430에 사용하기는 좀금은 무거운 감이 있긴 했는데 안정성을 강조하고 있다.



"의료용 및 기타 안전 중심 애플리케이션 설계 시, 마이크리움의 µC/OS-II™ 및 µC/OS-III™ 실시간 운영 체제 코드 예제 모두를 MSP430 마이크로컨트롤러에 사용할 수 있습니다. 이는 안전 중심 애플리케이션용으로 특별히 설계된, 업계 유일의 실시간 운영 체제입니다.

µC/OS-II 및 µC/OS-III를 업계 최저전력 마이크로컨트롤러인 MSP430 MCU와 결합하면 초소형 플래시와 RAM 메모리 풋프린트를 사용하는 510(K) 및 PMA 의료용 디바이스를 설계할 수 있습니다.
µC/OS-II는 이미 안전 중심이므로 새로운 의료용 제품 개발로 인한 출시 시간 또한 단축할 수 있습니다."



MSP430 MCU용 µC/OS-II™ , MSP430 MCU용 µC/OS-III™ 다운로드
http://micrium.com/page/downloads/ports/ti/msp430


[MSP430F5529 EVM]  GPIO토글 속도 측정



MSP430F55xx 시리즈는 클럭이 최대 32Mhz까지 입력 가능하므로 이전 MSP430보다는 많이 빨라 졌다. USB기능이 추가 되었기 때문에 속도도 중요한 요소가 되었기 때문이지 않을까...
아무튼 저렴하고 저전력의 MSP430코어가 속도도 빨라졌기 때문에 응용해 적용해 볼곳이 많이 있을것 같다.



MSP430F5529/MSP430F5510 GPIO토글 속도 테스트
[참고] MCU속도 측정 결과 

24Mhz 클럭 이용시 -> GPIO 토글 속도 1.7Mhz
33Mhz 클럭 이용시 -> GPIO 토글 속도 2.35Mhz
     39              while(1)
     40              {
     41                  Led1Toggle();
   \                     ??main_1:
   \   00005C   D2E36302     XOR.B   #0x1, &0x263
   \   000060   FD3F         JMP     ??main_1
   \   000062   0343         NOP



단순 On/Off 하는데 걸리는 시간 90 ns 대략 3Mhz
33Mhz 클럭 이용시 -> GPIO On/Off속도 4.1Mhz

     39              while(1)
     40              {
     41                  //Led1Toggle();
     42                  PORT8 = 1;
   \                     ??main_1:
   \   00005C   D2436302     MOV.B   #0x1, &0x263
     43                  PORT8 = 0;
   \   000060   C2436302     MOV.B   #0x0, &0x263
   \   000064   FB3F         JMP     ??main_1
   \   000066   0343         NOP



참고로 외부 클럭을 32Mhz로 사용하기 위해  TI에서 제공하는 코드(HAL_UCS)를 system.c 에 추가 하였다.
#if (__SYS_CLK__ == SYS_CLK_32MHZ_XTAL) 
    // Startup HF XT2 crystal
    P5SEL |= BIT2+BIT3;                       // Port select XT2 
    do{
        status = XT2_Start_Timeout(XT2DRIVE_0, 50000);
    }while(status == UCS_STATUS_ERROR); 

    SELECT_SMCLK(SELS__XT2CLK);               // Select XT2 as SMCLK source
    SELECT_MCLK(SELS__XT2CLK);
#endif

블로그 이미지

nexp

카테고리

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

티스토리 툴바