본문 바로가기

[ATMEL]/SAMD21

[SAMD21 EVM] CPU 클럭 설정 및 성능 측정 실험

[SAMD21 EVM] CPU 클럭 설정 및 성능 측정 실험





SAMD 시리즈는 Cortex-M0 코어의 48Mhz 로 동작하고 여러 다양한 기술로 페리의 병목현상을 줄여 성능 향상을 했다고 한다. 일단 GPIO 제어로 간단히 속도 테스트를 해보도록 하자.


우선 아래 코드와 같이 ATMEL에서 제공하는 코드를 이용하여 GPIO 토글 속도 테스를 해 보았다.


int main(void)

{

system_init();


       Led1Init();

       Led2Init();

    

while (true)

      {

         port_pin_toggle_output_level(PIN_PB30);

}

}



GPIO토글 속도600khz로 출력된다.

느리다. 아무래도 클럭 설정에 문제가 있는것 같다.


conf_clocks.h 파일에 클럭 설정하는 부분이 있다.

디폴트로 8Mhz로 설정되어 있다. PLL을 이용해서 48Mhz까지 동작 시킬 수 있다.


1)48Mhz로 동작시키면 WAIT 값을 높여 주어야 한다.

/* System clock bus configuration */

#  define CONF_CLOCK_CPU_CLOCK_FAILURE_DETECT     false

//#  define CONF_CLOCK_FLASH_WAIT_STATES            0

#  define CONF_CLOCK_FLASH_WAIT_STATES            2




2)DFLL 설정을 enable 한다.

/* SYSTEM_CLOCK_SOURCE_DFLL configuration - Digital Frequency Locked Loop */

//#  define CONF_CLOCK_DFLL_ENABLE                  false

#  define CONF_CLOCK_DFLL_ENABLE                  true




3)MAIN CLK를 DFLL로 설정해 준다.

/* Configure GCLK generator 0 (Main Clock) */

#  define CONF_CLOCK_GCLK_0_ENABLE                true

#  define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY        true

//#  define CONF_CLOCK_GCLK_0_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

#  define CONF_CLOCK_GCLK_0_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_DFLL



이렇게 설정하니 1.8Mhz로 동작 한다.

ATMEL에서 제공하는 코드라 아무래도 함수로 접근해서 느려지는것 같다.



코드 수정해서 레지스터 직접제어로 테스트 해 보았다.  


int main(void)

{

system_init();


       Led1Init();

       Led2Init();

    

while (true)

      {

          //Led1Toggle(); 

          PORT->Group[1].OUTTGL.reg = BIT30; ;

}

}


레지스터 직접 제어로 변경하니 4Mhz로 출력된다.


다른 MCU들의 성능 측정 결과비교하면 만족할 만한 수준은 아닌것은데... 다양한 페리로 실험해 보면서 성능 테스를 해 볼 필요가 있을것 같다.






반응형