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();
}
{
SystemInit();
Led1Init();
Led1On();
Sbi(P2DIR, BIT1);
Sbi(P2SEL, BIT1); // P2.1 = SMCLK
while(1)
{
Led1Toggle();
}
반응형