Arduino M0 Pro (Arduino Zero)でタイマー割り込み

http://ehbtj.com/electronics/arduino-m0-hacks/
PWMは2, 3, 4, 5, 6, 7ピンが使えなくなる、とのこと

int pin_ovf_led = 13;
unsigned int irq_ovf_count = 0;
 
void setup() {
 
  pinMode(pin_ovf_led, OUTPUT);
  digitalWrite(pin_ovf_led, LOW);
   
  REG_GCLK_CLKCTRL = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TCC0_TCC1)) ;
  while ( GCLK->STATUS.bit.SYNCBUSY == 1 );
 
  Tcc* TC = (Tcc*) TCC0;
   
  TC->CTRLA.reg &= ~TCC_CTRLA_ENABLE;
  while (TC->SYNCBUSY.bit.ENABLE == 1);
 
  TC->CTRLA.reg |= TCC_CTRLA_PRESCALER_DIV1024;  // Set perscaler
 
  TC->WAVE.reg |= TCC_WAVE_WAVEGEN_NFRQ;
  while (TC->SYNCBUSY.bit.WAVE == 1);
 
  TC->PER.reg = 0xB71B;  // Set counter Top using the PER register
  while (TC->SYNCBUSY.bit.PER == 1)
 
  TC->CC[0].reg = 0xFFF;
  while (TC->SYNCBUSY.bit.CC0 == 1);
   
  TC->INTENSET.reg = 0;
  TC->INTENSET.bit.OVF = 1;
  TC->INTENSET.bit.MC0 = 1;
 
  NVIC_EnableIRQ(TCC0_IRQn);
 
  TC->CTRLA.reg |= TCC_CTRLA_ENABLE ;
  while (TC->SYNCBUSY.bit.ENABLE == 1);
 
}
 
void loop() {
}
 
void TCC0_Handler()
{
  Tcc* TC = (Tcc*) TCC0;
  if (TC->INTFLAG.bit.OVF == 1) {
    // do something
    digitalWrite(pin_ovf_led, irq_ovf_count % 2);  // for blink led
    irq_ovf_count++;                               // for blink led
    TC->INTFLAG.bit.OVF = 1;
  }
   
  if (TC->INTFLAG.bit.MC0 == 1) {
    TC->INTFLAG.bit.MC0 = 1;
  }
}