2

Where would I find information on how to configure the Arduino Zero's timers?

Because this...

 // Timer stuff
 // Set up the generic clock (GCLK4) used to clock timers
 REG_GCLK_GENDIV = GCLK_GENDIV_DIV(1) | // Divide the 48MHz clock source by divisor 1: 48MHz/1=48MHz
 GCLK_GENDIV_ID(4); // Select Generic Clock (GCLK) 4
 while (GCLK->STATUS.bit.SYNCBUSY); // Wait for synchronization
 REG_GCLK_GENCTRL = GCLK_GENCTRL_IDC | // Set the duty cycle to 50/50 HIGH/LOW
 GCLK_GENCTRL_GENEN | // Enable GCLK4
 GCLK_GENCTRL_SRC_DFLL48M | // Set the 48MHz clock source
 GCLK_GENCTRL_ID(4); // Select GCLK4
 while (GCLK->STATUS.bit.SYNCBUSY); // Wait for synchronization
 // Feed GCLK4 to TC4 and TC5
 REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN | // Enable GCLK4 to TC4 and TC5
 GCLK_CLKCTRL_GEN_GCLK4 | // Select GCLK4
 GCLK_CLKCTRL_ID_TC4_TC5; // Feed the GCLK4 to TC4 and TC5
 while (GCLK->STATUS.bit.SYNCBUSY); // Wait for synchronization
 REG_TC4_COUNT16_CC0 = 150; // Set the TC4 CC0 register as the TOP value in match frequency mode
 while (TC4->COUNT16.STATUS.bit.SYNCBUSY); // Wait for synchronization
 //NVIC_DisableIRQ(TC4_IRQn);
 //NVIC_ClearPendingIRQ(TC4_IRQn);
 NVIC_SetPriority(TC4_IRQn, 0); // Set the Nested Vector Interrupt Controller (NVIC) priority for TC4 to 0 (highest)
 NVIC_EnableIRQ(TC4_IRQn); // Connect TC4 to Nested Vector Interrupt Controller (NVIC)
 REG_TC4_INTFLAG |= TC_INTFLAG_OVF; // Clear the interrupt flags
 REG_TC4_INTENSET = TC_INTENSET_OVF; // Enable TC4 interrupts
 // REG_TC4_INTENCLR = TC_INTENCLR_OVF; // Disable TC4 interrupts
 REG_TC4_CTRLA |= TC_CTRLA_PRESCALER_DIV256 | // Set prescaler to 1024, 48MHz/1024 = 46.875kHz
 TC_CTRLA_WAVEGEN_MFRQ | // Put the timer TC4 into match frequency (MFRQ) mode 
 TC_CTRLA_ENABLE; // Enable TC4
 while (TC4->COUNT16.STATUS.bit.SYNCBUSY); // Wait for synchronization

Is completely indecipherable and highly error prone.

asked Jul 13, 2017 at 10:25

2 Answers 2

4

BOTTOM UP

The arduino Zero uses an Atmel samd21 μController. This video explains how to program the samd chips in a bottom up fashion, or at least how to gather all required information to do so. In case the video doesn't work anymore, i'll briefly rephrase it here. The main steps are:

The bottom up process can be very time consuming, because you are searching a needle out of an haystack like, the datasheet and the ASF. So you need to tackle all the tiny bits before building the whole thing.

TOP DOWN

For some situations it is better to look for a working example program and try to figure out how its done. For this i recommend the arduino github repository. It is a very good resource for figuring out how arduino uses the ASF and helps me tune certain functions.

The top down process therefore allows to decompose a large working function into its smaller parts and dig into the interesting parts. However, it requires something to work with at the start which is not always available.

INDECIPHERABLE

Some code examples aren't understandable from the start. Once you know what the code is doing, i recommend splitting up the large pieces like this register and bit modification section into smaller ones. Extract these sections into functions with self explanatory names, and if done correctly you can get rid of the comments.

Hope this helps ;)

answered Sep 17, 2017 at 23:14
1

Where would I find information on how to configure the Arduino Zero's timers?

Try the datasheet.

What you showed there is fairly typical, may be on the primitive side for chips of its kind.

More power comes with more complexity.

answered Jul 13, 2017 at 10:49
1
  • So am I correct to assume that these low level registers are just exposed in the Arduino sketch? I assume some of the timers are already configured by Arduino for internal uses, such as delay(), where would I find that config? Commented Jul 13, 2017 at 10:52

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.