Classes | |
struct | hw_timer_private_t |
Macros | |
#define | HW_TIMER1_GROUP 0 |
#define | HW_TIMER1_INDEX 0 |
#define | MAX_HW_TIMER1_INTERVAL 0x7fffffff |
Maximum timer interval in ticks. More... | |
#define | MIN_HW_TIMER1_INTERVAL_US 50U |
Minimum hardware interval in microseconds. More... | |
#define | NOW() hw_timer2_read() |
#define | MAX_HW_TIMER1_INTERVAL 0x7fffff |
Maximum timer interval in ticks. More... | |
#define | MIN_HW_TIMER1_INTERVAL_US 50U |
Minimum hardware interval in microseconds. More... | |
#define | HW_TIMER2_CLKDIV TIMER_CLKDIV_256 |
#define | HW_TIMER2_CLK (HW_TIMER_BASE_CLK >> HW_TIMER2_CLKDIV) |
#define | MAX_HW_TIMER1_INTERVAL 0x7fffffffU |
Maximum timer interval in ticks. More... | |
#define | MIN_HW_TIMER1_INTERVAL_US 50U |
Minimum hardware interval in microseconds. More... | |
#define | HW_TIMER2_CLK HW_TIMER_BASE_CLK |
Typedefs | |
typedef void(* | hw_timer_callback_t) (void *arg) |
typedef void(* | hw_timer_callback_t) (void *arg) |
typedef void(* | hw_timer_callback_t) (void *arg) |
Functions | |
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. More... | |
void | hw_timer1_enable (hw_timer_clkdiv_t div, hw_timer_intr_type_t intr_type, bool auto_load) |
Enable the timer. More... | |
void | hw_timer1_write (uint32_t ticks) |
Set the timer interval. More... | |
void | hw_timer1_disable (void) |
Disable the timer. More... | |
void | hw_timer1_detach_interrupt (void) |
Detach interrupt from the timer. More... | |
uint32_t | hw_timer1_read (void) |
Get timer1 count. More... | |
static uint32_t | hw_timer2_read (void) |
Read current timer2 value. More... | |
void | hw_timer_init (void) |
Initialise hardware timers. More... | |
void | hw_timer2_set_alarm (uint32_t ticks) |
Set timer2 alarm count value. More... | |
uint32_t | hw_timer_ticks () |
Fetch 32-bit microsecond count. More... | |
Variables | |
struct hw_timer_private_t | hw_timer_private |
Detailed Description
- Note
- Timers are 64-bit but for compatibility limit to 31 bits
Macro Definition Documentation
◆ HW_TIMER1_GROUP
#define HW_TIMER1_GROUP 0 |
◆ HW_TIMER1_INDEX
#define HW_TIMER1_INDEX 0 |
◆ HW_TIMER2_CLK [1/2]
#define HW_TIMER2_CLK (HW_TIMER_BASE_CLK >> HW_TIMER2_CLKDIV) |
◆ HW_TIMER2_CLK [2/2]
#define HW_TIMER2_CLK HW_TIMER_BASE_CLK |
◆ HW_TIMER2_CLKDIV
#define HW_TIMER2_CLKDIV TIMER_CLKDIV_256 |
◆ MAX_HW_TIMER1_INTERVAL [1/3]
#define MAX_HW_TIMER1_INTERVAL 0x7fffffff |
Maximum timer interval in ticks.
- Note
- The corresponding time interval depends on the prescaler in use:
/1 - 26.84s /16 - 429.50s /256 - 6871.95s
ESP32 supports a wide range of prescalers and uses 54-bit counter value. Limiting the range 31 bits avoids issues with overflows and moving to 64-bit calculations.
◆ MAX_HW_TIMER1_INTERVAL [2/3]
#define MAX_HW_TIMER1_INTERVAL 0x7fffff |
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
◆ MAX_HW_TIMER1_INTERVAL [3/3]
#define MAX_HW_TIMER1_INTERVAL 0x7fffffffU |
Maximum timer interval in ticks.
◆ MIN_HW_TIMER1_INTERVAL_US [1/3]
#define MIN_HW_TIMER1_INTERVAL_US 50U |
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.
◆ MIN_HW_TIMER1_INTERVAL_US [2/3]
#define MIN_HW_TIMER1_INTERVAL_US 50U |
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.
◆ MIN_HW_TIMER1_INTERVAL_US [3/3]
#define MIN_HW_TIMER1_INTERVAL_US 50U |
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
#define NOW | ( | ) | hw_timer2_read() |
Typedef Documentation
◆ hw_timer_callback_t [1/3]
typedef void(* hw_timer_callback_t) (void *arg) |
◆ hw_timer_callback_t [2/3]
typedef void(* hw_timer_callback_t) (void *arg) |
◆ hw_timer_callback_t [3/3]
typedef void(* hw_timer_callback_t) (void *arg) |
Enumeration Type Documentation
◆ hw_timer_clkdiv_t [1/3]
enum hw_timer_clkdiv_t |
◆ hw_timer_clkdiv_t [2/3]
enum hw_timer_clkdiv_t |
◆ hw_timer_clkdiv_t [3/3]
enum hw_timer_clkdiv_t |
◆ hw_timer_intr_type_t [1/3]
enum hw_timer_intr_type_t |
◆ hw_timer_intr_type_t [2/3]
enum hw_timer_intr_type_t |
◆ hw_timer_intr_type_t [3/3]
enum hw_timer_intr_type_t |
◆ hw_timer_source_type_t [1/3]
◆ hw_timer_source_type_t [2/3]
◆ hw_timer_source_type_t [3/3]
Function Documentation
◆ hw_timer1_attach_interrupt()
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 Ignored, uses APB clock source callback Callback function invoked via timer interrupt arg Passed to callback function source_type callback Callback function invoked via timer interrupt arg Passed to callback function
◆ hw_timer1_detach_interrupt()
void hw_timer1_detach_interrupt | ( | void | ) |
Detach interrupt from the timer.
◆ hw_timer1_disable()
void hw_timer1_disable | ( | void | ) |
Disable the timer.
◆ hw_timer1_enable()
|
inline |
Enable the timer.
- Parameters
-
div intr_type Ignored, always level-triggered auto_load div intr_type auto_load true for repeating timer, false for one-shot
Note: With one-shot timer application callback must stop the timer when it is no longer required. This is to reduce callback latency. If this is not done, timer will trigger again when timer counter wraps around to 0. For /16 divisor this is only 1.7s.
- Parameters
-
div intr_type auto_load
◆ hw_timer1_read()
uint32_t hw_timer1_read | ( | void | ) |
Get timer1 count.
- Return values
-
uint32_t Current count value, counts from initial value down to 0
◆ hw_timer1_write()
void hw_timer1_write | ( | uint32_t | ticks | ) |
Set the timer interval.
Set the timer interval and arm.
- Parameters
-
ticks
◆ hw_timer2_read()
|
static |
Read current timer2 value.
- Return values
-
uint32_t
◆ hw_timer2_set_alarm()
void hw_timer2_set_alarm | ( | uint32_t | ticks | ) |
Set timer2 alarm count value.
- Parameters
-
ticks
- Note
- For internal use ONLY; used by software timers
◆ hw_timer_init()
void hw_timer_init | ( | void | ) |
Initialise hardware timers.
- Note
- Called by startup code
◆ hw_timer_ticks()
uint32_t hw_timer_ticks | ( | ) |
Fetch 32-bit microsecond count.
All timers reference from a single 64-bit counter. We use only the lower 32 bits here as it provides lowest latency and compatibility with existing API.
Variable Documentation
◆ hw_timer_private
|
extern |