본문 바로가기

[ATMEL]/SAMD21

#SAMD21E-S EVM - Arduino Zero 성능 테스트

 
ASMD21에 Arduino 를 올렸으니 간단히 성능 테스트를 해 봐야지...
 
GPIO 토글 속도로 수행 속도를 측정해 보았다. 다른 MCU의 Arduino 코드에서 성능 테스트와 비교해 보면 클럭대비 나쁘지는 않은것 같다.
 
아두이노에서 제공하는 GPIO제어 함수(digitalWrite)로 GPIO 토글 하면 2.3us 정도 측정이 된다.
 
#define PIN_OUT     27

#define Led1Off() PORT->Group[0].OUTCLR.reg = (1<<27)
#define Led1On() PORT->Group[0].OUTSET.reg = (1<<27)

void setup() {
PORT->Group[0].DIRSET.reg = (1 << 27);
PORT->Group[0].OUTSET.reg = (1 << 27);
}

void loop() {
  delay(1);
  digitalWrite(PIN_OUT, 1);
  digitalWrite(PIN_OUT, 0);
}
 
좀더 속도를 올리기 위해서 SAMD21의 GPIO 레지스터 직접 제어로 GPIO토글 하면  84ns 정도 측정이 된다.

AtmelStudio 에서 속도 테스트 한 경우와 비교하면 비슷하게 나오는것 같다.

 

 

 

main 루프  수행하는데 걸리는 시간은 500ns(1.6Mhz) 정도 소요 되는 것 같다.

void loop()
{
  Led1On();
  Led1Off();
}
 

 

 

 

참고로 아두이노 에서 loop() 함수가 호출되는 구조를 보면 아래와 같이 조금 느릴 수 밖에 없는 구조 인것 같다.

int main( void )
{
  init();

  __libc_init_array();

  initVariant();

  delay(1);

#if defined(USBCON)

  USBDevice.init();

  USBDevice.attach();

#endif


  setup();

  for (;;)
  {
    loop();
    if (serialEventRun) serialEventRun();
  }

  return 0;
}