본문 바로가기

[MSP430]/MSP430F2013

[MSP430F2013 EVM] 클럭 시스템 및 속도 측정

MSP430 GPIO 토글 해서 클럭 설정에 따른 CPU속도를 측정했다.

프로그램 코드
while(1)
{
    P1OUT ^=  LED1_BIT;
}

ASM코드



측정 결과
1Mhz DCO : 6us

8Mhz DCO: 740ns 665Khz

16Mhz DCO : 360ns 1.4Mhz
(AVR속도 측정 참고)

클럭 설정부분 코드 수정

//Set range :1, 8, 12, 16Mhz
#if (__SYS_CLK__ == SYS_CLK_1MHZ)
 #define CALBC1_FREQ     CALBC1_1MHZ
 #define CALDC0_FREQ     CALDCO_1MHZ
#elif (__SYS_CLK__ == SYS_CLK_8MHZ)
 #define CALBC1_FREQ     CALBC1_8MHZ
 #define CALDC0_FREQ     CALDCO_8MHZ 
#elif (__SYS_CLK__ == SYS_AVR_CLK_12MHZ)
 #define CALBC1_FREQ     CALBC1_12MHZ
 #define CALDC0_FREQ     CALDCO_12MHZ 
#elif (__SYS_CLK__ == SYS_AVR_CLK_16MHZ)
 #define CALBC1_FREQ     CALBC1_16MHZ
 #define CALDC0_FREQ     CALDCO_16MHZ 
#endif
void SystemInit(void)
{
    WDTCTL = WDTPW + WDTHOLD;            // Stop watchdog

    #if __SYS_CLK__
    if (CALBC1_FREQ ==0xFF || CALDC0_FREQ == 0xFF)
    { 
        while(1);    // If calibration constants erased
                     // do not load, trap CPU!!
    }  

    // Set DCO
    BCSCTL1 = CALBC1_FREQ; 
    DCOCTL = CALDC0_FREQ;
    #endif
}


MSP430의 동작 클럭을 보려면 P2.1의 SMCLK핀으로 출력하여 볼수 있다.(물론 SMCLK출력을 하려면 P2SEL비트를 세트해야 한다.)
시스템 클럭을 16Mhz로 설정해도 최대 GPIO toggle 클럭은 MCLK/10 이다. 페리가 느린건지...? 데이터시트에는 없는데 문서를 좀더 찾아볼 필요가 있다.

void main(void)
{
    SystemInit();
   
    Led1Init();
    Led1On();

    Sbi(P2DIR, BIT1);
    Sbi(P2SEL, BIT1);                         // P2.1 = SMCLK
 
    while(1)
    {
        Led1Toggle();
    }
반응형