[MSP430FR2311 EVM] FRAM 테스트

[MSP430]/MSP430_FRAM | 2017.03.30 00:42
Posted by nexp

[MSP430FR2311 EVM] FRAM 테스트





MSP430FR2311 의 최대 장점은 FRAM이다. RAM의 장점인 쉽고 빠르게 Read/Write 하고, FLASH의 장점인 전원 Off시 데이터 유지하는 장점을 가지고 있어서 저전력의 데이터 로깅 시스템에 적용하기에 좋은것 같다.


이러한 MSP430의 FRAM에 읽고 쓰는 테스트 를 해 보았다.



MSP430F2311 FRAM 블록도





FRAM에 Write 하는 코드는 상당히 간단하다.


void FRAMWrite(unsigned long *FRAM_write_ptr, unsigned long Data)

{

    SYSCFG0 = FRWPPW;


    *FRAM_write_ptr = Data;


    SYSCFG0 = FRWPPW | PFWP;

}



void FRAMWriteBuffer(unsigned long *FRAM_write_ptr, unsigned long *pBuf, unsigned int Size)

{

    unsigned int i=0;


    SYSCFG0 = FRWPPW;

    for (i = 0; i < Size; i++)

    {

        *FRAM_write_ptr++ = pBuf[i];

    }

    SYSCFG0 = FRWPPW | PFWP;

}



MSP430FR2311의 FRAM 메모리 주소는 아래와 같이 FFFF-FF80, FFFF-FF100로 코드 메모리와 같이 사용할 수 있다. 예제에서는 FD00에서 테스트 했다.


저작자 표시 비영리 변경 금지
신고

[MSP430FR2311 EVM] ADC테스트 - 내장 온도 센서 테스트



MSP430FR2311 는 10bit, 12bit ADC가 8채널이 있다. 최대 200ksps 까지 변환 가능하기존 MSP430시리즈와 크게 차이는 없지만 FRAM을 사용하면 장점이 될만한 기능이 있는것 같다.



MSP430FR2311 ADC 블록도



MSP430FR2311 ADC 초기화 코드


    // Configure ADC - Pulse sample mode; ADCSC trigger

    ADCCTL0 |= ADCSHT_8 | ADCON;                                  // ADC ON,temperature sample period>30us

    ADCCTL1 |= ADCSHP;                                            // s/w trig, single ch/conv, MODOSC

    ADCCTL2 |= ADCRES;                                            // 10-bit conversion results

    ADCMCTL0 |= ADCSREF_1 | ADCINCH_12;                           // ADC input ch A12 => temp sense

    ADCIE |=ADCIE0;                                               // Enable the Interrupt request for a completed ADC_B conversion


    // Configure reference

    PMMCTL0_H = PMMPW_H;                                          // Unlock the PMM registers

    PMMCTL2 |= INTREFEN | TSENSOREN;                              // Enable internal reference and temperature sensor





MSP430FR2311 온도센서 특성 그래프



MSP430FR2311 ADC 인터럽트 핸들러

// ADC interrupt service routine

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=ADC_VECTOR

__interrupt void ADC_ISR(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)

#else

#error Compiler not supported!

#endif

{

    switch(__even_in_range(ADCIV,ADCIV_ADCIFG))

    {

        case ADCIV_NONE:

            break;

        case ADCIV_ADCOVIFG:

            break;

        case ADCIV_ADCTOVIFG:

            break;

        case ADCIV_ADCHIIFG:

            break;

        case ADCIV_ADCLOIFG:

            break;

        case ADCIV_ADCINIFG:

            break;

        case ADCIV_ADCIFG:

            temp = ADCMEM0;

            // Temperature in Celsius

            // The temperature (Temp, C)=

            IntDegC = (temp-CALADC_15V_30C)*(85-30)/(CALADC_15V_85C-CALADC_15V_30C)+30;


            // Temperature in Fahrenheit

            // Tf = (9/5)*Tc | 32

            IntDegF = 9*IntDegC/5+32;

            //__bic_SR_register_on_exit(LPM3_bits);               // Exit LPM3


            break;

        default:

            break;

    }

}










저작자 표시 비영리 변경 금지
신고

[MSP430FR2311 EVM] UART 테스트

[MSP430]/MSP430_FRAM | 2017.03.30 00:38
Posted by nexp

[MSP430FR2311 EVM] UART 테스트







MSP430FR2311 UART 초기화 코드

MSP430 UART Baudrate 설정 생성코드 참고


    // Configure UART pins

     P1SEL0 |= BIT6 | BIT7;                    // set 2-UART pin as second function



       // Configure UART

     UCA0CTLW0 |= UCSWRST;                     // Put eUSCI in reset

     UCA0CTLW0 |= UCSSEL__SMCLK;


     // Baud Rate calculation

     UCA0BR0 = 8;                              // 1000000/115200 = 8.68

     UCA0MCTLW = 0xD600;                 // 1000000/115200 - INT(1000000/115200)=0.68

                                                     // UCBRSx value = 0xD6 (See UG)

     UCA0BR1 = 0;

     UCA0CTLW0 &= ~UCSWRST;          // Initialize eUSCI



MSP430 에서 UART 보레이트 설정시 항상 문제가 되던 부분은 오차율인데... MCTLW 레지스터를 설정하면  보상 가능하다.


ex) 115200 @ 1Mhz 

1000000/115200 - INT(1000000/115200)=0.68

0.68 => 0.6667 -> 0xD6 





MSP430FR2311 UART 송수신 코드

unsigned char U0_GetByte(void)

{

while(!(UCA0IFG & UCRXIFG));

return UCA0RXBUF;

}


void U0_PutByte(unsigned char Data)

{

    UCA0TXBUF = Data;

    while(!(UCA0IFG & UCTXIFG));

}




참고로 CCS 에는 시리얼 포트 터미널창이 있어 간단히 UART 테스트를 해 볼수 있다.




저작자 표시 비영리 변경 금지
신고

[MSP430FR2311 EVM] 개발환경 설정 - CCS7 무료컴파일러 사용하기




MSP430FR2x 시리즈를 개발하기 위한 환경으로 IAR 최신 버전이 필요하다. 

MSP430 Kickstart 버전을 다운 받으려고 사이트 들어가니 CCSv7(Code Composer Studio V7) 가 무료(솔깃~)라고 한다.


이참에 CCS로 한번 테스트 해볼까?


우선 CCS를 다운 받자

Code Composer Studio V7Sv7     



프로그램 설치 후 MSP430FR2311 디바이스로 새로운 프로젝트를 생성한다. 특별히 설정할것 없이 그냥 간단하게 프로젝트 생성 가능하다.





간단히 LED제어 하는 예제 작성후 다운로드 해보자





다운로드 후 디버깅 환경으로 들어가고 문제 없이 디버깅 되는것을 확인할 수 있다.

예전 버전에서는 툴자체가 불안하고 느렸으며 설정도 복잡 했었는데..

상당히 깔끔하게 잘 동작 하는것 같다. 



앞으로 MSP430 개발에서는 CCS를 적극 활용하는 방향으로 진행해 봐야 할것 같다.



저작자 표시 비영리 변경 금지
신고

블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (128)
[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)

티스토리 툴바