Go Down

Topic: how to access all 4 timers in Arduino 101 (Read 175 times) previous topic - next topic


Jun 12, 2017, 02:40 pm Last Edit: Jun 13, 2017, 03:49 pm by chukas

I am currently working on a project where i need more than 1 timer and am using the recent intel curie based Arduino 101. (specs here)

according to the:intel-curie-module-datasheet
There are 4 Timers available:

"3.2.13 Timers and pulse width modulator (PWM)
Four counters capable of operating in PWM mode or in timer mode
• Configurable PWM high and low time with granularity of a single 32 MHz clock
period per output
• Timer mode support for 32-bit timer operating at 32 MHz
Two timers for the ARC* processor core and two timers for the Intel® Quark™ SE
microcontroller processor core that can also be accessed by the ARC core.
• ARC* processor core timers can be configured as watchdog timers.
Note: PWM keep their state when going to sleep mode, allowing the application to set the
wake configuration
." ARC* EM4 DSP core-based sensor subsystem
The Intel® Curie™ module contains an ARC* EM4 DSP-based sensor subsystem and
interrupt controller with the following features:
• 8 kB L1 instruction cache and 8 kB of closely coupled memory for data
• Four counters that can be used in PWM or timer mode. The timer mode supports
32-bit operation at 32 MHz granularity. These timers can be configured and used by
both cores.
• One configuration watchdog timer with support to trigger an interrupt and/or a
system reset upon timeout. This timer can be configured and used by both cores.

As far as i could research The following Timers are used:
Arc Timer-0 - used for internal system timing, including the millis() function
Arc Timer-1 - implemented in the CurieTimerOne Library . Github Library can be found CurieTimerOne
Intel Quark SE Timer 0 - ? ? ?
Intel Quark SE Timer 1 - ? ? ?

Can anyone help regarding using the other two available timers? I have found no documentation whatsoever regarding them :(

With kind regards,


Inside the CurieTimerOne.h Library the aux_regs.h File is used.

inside of it there is only documentation regarding the Timer0 and Timer1 as can be seen here:
#define ARC_V2_LP_START         0x002
#define ARC_V2_LP_END           0x003
#define ARC_V2_STATUS32         0x00a
#define ARC_V2_STATUS32_P0      0x00b
#define ARC_V2_AUX_IRQ_CTRL     0x00e
#define ARC_V2_IC_IVIC      0x010
#define ARC_V2_IC_CTRL          0x011
#define ARC_V2_TMR0_COUNT       0x021
#define ARC_V2_TMR0_CONTROL     0x022
#define ARC_V2_TMR0_LIMIT       0x023
#define ARC_V2_IRQ_VECT_BASE    0x025
#define ARC_V2_AUX_IRQ_ACT      0x043
#define ARC_V2_TMR1_COUNT       0x100
#define ARC_V2_TMR1_CONTROL     0x101
#define ARC_V2_TMR1_LIMIT       0x102
#define ARC_V2_IRQ_PRIO_PEND    0x200
#define ARC_V2_AUX_IRQ_HINT     0x201
#define ARC_V2_IRQ_PRIORITY     0x206
#define ARC_V2_ERET             0x400
#define ARC_V2_ERSTATUS         0x402
#define ARC_V2_ECR              0x403
#define ARC_V2_EFA              0x404
#define ARC_V2_ICAUSE           0x40a
#define ARC_V2_IRQ_SELECT       0x40b
#define ARC_V2_IRQ_ENABLE       0x40c
#define ARC_V2_IRQ_TRIGGER      0x40d
#define ARC_V2_IRQ_STATUS       0x40f
#define ARC_V2_IRQ_PULSE_CANCEL 0x415
#define ARC_V2_IRQ_PENDING      0x416

Is there no way of accessing timer2 and timer3?
did the Datasheet lie?


The Datasheet Mentions that the Arduino 101 Intel Curie Module has a Intel® Quark™ SE Microcontroller C1000
Processor Core.

There is a Github server for the  Hardware Abstraction Layer (HAL) for Intel® Quark™ Microcontroller products that supports the SE Microcontroller C1000.
It can be found here:

a Timer example is porvided:

If some brave soul could help, i would try integrating the extra Memory Adresses and functions into the Arduino environment.


I've been crawling the internet for ways to access Intel Curier's timer2 and timer3, without any further success. It seems that no one has really paid attention to this issue.  :'(

The good news is that there is a library that grants access to Hardware PWM Counters:
Original post from ljardo

"Hi, turns out the Curie device has hardware PWM counters in addition to the Timer1 counter as revealed in "variant.h" and related files and the schematic pin name PWM0/SS10_3V_IO3.
Each pin has two source/destinations defined as Mode A and Mode B in "scss_registers.h" and related files. For the PWM pins 3, 5, 6 and 9, Mode B connects to a set of hardware PWM counters while Mode A connects to the GPIO.
Mode A is the default setting. Intel decided for some reason to not use these counters in any of the PWM library examples.
I developed a library exposing these counters: CurieHwPWM. This approach is an improvement over the ISR software driven approach.
I welcome feedback on the library features or coding.

The CurieHwPWM Library can be found here

Go Up