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
-
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
-
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
-
TIMER_FRC1_SOURCE= 0
-
TIMER_NMI_SOURCE= 1
-
-
enum
hw_timer::hw_timer_clkdiv_t Values:
-
TIMER_CLKDIV_1= 0
-
TIMER_CLKDIV_16= 4
-
TIMER_CLKDIV_256= 8
-
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
-
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
-
TIMER_FRC1_SOURCE= 0
-
TIMER_NMI_SOURCE= 1
-
-
typedef void (*
hw_timer_callback_t)(void *arg)
-
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
-
constexpr uint32_t
HW_TIMER2_CLKDIV= TIMER_CLKDIV_1
-
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.
-
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.
-
NOW()¶