[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

댓글을 달아 주세요

[MSP430]/MSP430_EVM2012. 2. 9. 22:00

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

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


Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_EVM2012. 1. 13. 14:01

초저전력 MSP430™ MCU 오토모티브 애플리케이션 용으로 승인

초저전력 MSP430™ MCU 오토모티브 애플리케이션 용으로 승인

요즘 MCU들이 많이 나와서 MSP430은 잘 들여다 보지 않았는데... 차량용 지원 가능하다면 사용해 볼곳이 많을것 같다.

TI의 초저전력 MSP430G2xx 및 MSP430F2xx 시리즈는 내부 캐빈 모터, 커패시티브 터치, 인포테인먼트 시스템 및 원격 키리스 엔트리(remote keyless entry)를 포함하여 오토모티브 애플리케이션 용으로 AEC-Q100 승인을 받았습니다. 오토모티브 용으로 승인을 받은MSP430 MCU는 개발자가 차량 연료 효율과 배터리 수명을 개선함과 동시에 시스템 비용과 출시 시간을 단축할 수 있도록 도와 줍니다. 개발자들은 포함된 LIN 소프트웨어 드라이버를 이용하여 LIN 기반 애플리케이션과 제품도 편리하게 설계할 수 있습니다. 현재 오토모티브 용으로 승인된 MSP430 마이크로 컨트롤러 50종 이상이 샘플로 제공되고 있습니다.


http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?sectionId=95&tabId=2859&familyId=2919&family=mcu&paramCriteria=no&sp_rid_pod4=NjQ4ODU1MjYxNAS2&sp_mid_pod4=38605321


Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_EVM2011. 10. 28. 12:11

[MSP430] WATCHDOG 사용하기

[MSP430] WATCHDOG 사용하기


MSP430에서 Watchdog 사용하기위해 WDTCTL레지스터를 설정하면된다. 디폴트로 와치독은 동작하도록 되어 있고 내 코드에서는 SystemInit() 함수에서 와치독 사용하지 않도록 설정하고 있다.

void SystemInit(void)
{
  int result,i;
  WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer


WDTCTL레지스터를 제어하기 위해서는 Passwoard를 상위 레지스터가 기입해야 하는데 0x69를 입력하면 된다.
아래는 WDTCTL레지스터 이다.




와치독 사용하기 위해서는 WDTHOLD, WDTTMSEL 비트를 0으로 설정하면된다.
와치독 타이머 초기화는 WDTCNTL비트를 셋하면 초기화되어 와치독 리셋을 방지한다.



MSP430 Watchdog 드라이버 코드

#define WDT_ENABLE()                WDTCTL = WDTPW;
#define WDT_DISABLE()                WDTCTL = WDTPW+WDTHOLD;

#define WDT_RESET()                 WDTCTL = WDTPW+WDTCNTCL;



MSP430 Watchdog 테스트 예제 코드
void main(void)
{
 unsigned int cnt = 0;
 
    SystemInit();

 Led1Init();
 Led1On();
   
    for(cnt=0;cnt<3;cnt++)
    {
  Led1Toggle();
  Delay(50);   
    }
    Led1On();
   
   
    //와치독 사용
    WDT_ENABLE();
   
 while(1)
 {
        //와치독 리셋
        WDT_RESET();
 }
}
Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_EVM2011. 10. 26. 17:43

[MSP430] 외부 인터럽트

[MSP430] 외부 인터럽트

외부 인터럽트 초기화
    //외부 인터럽트 설정
    Sbi(P1IE, SCLK_BIT);         //interrupt enabled
    Cbi(P1IES, SCLK_BIT);        //edge 선택 0:라이징, 1:폴링
    Cbi(P1IFG, SCLK_BIT);        //IFG cleare



인터럽트 처리 핸들러
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
    if(P1IFG&SCLK_BIT)
    {
        Led1Toggle();      
        
        Cbi(P1IFG, SCLK_BIT);
    }
}



Posted by nexp

댓글을 달아 주세요