hw_timer: Hardware Timers

Driver for hardware timers.

Variables

USE_US_TIMER

0 (default): Use default /256 prescale for Timer2 1: Use /16 prescale

The following functions depend on Timer2: - NOW() return value, the Timer2 tick count - Software timers - System time

Software timers are driven by Timer2, which by default uses a /256 prescale providing a resolution of 3.2us and a range of 1’ 54”.

Enabling this setting increases the resolution to 200ns but reduces the maximum software timer to 7” 9.5s.

API Documentation

enum hw_timer::hw_timer_clkdiv_t

Values:

TIMER_CLKDIV_1 = 0
TIMER_CLKDIV_16 = 4
TIMER_CLKDIV_256 = 8
enum hw_timer::hw_timer_intr_type_t

Values:

TIMER_EDGE_INT = 0
TIMER_LEVEL_INT = 1
enum hw_timer::hw_timer_source_type_t

Values:

TIMER_FRC1_SOURCE = 0
TIMER_NMI_SOURCE = 1
typedef void (*hw_timer_callback_t)(void *arg)
constexpr uint32_t HW_TIMER2_CLKDIV = TIMER_CLKDIV_256
constexpr uint32_t HW_TIMER2_CLK = HW_TIMER_BASE_CLK >> HW_TIMER2_CLKDIV
void hw_timer1_attach_interrupt(hw_timer_source_type_t source_type, hw_timer_callback_t callback, void *arg)

Attach an interrupt for the timer.

Parameters
  • source_type:
  • callback: Callback function invoked via timer interrupt
  • arg: Passed to callback function

void hw_timer1_enable(hw_timer_clkdiv_t div, hw_timer_intr_type_t intr_type, bool auto_load)

Enable the timer.

Parameters
  • div:
  • intr_type:
  • auto_load:

void hw_timer1_write(uint32_t ticks)

Set the timer interval.

Parameters
  • ticks:

void hw_timer1_disable(void)

Disable the timer.

void hw_timer1_detach_interrupt(void)

Detach interrupt from the timer.

uint32_t hw_timer1_read(void)

Get timer1 count.

Return Value
  • uint32_t: Current count value, counts from initial value down to 0

uint32_t hw_timer2_read(void)

Read current timer2 value.

Return Value
  • uint32_t:

void hw_timer2_set_alarm(uint32_t ticks)

Set timer2 alarm count value.

Note
For internal use ONLY; used by software timers
Parameters
  • ticks:

void hw_timer_init(void)

Initialise hardware timers.

Note
Called by startup code

MAX_HW_TIMER1_INTERVAL

Maximum timer interval in ticks.

Note
The corresponding time interval depends on the prescaler in use:
    /1 - 0.1048s
    /16 - 1.677s
    /256 - 26.84s

MIN_HW_TIMER1_INTERVAL_US

Minimum hardware interval in microseconds.

Note
Attempting to use repetitive interrupts below this level can lead to system instabliity and lockups, due to the software overhead in servicing the interrupts.