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¶
-
-
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 interruptarg
: 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.