TIMER — Timer/counter

This peripheral is a general purpose timer designed to keep track of time in user-selective time intervals, it can operate in two modes: timer and counter.

Figure 1. Block schematic for timer/counter


The timer/counter runs on the high-frequency clock source (HFCLK) and includes a four-bit (1/2X) prescaler that can divide the timer input clock from the HFCLK controller. Clock source selection between PCLK16M and PCLK1M is automatic according to TIMER base frequency set by the prescaler. The TIMER base frequency is always given as 16 MHz divided by the prescaler value.

The PPI system allows a TIMER event to trigger a task of any other system peripheral of the device. The PPI system also enables the TIMER task/event features to generate periodic output and PWM signals to any GPIO. The number of input/outputs used at the same time is limited by the number of GPIOTE channels.

TIMER can operate in two modes: Timer mode and Counter mode. In both modes, TIMER is started by triggering the START task, and stopped by triggering the STOP task. After the timer is stopped the timer can resume timing/counting by triggering the START task again. When timing/counting is resumed, the timer will continue from the value it had prior to being stopped.

In Timer mode, the TIMER's internal Counter register is incremented by one for every tick of the timer frequency fTIMER as illustrated in Block schematic for timer/counter. The timer frequency is derived from PCLK16M as shown in the following example, using the values specified in the PRESCALER register.


    fTIMER = 16 MHz / (2PRESCALER)
    

When fTIMER ≤ 1 MHz, TIMER will use PCLK1M instead of PCLK16M for reduced power consumption.

In counter mode, the TIMER's internal Counter register is incremented by one each time the COUNT task is triggered, meaning the timer frequency and the prescaler are not utilized in counter mode. Similarly, the COUNT task has no effect in Timer mode.

The TIMER's maximum value is configured by changing the bit-width of the timer in register BITMODE.

PRESCALER and BITMODE must only be updated when the timer is stopped. If these registers are updated while the timer is started, unpredictable behavior may occur.

When the timer is incremented beyond its maximum value, the Counter register will overflow and the timer will automatically start over from zero.

The Counter register can be cleared by triggering the CLEAR task. This will explicitly set the internal value to zero.

TIMER implements multiple capture/compare registers.

Independent of prescaler setting, the accuracy of TIMER is equivalent to one tick of the timer frequency fTIMER as illustrated in Block schematic for timer/counter.

Capture

TIMER implements one capture task for every available capture/compare register.

Every time the CAPTURE[n] task is triggered, the Counter value is copied to the CC[n] register.

Compare

TIMER implements one COMPARE event for every available capture/compare register.

A COMPARE event is generated when the Counter is incremented and then becomes equal to the value specified in one of the capture compare registers. When the Counter value becomes equal to the value specified in a capture compare register CC[n], the corresponding compare event COMPARE[n] is generated.

BITMODE specifies how many bits of the Counter register and the capture/compare register that are used when the comparison is performed. Other bits will be ignored.

Task delays

After TIMER is started, the CLEAR, COUNT, and STOP tasks are guaranteed to take effect within one clock cycle of the PCLK16M.

Task priority

If the START task and the STOP task are triggered at the same time, meaning within the same period of PCLK16M, the STOP task will be prioritized.

Registers

Instances

InstanceBase addressDescription
TIMER00x40008000

Timer 0

TIMER10x40009000

Timer 1

TIMER20x4000A000

Timer 2

TIMER30x4001A000

Timer 3

TIMER40x4001B000

Timer 4

Configuration

InstanceConfiguration
TIMER0

This timer instance has 4 CC registers (CC[0..3])

TIMER1

This timer instance has 4 CC registers (CC[0..3])

TIMER2

This timer instance has 4 CC registers (CC[0..3])

TIMER3

This timer instance has 6 CC registers (CC[0..5])

TIMER4

This timer instance has 6 CC registers (CC[0..5])

Register overview

RegisterOffsetDescription
TASKS_START0x000

Start Timer

TASKS_STOP0x004

Stop Timer

TASKS_COUNT0x008

Increment Timer (Counter mode only)

TASKS_CLEAR0x00C

Clear time

TASKS_SHUTDOWN0x010

Shut down timer

This register is deprecated.

TASKS_CAPTURE[0]0x040

Capture Timer value to CC[0] register

TASKS_CAPTURE[1]0x044

Capture Timer value to CC[1] register

TASKS_CAPTURE[2]0x048

Capture Timer value to CC[2] register

TASKS_CAPTURE[3]0x04C

Capture Timer value to CC[3] register

TASKS_CAPTURE[4]0x050

Capture Timer value to CC[4] register

TASKS_CAPTURE[5]0x054

Capture Timer value to CC[5] register

EVENTS_COMPARE[0]0x140

Compare event on CC[0] match

EVENTS_COMPARE[1]0x144

Compare event on CC[1] match

EVENTS_COMPARE[2]0x148

Compare event on CC[2] match

EVENTS_COMPARE[3]0x14C

Compare event on CC[3] match

EVENTS_COMPARE[4]0x150

Compare event on CC[4] match

EVENTS_COMPARE[5]0x154

Compare event on CC[5] match

SHORTS0x200

Shortcuts between local events and tasks

INTENSET0x304

Enable interrupt

INTENCLR0x308

Disable interrupt

MODE0x504

Timer mode selection

BITMODE0x508

Configure the number of bits used by the TIMER

PRESCALER0x510

Timer prescaler register

CC[0]0x540

Capture/Compare register 0

CC[1]0x544

Capture/Compare register 1

CC[2]0x548

Capture/Compare register 2

CC[3]0x54C

Capture/Compare register 3

CC[4]0x550

Capture/Compare register 4

CC[5]0x554

Capture/Compare register 5

TASKS_START

Address offset: 0x000

Start Timer

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_START

Start Timer

Trigger

1

Trigger task

TASKS_STOP

Address offset: 0x004

Stop Timer

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_STOP

Stop Timer

Trigger

1

Trigger task

TASKS_COUNT

Address offset: 0x008

Increment Timer (Counter mode only)

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_COUNT

Increment Timer (Counter mode only)

Trigger

1

Trigger task

TASKS_CLEAR

Address offset: 0x00C

Clear time

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CLEAR

Clear time

Trigger

1

Trigger task

TASKS_SHUTDOWN (Deprecated)

Address offset: 0x010

Shut down timer

This register is deprecated.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_SHUTDOWN

Shut down timer

This field is deprecated.

Trigger

1

Trigger task

TASKS_CAPTURE[0]

Address offset: 0x040

Capture Timer value to CC[0] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[0] register

Trigger

1

Trigger task

TASKS_CAPTURE[1]

Address offset: 0x044

Capture Timer value to CC[1] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[1] register

Trigger

1

Trigger task

TASKS_CAPTURE[2]

Address offset: 0x048

Capture Timer value to CC[2] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[2] register

Trigger

1

Trigger task

TASKS_CAPTURE[3]

Address offset: 0x04C

Capture Timer value to CC[3] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[3] register

Trigger

1

Trigger task

TASKS_CAPTURE[4]

Address offset: 0x050

Capture Timer value to CC[4] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[4] register

Trigger

1

Trigger task

TASKS_CAPTURE[5]

Address offset: 0x054

Capture Timer value to CC[5] register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CAPTURE

Capture Timer value to CC[5] register

Trigger

1

Trigger task

EVENTS_COMPARE[0]

Address offset: 0x140

Compare event on CC[0] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[0] match

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_COMPARE[1]

Address offset: 0x144

Compare event on CC[1] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[1] match

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_COMPARE[2]

Address offset: 0x148

Compare event on CC[2] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[2] match

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_COMPARE[3]

Address offset: 0x14C

Compare event on CC[3] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[3] match

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_COMPARE[4]

Address offset: 0x150

Compare event on CC[4] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[4] match

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_COMPARE[5]

Address offset: 0x154

Compare event on CC[5] match

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_COMPARE

Compare event on CC[5] match

NotGenerated

0

Event not generated

Generated

1

Event generated

SHORTS

Address offset: 0x200

Shortcuts between local events and tasks

Bit number313029282726252423222120191817161514131211109876543210
IDLKJIHGFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

COMPARE0_CLEAR

Shortcut between event COMPARE[0] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

B

RW

COMPARE1_CLEAR

Shortcut between event COMPARE[1] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

C

RW

COMPARE2_CLEAR

Shortcut between event COMPARE[2] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

D

RW

COMPARE3_CLEAR

Shortcut between event COMPARE[3] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

E

RW

COMPARE4_CLEAR

Shortcut between event COMPARE[4] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

F

RW

COMPARE5_CLEAR

Shortcut between event COMPARE[5] and task CLEAR

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

G

RW

COMPARE0_STOP

Shortcut between event COMPARE[0] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

H

RW

COMPARE1_STOP

Shortcut between event COMPARE[1] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

I

RW

COMPARE2_STOP

Shortcut between event COMPARE[2] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

J

RW

COMPARE3_STOP

Shortcut between event COMPARE[3] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

K

RW

COMPARE4_STOP

Shortcut between event COMPARE[4] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

L

RW

COMPARE5_STOP

Shortcut between event COMPARE[5] and task STOP

Disabled

0

Disable shortcut

Enabled

1

Enable shortcut

INTENSET

Address offset: 0x304

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

COMPARE[0]

Write '1' to enable interrupt for event COMPARE[0]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

B

RW

COMPARE[1]

Write '1' to enable interrupt for event COMPARE[1]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

C

RW

COMPARE[2]

Write '1' to enable interrupt for event COMPARE[2]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

D

RW

COMPARE[3]

Write '1' to enable interrupt for event COMPARE[3]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

E

RW

COMPARE[4]

Write '1' to enable interrupt for event COMPARE[4]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

F

RW

COMPARE[5]

Write '1' to enable interrupt for event COMPARE[5]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTENCLR

Address offset: 0x308

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

COMPARE[0]

Write '1' to disable interrupt for event COMPARE[0]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

B

RW

COMPARE[1]

Write '1' to disable interrupt for event COMPARE[1]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

C

RW

COMPARE[2]

Write '1' to disable interrupt for event COMPARE[2]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

D

RW

COMPARE[3]

Write '1' to disable interrupt for event COMPARE[3]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

E

RW

COMPARE[4]

Write '1' to disable interrupt for event COMPARE[4]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

F

RW

COMPARE[5]

Write '1' to disable interrupt for event COMPARE[5]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

MODE

Address offset: 0x504

Timer mode selection

Bit number313029282726252423222120191817161514131211109876543210
IDAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

MODE

Timer mode

Timer

0

Select Timer mode

Counter

1

Select Counter mode

This enumerator is deprecated.

LowPowerCounter

2

Select Low Power Counter mode

BITMODE

Address offset: 0x508

Configure the number of bits used by the TIMER

Bit number313029282726252423222120191817161514131211109876543210
IDAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

BITMODE

Timer bit width

16Bit

0

16 bit timer bit width

08Bit

1

8 bit timer bit width

24Bit

2

24 bit timer bit width

32Bit

3

32 bit timer bit width

PRESCALER

Address offset: 0x510

Timer prescaler register

Bit number313029282726252423222120191817161514131211109876543210
IDAAAA
Reset 0x0000000400000000000000000000000000000100
IDR/WFieldValue IDValueDescription
A

RW

PRESCALER

[0..9]

Prescaler value

CC[0]

Address offset: 0x540

Capture/Compare register 0

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.

CC[1]

Address offset: 0x544

Capture/Compare register 1

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.

CC[2]

Address offset: 0x548

Capture/Compare register 2

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.

CC[3]

Address offset: 0x54C

Capture/Compare register 3

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.

CC[4]

Address offset: 0x550

Capture/Compare register 4

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.

CC[5]

Address offset: 0x554

Capture/Compare register 5

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CC

Capture/Compare value

Only the number of bits indicated by BITMODE will be used by the TIMER.