RTCC - Real Time Clock with Capture#


Example#

This example demonstrates how to initialize the RTCC, configure channels for compare mode, set compare values, and handle interrupts.

#include "sl_hal_rtcc.h"

// Flag to indicate compare match event occurred
volatile bool compare_match = false;

// RTCC interrupt handler
void RTCC_IRQHandler(void)
{
  // Get enabled and pending interrupts
  uint32_t flags = sl_hal_rtcc_get_enabled_interrupts();

  // Check if CC0 interrupt is triggered
  if (flags & RTCC_IF_CC0) {
    // Clear the interrupt flag
    sl_hal_rtcc_clear_interrupts(RTCC_IF_CC0);

    // Set flag to indicate match
    compare_match = true;
  }
}

void rtcc_example(void)
{
  // Initialize RTCC with default settings
  sl_hal_rtcc_init_t rtcc_init = SL_HAL_RTCC_INIT_DEFAULT;
  sl_hal_rtcc_init(&rtcc_init);

  // Configure channel 0 for compare mode
  sl_hal_rtcc_cc_init_t cc_init = SL_HAL_RTCC_CH_INIT_COMPARE_DEFAULT;
  sl_hal_rtcc_channel_init(0, &cc_init);

  // Set compare value for channel 0
  sl_hal_rtcc_set_channel_compare_value(0, 1000); // 1000 counts

  // Reset counter
  sl_hal_rtcc_set_counter(0);

  // Clear any pending interrupt flags
  sl_hal_rtcc_clear_interrupts(_RTCC_IF_MASK);

  // Enable interrupts for CC0
  sl_hal_rtcc_enable_interrupts(RTCC_IEN_CC0);

  // Enable NVIC interrupt for RTCC
  sl_interrupt_manager_enable_irq(RTCC_IRQn);

  // Enable RTCC module
  sl_hal_rtcc_enable();

  // Start RTCC counter
  sl_hal_rtcc_start();

  // Wait for compare match
  while (!compare_match) {
    // Could enter low power mode here
  }

  // Reset flag
  compare_match = false;

  // Stop RTCC
  sl_hal_rtcc_stop();
}

Modules#

sl_hal_rtcc_init_t

sl_hal_rtcc_cc_init_t

Enumerations#

enum
SL_HAL_RTCC_COUNTER_PRESCALER_1 = _RTCC_CFG_CNTPRESC_DIV1
SL_HAL_RTCC_COUNTER_PRESCALER_2 = _RTCC_CFG_CNTPRESC_DIV2
SL_HAL_RTCC_COUNTER_PRESCALER_4 = _RTCC_CFG_CNTPRESC_DIV4
SL_HAL_RTCC_COUNTER_PRESCALER_8 = _RTCC_CFG_CNTPRESC_DIV8
SL_HAL_RTCC_COUNTER_PRESCALER_16 = _RTCC_CFG_CNTPRESC_DIV16
SL_HAL_RTCC_COUNTER_PRESCALER_32 = _RTCC_CFG_CNTPRESC_DIV32
SL_HAL_RTCC_COUNTER_PRESCALER_64 = _RTCC_CFG_CNTPRESC_DIV64
SL_HAL_RTCC_COUNTER_PRESCALER_128 = _RTCC_CFG_CNTPRESC_DIV128
SL_HAL_RTCC_COUNTER_PRESCALER_256 = _RTCC_CFG_CNTPRESC_DIV256
SL_HAL_RTCC_COUNTER_PRESCALER_512 = _RTCC_CFG_CNTPRESC_DIV512
SL_HAL_RTCC_COUNTER_PRESCALER_1024 = _RTCC_CFG_CNTPRESC_DIV1024
SL_HAL_RTCC_COUNTER_PRESCALER_2048 = _RTCC_CFG_CNTPRESC_DIV2048
SL_HAL_RTCC_COUNTER_PRESCALER_4096 = _RTCC_CFG_CNTPRESC_DIV4096
SL_HAL_RTCC_COUNTER_PRESCALER_8192 = _RTCC_CFG_CNTPRESC_DIV8192
SL_HAL_RTCC_COUNTER_PRESCALER_16384 = _RTCC_CFG_CNTPRESC_DIV16384
SL_HAL_RTCC_COUNTER_PRESCALER_32768 = _RTCC_CFG_CNTPRESC_DIV32768
}

Counter prescaler selection.

enum
SL_HAL_RTCC_COUNTER_TICK_PRESCALER = _RTCC_CFG_CNTTICK_PRESC
SL_HAL_RTCC_COUNTER_TICK_CCV_0_MATCH = _RTCC_CFG_CNTTICK_CCV0MATCH
}

Prescaler mode of the RTCC counter.

enum
SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_OFF = _RTCC_CC_CTRL_MODE_OFF
SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_CAPTURE = _RTCC_CC_CTRL_MODE_INPUTCAPTURE
SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_COMPARE = _RTCC_CC_CTRL_MODE_OUTPUTCOMPARE
}

Capture/Compare channel mode.

enum
SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_PULSE = _RTCC_CC_CTRL_CMOA_PULSE
SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_TOGGLE = _RTCC_CC_CTRL_CMOA_TOGGLE
SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_CLEAR = _RTCC_CC_CTRL_CMOA_CLEAR
SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_SET = _RTCC_CC_CTRL_CMOA_SET
}

Compare match output action mode.

enum
SL_HAL_RTCC_IN_EDGE_RISING = _RTCC_CC_CTRL_ICEDGE_RISING
SL_HAL_RTCC_IN_EDGE_FALLING = _RTCC_CC_CTRL_ICEDGE_FALLING
SL_HAL_RTCC_IN_EDGE_BOTH = _RTCC_CC_CTRL_ICEDGE_BOTH
SL_HAL_RTCC_IN_EDGE_NONE = _RTCC_CC_CTRL_ICEDGE_NONE
}

Input edge select.

enum
SL_HAL_RTCC_COMPBASE_COUNTER_MODE = _RTCC_CC_CTRL_COMPBASE_CNT
SL_HAL_RTCC_COMPARE_PRE_COUNTER_MODE = _RTCC_CC_CTRL_COMPBASE_PRECNT
}

Capture/Compare channel compare mode.

Typedefs#

typedef uint8_t

PRS channel number.

Functions#

void
sl_hal_rtcc_init(const sl_hal_rtcc_init_t *init)

Initialize RTCC.

void
sl_hal_rtcc_channel_init(uint32_t channel, const sl_hal_rtcc_cc_init_t *init)

Configure the selected capture/compare channel of the RTCC.

void

Restore RTCC to its reset state.

void

Wait for the RTCC to complete all synchronization of register changes and commands.

void

Enable RTCC counting.

void

Disable RTCC counting.

void

Start the RTCC counter.

void

Stop the RTCC counter.

uint32_t

Get the RTCC compare register value for a selected channel.

void
sl_hal_rtcc_set_channel_compare_value(uint32_t channel, uint32_t value)

Set the RTCC compare register value for a selected channel.

uint32_t

Get the RTCC input capture register value for a selected channel.

uint32_t
sl_hal_rtcc_get_channel_ccv(uint32_t channel)

Get the RTCC capture/compare register value for a selected channel.

void
sl_hal_rtcc_set_channel_ccv(uint32_t channel, uint32_t value)

Set RTCC capture/compare register value for a selected channel.

uint32_t

Get the combined CNT/PRECNT register content.

uint32_t

Get the RTCC counter value.

void
sl_hal_rtcc_set_counter(uint32_t value)

Set the RTCC CNT counter.

void

Clear one or more pending RTCC interrupts.

void

Disable one or more RTCC interrupts.

void

Enable one or more RTCC interrupts.

uint32_t

Get pending RTCC interrupt flags.

uint32_t

Get enabled and pending RTCC interrupt flags.

void

Set one or more pending RTCC interrupts from SW.

void

Lock RTCC registers.

void

Unlock RTCC registers.

uint32_t

Get the RTCC pre-counter value.

void
sl_hal_rtcc_set_pre_counter(uint32_t pre_counter_value)

Set the RTCC pre-counter value.

uint32_t

Get the STATUS register value.

Macros#

#define
SL_HAL_RTCC_CH_VALID (ch)

Validation of valid RTCC channel for assert statements.

#define
SL_HAL_RTCC_INIT_DEFAULT undefined

Default RTCC initialization structure.

#define
SL_HAL_RTCC_CH_INIT_COMPARE_DEFAULT undefined

Default RTCC channel output compare initialization structure.

#define
SL_HAL_RTCC_CH_INIT_CAPTURE_DEFAULT undefined

Default RTCC channel input capture initialization structure.

Enumeration Documentation#

sl_hal_rtcc_counter_prescaler_t#

sl_hal_rtcc_counter_prescaler_t

Counter prescaler selection.

Enumerator
SL_HAL_RTCC_COUNTER_PRESCALER_1

Divide clock by 1.

SL_HAL_RTCC_COUNTER_PRESCALER_2

Divide clock by 2.

SL_HAL_RTCC_COUNTER_PRESCALER_4

Divide clock by 4.

SL_HAL_RTCC_COUNTER_PRESCALER_8

Divide clock by 8.

SL_HAL_RTCC_COUNTER_PRESCALER_16

Divide clock by 16.

SL_HAL_RTCC_COUNTER_PRESCALER_32

Divide clock by 32.

SL_HAL_RTCC_COUNTER_PRESCALER_64

Divide clock by 64.

SL_HAL_RTCC_COUNTER_PRESCALER_128

Divide clock by 128.

SL_HAL_RTCC_COUNTER_PRESCALER_256

Divide clock by 256.

SL_HAL_RTCC_COUNTER_PRESCALER_512

Divide clock by 512.

SL_HAL_RTCC_COUNTER_PRESCALER_1024

Divide clock by 1024.

SL_HAL_RTCC_COUNTER_PRESCALER_2048

Divide clock by 2048.

SL_HAL_RTCC_COUNTER_PRESCALER_4096

Divide clock by 4096.

SL_HAL_RTCC_COUNTER_PRESCALER_8192

Divide clock by 8192.

SL_HAL_RTCC_COUNTER_PRESCALER_16384

Divide clock by 16384.

SL_HAL_RTCC_COUNTER_PRESCALER_32768

Divide clock by 32768.


sl_hal_rtcc_prescaler_mode_t#

sl_hal_rtcc_prescaler_mode_t

Prescaler mode of the RTCC counter.

Enumerator
SL_HAL_RTCC_COUNTER_TICK_PRESCALER

CNT register ticks according to prescaler value.

SL_HAL_RTCC_COUNTER_TICK_CCV_0_MATCH

CNT register ticks when PRECNT matches the 15 least significant bits of ch.


sl_hal_rtcc_capture_compare_channel_mode_t#

sl_hal_rtcc_capture_compare_channel_mode_t

Capture/Compare channel mode.

Enumerator
SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_OFF

Capture/Compare channel turned off.

SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_CAPTURE

Capture mode.

SL_HAL_RTCC_CAPTURE_COMPARE_CHANNEL_MODE_COMPARE

Compare mode.


sl_hal_rtcc_compare_match_out_action_t#

sl_hal_rtcc_compare_match_out_action_t

Compare match output action mode.

Enumerator
SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_PULSE

Generate a pulse.

SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_TOGGLE

Toggle output.

SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_CLEAR

Clear output.

SL_HAL_RTCC_COMPARE_MATCH_OUT_ACTION_SET

Set output.


sl_hal_rtcc_in_edge_select_t#

sl_hal_rtcc_in_edge_select_t

Input edge select.

Enumerator
SL_HAL_RTCC_IN_EDGE_RISING

Rising edges detected.

SL_HAL_RTCC_IN_EDGE_FALLING

Falling edges detected.

SL_HAL_RTCC_IN_EDGE_BOTH

Both edges detected.

SL_HAL_RTCC_IN_EDGE_NONE

No edge detection, signal is left as is.


sl_hal_rtcc_compare_base_t#

sl_hal_rtcc_compare_base_t

Capture/Compare channel compare mode.

Enumerator
SL_HAL_RTCC_COMPBASE_COUNTER_MODE

CCVx is compared with the CNT register.

SL_HAL_RTCC_COMPARE_PRE_COUNTER_MODE

CCVx is compared with a CNT[16:0] and PRECNT[14:0].


Typedef Documentation#

sl_hal_rtcc_prs_select_t#

typedef uint8_t sl_hal_rtcc_prs_select_t

PRS channel number.

This type is used when configuring input capture mode on a RTCC channel.


Function Documentation#

sl_hal_rtcc_init#

void sl_hal_rtcc_init (const sl_hal_rtcc_init_t * init)

Initialize RTCC.

Parameters
TypeDirectionArgument NameDescription
const sl_hal_rtcc_init_t *[in]init

A pointer to the RTCC initialization structure.

Note that the compare values must be set separately with sl_hal_rtcc_set_channel_compare_value(), which should probably be done prior to the use of this function if configuring the RTCC to start when initialization is completed.


sl_hal_rtcc_channel_init#

void sl_hal_rtcc_channel_init (uint32_t channel, const sl_hal_rtcc_cc_init_t * init)

Configure the selected capture/compare channel of the RTCC.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

A channel selector.

const sl_hal_rtcc_cc_init_t *[in]init

A pointer to the RTCC channel initialization structure.

Use this function to configure an RTCC channel. Select capture/compare mode, match output action, overflow output action, and PRS input configuration. See the configuration structure sl_hal_rtcc_cc_init_t for more details.


sl_hal_rtcc_reset#

void sl_hal_rtcc_reset (void )

Restore RTCC to its reset state.

Parameters
TypeDirectionArgument NameDescription
voidN/A

sl_hal_rtcc_wait_sync#

void sl_hal_rtcc_wait_sync (void )

Wait for the RTCC to complete all synchronization of register changes and commands.

Parameters
TypeDirectionArgument NameDescription
voidN/A

sl_hal_rtcc_enable#

void sl_hal_rtcc_enable (void )

Enable RTCC counting.

Parameters
TypeDirectionArgument NameDescription
voidN/A

sl_hal_rtcc_disable#

void sl_hal_rtcc_disable (void )

Disable RTCC counting.

Parameters
TypeDirectionArgument NameDescription
voidN/A

sl_hal_rtcc_start#

void sl_hal_rtcc_start (void )

Start the RTCC counter.

Parameters
TypeDirectionArgument NameDescription
voidN/A

This function will send a start command to the RTCC peripheral. The RTCC peripheral will use some LF clock ticks before the command is executed. The sl_hal_rtcc_wait_sync() function can be used to wait for the start command to be executed.

Note

  • This function requires the RTCC to be enabled.


sl_hal_rtcc_stop#

void sl_hal_rtcc_stop (void )

Stop the RTCC counter.

Parameters
TypeDirectionArgument NameDescription
voidN/A

This function will send a stop command to the RTCC peripheral. The RTCC peripheral will use some LF clock ticks before the command is executed. The sl_hal_rtcc_wait_sync() function can be used to wait for the stop command to be executed.

Note

  • This function requires the RTCC to be enabled.


sl_hal_rtcc_get_channel_compare_value#

uint32_t sl_hal_rtcc_get_channel_compare_value (uint32_t channel)

Get the RTCC compare register value for a selected channel.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

Channel selector.

Returns

  • Compare register value.


sl_hal_rtcc_set_channel_compare_value#

void sl_hal_rtcc_set_channel_compare_value (uint32_t channel, uint32_t value)

Set the RTCC compare register value for a selected channel.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

Channel selector.

uint32_t[in]value

Compare register value


sl_hal_rtcc_get_channel_capture_value#

uint32_t sl_hal_rtcc_get_channel_capture_value (uint32_t channel)

Get the RTCC input capture register value for a selected channel.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

Channel selector.

Returns

  • Capture register value.


sl_hal_rtcc_get_channel_ccv#

uint32_t sl_hal_rtcc_get_channel_ccv (uint32_t channel)

Get the RTCC capture/compare register value for a selected channel.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

Channel selector.

For parts with separate capture compare value registers, this function returns the compare value.

Returns

  • Capture/compare register value.


sl_hal_rtcc_set_channel_ccv#

void sl_hal_rtcc_set_channel_ccv (uint32_t channel, uint32_t value)

Set RTCC capture/compare register value for a selected channel.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]channel

Channel selector.

uint32_t[in]value

Capture/compare register value

For parts with separate capture compare value registers, this function sets the compare value.


sl_hal_rtcc_get_combined_counter#

uint32_t sl_hal_rtcc_get_combined_counter (void )

Get the combined CNT/PRECNT register content.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • CNT/PRECNT register value.


sl_hal_rtcc_get_counter#

uint32_t sl_hal_rtcc_get_counter (void )

Get the RTCC counter value.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Current RTCC counter value.


sl_hal_rtcc_set_counter#

void sl_hal_rtcc_set_counter (uint32_t value)

Set the RTCC CNT counter.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]value

CNT value.


sl_hal_rtcc_clear_interrupts#

void sl_hal_rtcc_clear_interrupts (uint32_t flags)

Clear one or more pending RTCC interrupts.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]flags

RTCC interrupt sources to clear. Use a set of interrupt flags OR-ed together to clear multiple interrupt sources.


sl_hal_rtcc_disable_interrupts#

void sl_hal_rtcc_disable_interrupts (uint32_t flags)

Disable one or more RTCC interrupts.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]flags

RTCC interrupt sources to disable. Use a set of interrupt flags OR-ed together to disable multiple interrupt.


sl_hal_rtcc_enable_interrupts#

void sl_hal_rtcc_enable_interrupts (uint32_t flags)

Enable one or more RTCC interrupts.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]flags

RTCC interrupt sources to enable. Use a set of interrupt flags OR-ed together to set multiple interrupt.

Note

  • Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using sl_hal_rtcc_clear_interrupts() prior to enabling the interrupt.


sl_hal_rtcc_get_pending_interrupts#

uint32_t sl_hal_rtcc_get_pending_interrupts (void )

Get pending RTCC interrupt flags.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Pending RTCC interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.

Note

  • Event bits are not cleared by using this function.


sl_hal_rtcc_get_enabled_interrupts#

uint32_t sl_hal_rtcc_get_enabled_interrupts (void )

Get enabled and pending RTCC interrupt flags.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Pending and enabled RTCC interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.

Useful for handling more interrupt sources in the same interrupt handler.


sl_hal_rtcc_set_interrupts#

void sl_hal_rtcc_set_interrupts (uint32_t flags)

Set one or more pending RTCC interrupts from SW.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]flags

RTCC interrupt sources to set to pending. Use a set of interrupt flags (RTCC_IFS_nnn).


sl_hal_rtcc_lock#

void sl_hal_rtcc_lock (void )

Lock RTCC registers.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Note

  • When RTCC registers are locked, RTCC_CTRL, RTCC_PRECNT, RTCC_CNT, RTCC_TIME, RTCC_DATE, RTCC_IEN, RTCC_POWERDOWN and RTCC_CCx_XXX registers cannot be written to.


sl_hal_rtcc_unlock#

void sl_hal_rtcc_unlock (void )

Unlock RTCC registers.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Note

  • When RTCC registers are locked, RTCC_CTRL, RTCC_PRECNT, RTCC_CNT, RTCC_TIME, RTCC_DATE, RTCC_IEN, RTCC_POWERDOWN and RTCC_CCx_XXX registers cannot be written to.


sl_hal_rtcc_get_pre_counter#

uint32_t sl_hal_rtcc_get_pre_counter (void )

Get the RTCC pre-counter value.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Current RTCC pre-counter value.


sl_hal_rtcc_set_pre_counter#

void sl_hal_rtcc_set_pre_counter (uint32_t pre_counter_value)

Set the RTCC pre-counter value.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]pre_counter_value

RTCC pre-counter value to be set.


sl_hal_rtcc_get_status#

uint32_t sl_hal_rtcc_get_status (void )

Get the STATUS register value.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Current STATUS register value.