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
()¶