RTC — Real-time counter

The Real-time counter (RTC) module provides a generic, low power timer on the low-frequency clock source (LFCLK).

Figure 1. RTC block schematic
RTC block schematic

The RTC module features a 24-bit COUNTER, a 12-bit (1/X) prescaler, capture/compare registers, and a tick event generator for low power, tickless RTOS implementation.

Clock source

The RTC will run off the LFCLK.

The COUNTER resolution will therefore be 30.517 μs. Depending on the source, the RTC is able to run while the HFCLK is OFF and PCLK16M is not available.

The software has to explicitely start LFCLK before using the RTC.

See CLOCK — Clock control for more information about clock sources.

Resolution versus overflow and the PRESCALER

Counter increment frequency:


    fRTC [kHz] = 32.768 / (PRESCALER + 1 )
    

The PRESCALER register is read/write when the RTC is stopped. The PRESCALER register is read-only once the RTC is STARTed. Writing to the PRESCALER register when the RTC is started has no effect.

The PRESCALER is restarted on START, CLEAR and TRIGOVRFLW, that is, the prescaler value is latched to an internal register (<<PRESC>>) on these tasks.

Examples:

  1. Desired COUNTER frequency 100 Hz (10 ms counter period)

    PRESCALER = round(32.768 kHz / 100 Hz) - 1 = 327

    fRTC = 99.9 Hz

    10009.576 μs counter period

  2. Desired COUNTER frequency 8 Hz (125 ms counter period)

    PRESCALER = round(32.768 kHz / 8 Hz) – 1 = 4095

    fRTC = 8 Hz

    125 ms counter period

Table 1. RTC resolution versus overflow
PrescalerCounter resolutionOverflow
030.517 μs512 seconds
28-17812.5 μs131072 seconds
212-1125 ms582.542 hours

COUNTER register

The COUNTER increments on LFCLK when the internal PRESCALER register (<<PRESC>>) is 0x00. <<PRESC>> is reloaded from the PRESCALER register. If enabled, the TICK event occurs on each increment of the COUNTER. The TICK event is disabled by default.

Figure 2. Timing diagram - COUNTER_PRESCALER_0
Timing diagram - COUNTER_PRESCALER_0

Figure 3. Timing diagram - COUNTER_PRESCALER_1

Overflow features

The TRIGOVRFLW task sets the COUNTER value to 0xFFFFF0 to allow SW test of the overflow condition.

OVRFLW occurs when COUNTER overflows from 0xFFFFFF to 0.

Important: The OVRFLW event is disabled by default.

TICK event

The TICK event enables low power "tick-less" RTOS implementation as it optionally provides a regular interrupt source for a RTOS without the need to use the ARM® SysTick feature.

Using the RTC TICK event rather than the SysTick allows the CPU to be powered down while still keeping RTOS scheduling active.

Important: The TICK event is disabled by default.

Event control feature

To optimize RTC power consumption, events in the RTC can be individually disabled to prevent PCLK16M and HFCLK being requested when those events are triggered. This is managed using the EVTEN register.

For example, if the TICK event is not required for an application, this event should be disabled as it is frequently occurring and may increase power consumption if HFCLK otherwise could be powered down for long durations.

This means that the RTC implements a slightly different task and event system compared to the standard system described in Peripheral interface. The RTC task and event system is illustrated in Tasks, events and interrupts in the RTC.

Figure 4. Tasks, events and interrupts in the RTC
Tasks, events and interrupts in the RTC

Compare feature

There are a number of Compare registers.

For more information, see Registers.

When setting a compare register, the following behavior of the RTC compare event should be noted:

  • If a CC register value is 0 when a CLEAR task is set, this will not trigger a COMPARE event.
    Figure 5. Timing diagram - COMPARE_CLEAR

  • If a CC register is N and the COUNTER value is N when the START task is set, this will not trigger a COMPARE event.
    Figure 6. Timing diagram - COMPARE_START

  • COMPARE occurs when a CC register is N and the COUNTER value transitions from N-1 to N.
    Figure 7. Timing diagram - COMPARE

  • If the COUNTER is N, writing N+2 to a CC register is guaranteed to trigger a COMPARE event at N+2.
    Figure 8. Timing diagram - COMPARE_N+2
    Timing diagram - COMPARE_N+2

  • If the COUNTER is N, writing N or N+1 to a CC register may not trigger a COMPARE event.
    Figure 9. Timing diagram - COMPARE_N+1
    Timing diagram - COMPARE_N+1

  • If the COUNTER is N and the current CC register value is N+1 or N+2 when a new CC value is written, a match may trigger on the previous CC value before the new value takes effect. If the current CC value greater than N+2 when the new value is written, there will be no event due to the old value.

    Figure 10. Timing diagram - COMPARE_N-1
    Timing diagram - COMPARE_N-1

TASK and EVENT jitter/delay

Jitter or delay in the RTC is due to the peripheral clock being a low frequency clock (LFCLK) which is not synchronous to the faster PCLK16M.

Registers in the peripheral interface, part of the PCLK16M domain, have a set of mirrored registers in the LFCLK domain. For example, the COUNTER value accessible from the CPU is in the PCLK16M domain and is latched on read from an internal register called COUNTER in the LFCLK domain. COUNTER is the register which is actually modified each time the RTC ticks. These registers must be synchronised between clock domains (PCLK16M and LFCLK).

The following is a summary of the jitter introduced on tasks and events. Figures illustrating jitter follow.

Table 2. RTC jitter magnitudes on tasks
TaskDelay
CLEAR, STOP, START, TRIGOVRFLOW+15 to 46 μs
Table 3. RTC jitter magnitudes on events
Operation/FunctionJitter
START to COUNTER increment+/- 15 μs
COMPARE to COMPARE 1+/- 62.5 ns
  1. CLEAR and STOP (and TRIGOVRFLW; not shown) will be delayed as long as it takes for the peripheral to clock a falling edge and rising of the LFCLK. This is between 15.2585 μs and 45.7755 μs – rounded to 15 μs and 46 μs for the remainder of the section.
    Figure 11. Timing diagram - DELAY_CLEAR
    Timing diagram - DELAY_CLEAR

    Figure 12. Timing diagram - DELAY_STOP
    Timing diagram - DELAY_STOP

  2. The START task will start the RTC. Assuming that the LFCLK was previously running and stable, the first increment of COUNTER (and instance of TICK event) will be typically after 30.5 μs +/-15 μs. In some cases, in particular if the RTC is STARTed before the LFCLK is running, that timing can be up to ~250 μs. The software should therefore wait for the first TICK if it has to make sure the RTC is running. Sending a TRIGOVRFLW task sets the COUNTER to a value close to overflow. However, since the update of COUNTER relies on a stable LFCLK, sending this task while LFCLK is not running will start LFCLK, but the update will then be delayed by the same amount of time of up to ~250 us. The figures show the smallest and largest delays to on the START task which appears as a +/-15 μs jitter on the first COUNTER increment.
    Figure 13. Timing diagram - JITTER_START-
    Timing diagram - JITTER_START-

    Figure 14. Timing diagram - JITTER_START+
    Timing diagram - JITTER_START+

Reading the COUNTER register

To read the COUNTER register, the internal <<COUNTER>> value is sampled.

To ensure that the <<COUNTER>> is safely sampled (considering an LFCLK transition may occur during a read), the CPU and core memory bus are halted for three cycles by lowering the core PREADY signal. The Read takes the CPU 2 cycles in addition resulting in the COUNTER register read taking a fixed five PCLK16M clock cycles.

Figure 15. Timing diagram - COUNTER_READ

Registers

Table 4. Instances
Base addressPeripheralInstanceDescriptionConfiguration
0x4000B000RTCRTC0

Real-time counter 0

CC[0..2] implemented, CC[3] not implemented

 
0x40011000RTCRTC1

Real-time counter 1

CC[0..3] implemented

 
Table 5. Register overview
RegisterOffsetDescription
TASKS_START0x000

Start RTC COUNTER

 
TASKS_STOP0x004

Stop RTC COUNTER

 
TASKS_CLEAR0x008

Clear RTC COUNTER

 
TASKS_TRIGOVRFLW0x00C

Set COUNTER to 0xFFFFF0

 
EVENTS_TICK0x100

Event on COUNTER increment

 
EVENTS_OVRFLW0x104

Event on COUNTER overflow

 
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

 
INTENSET0x304

Enable interrupt

 
INTENCLR0x308

Disable interrupt

 
EVTEN0x340

Enable or disable event routing

 
EVTENSET0x344

Enable event routing

 
EVTENCLR0x348

Disable event routing

 
COUNTER0x504

Current COUNTER value

 
PRESCALER0x508

12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped

 
CC[0]0x540

Compare register 0

 
CC[1]0x544

Compare register 1

 
CC[2]0x548

Compare register 2

 
CC[3]0x54C

Compare register 3

 

TASKS_START

Address offset: 0x000

Start RTC COUNTER

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_START

  

Start RTC COUNTER

   

Trigger

1

Trigger task

TASKS_STOP

Address offset: 0x004

Stop RTC COUNTER

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_STOP

  

Stop RTC COUNTER

   

Trigger

1

Trigger task

TASKS_CLEAR

Address offset: 0x008

Clear RTC COUNTER

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_CLEAR

  

Clear RTC COUNTER

   

Trigger

1

Trigger task

TASKS_TRIGOVRFLW

Address offset: 0x00C

Set COUNTER to 0xFFFFF0

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_TRIGOVRFLW

  

Set COUNTER to 0xFFFFF0

   

Trigger

1

Trigger task

EVENTS_TICK

Address offset: 0x100

Event on COUNTER increment

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_TICK

  

Event on COUNTER increment

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

EVENTS_OVRFLW

Address offset: 0x104

Event on COUNTER overflow

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_OVRFLW

  

Event on COUNTER overflow

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

EVENTS_COMPARE[n] (n=0..3)

Address offset: 0x140 + (n × 0x4)

Compare event on CC[n] match

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_COMPARE

  

Compare event on CC[n] match

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

INTENSET

Address offset: 0x304

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
ID            FEDC              BA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

TICK

  

Write '1' to enable interrupt for event TICK

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

BRW

OVRFLW

  

Write '1' to enable interrupt for event OVRFLW

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

C-FRW

COMPARE[i] (i=0..3)

  

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

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

INTENCLR

Address offset: 0x308

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
ID            FEDC              BA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

TICK

  

Write '1' to disable interrupt for event TICK

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

BRW

OVRFLW

  

Write '1' to disable interrupt for event OVRFLW

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

C-FRW

COMPARE[i] (i=0..3)

  

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

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

EVTEN

Address offset: 0x340

Enable or disable event routing

Bit number313029282726252423222120191817161514131211109876543210
ID            FEDC              BA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

TICK

  

Enable or disable event routing for event TICK

   

Disabled

0

Disable

   

Enabled

1

Disable

BRW

OVRFLW

  

Enable or disable event routing for event OVRFLW

   

Disabled

0

Disable

   

Enabled

1

Disable

C-FRW

COMPARE[i] (i=0..3)

  

Enable or disable event routing for event COMPARE[i]

   

Disabled

0

Disable

   

Enabled

1

Disable

EVTENSET

Address offset: 0x344

Enable event routing

Bit number313029282726252423222120191817161514131211109876543210
ID            FEDC              BA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

TICK

  

Write '1' to enable event routing for event TICK

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Set

1

Enable

BRW

OVRFLW

  

Write '1' to enable event routing for event OVRFLW

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Set

1

Enable

C-FRW

COMPARE[i] (i=0..3)

  

Write '1' to enable event routing for event COMPARE[i]

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Set

1

Enable

EVTENCLR

Address offset: 0x348

Disable event routing

Bit number313029282726252423222120191817161514131211109876543210
ID            FEDC              BA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

TICK

  

Write '1' to disable event routing for event TICK

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Clear

1

Disable

BRW

OVRFLW

  

Write '1' to disable event routing for event OVRFLW

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Clear

1

Disable

C-FRW

COMPARE[i] (i=0..3)

  

Write '1' to disable event routing for event COMPARE[i]

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

   

Clear

1

Disable

COUNTER

Address offset: 0x504

Current COUNTER value

Bit number313029282726252423222120191817161514131211109876543210
ID        AAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AR

COUNTER

  

Counter value

PRESCALER

Address offset: 0x508

12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped

Bit number313029282726252423222120191817161514131211109876543210
ID                    AAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

PRESCALER

  

Prescaler value

CC[n] (n=0..3)

Address offset: 0x540 + (n × 0x4)

Compare register n

Bit number313029282726252423222120191817161514131211109876543210
ID        AAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

COMPARE

  

Compare value

Electrical specification

1 Assumes RTC runs continuously between these events.
Note: 32.768 kHz clock jitter is additional to the numbers provided above.