diff --git a/components/driver/include/driver/timer.h b/components/driver/include/driver/timer.h index cdd129276..c0ad7116e 100644 --- a/components/driver/include/driver/timer.h +++ b/components/driver/include/driver/timer.h @@ -30,25 +30,25 @@ extern "C" { * @brief Selects a Timer-Group out of 2 available groups */ typedef enum { - TIMER_GROUP_0 = 0, /*!hw_timer[timer_num].update = 1; - uint64_t timer_val = ((uint64_t) TG[group_num]->hw_timer[timer_num].cnt_high << 32) - | (TG[group_num]->hw_timer[timer_num].cnt_low); - uint16_t div = TG[group_num]->hw_timer[timer_num].config.divider; - *time = (double)timer_val * div / TIMER_BASE_CLK; - portEXIT_CRITICAL(&timer_spinlock[group_num]); - return ESP_OK; + uint64_t timer_val; + esp_err_t err = timer_get_counter_value(group_num, timer_num, &timer_val); + if (err == ESP_OK) { + uint16_t div = TG[group_num]->hw_timer[timer_num].config.divider; + *time = (double)timer_val * div / TIMER_BASE_CLK; + } + return err; } esp_err_t timer_set_counter_value(timer_group_t group_num, timer_idx_t timer_num, uint64_t load_val) diff --git a/components/esp32/int_wdt.c b/components/esp32/int_wdt.c index fe3ddab37..9d9bbe94c 100644 --- a/components/esp32/int_wdt.c +++ b/components/esp32/int_wdt.c @@ -28,6 +28,7 @@ #include "esp_freertos_hooks.h" #include "soc/timer_group_struct.h" #include "soc/timer_group_reg.h" +#include "driver/timer.h" #include "esp_int_wdt.h" @@ -85,7 +86,7 @@ void esp_int_wdt_init() { TIMERG1.wdt_feed=1; TIMERG1.wdt_wprotect=0; TIMERG1.int_clr_timers.wdt=1; - TIMERG1.int_ena.wdt=1; + timer_group_intr_enable(TIMER_GROUP_1, TIMG_WDT_INT_ENA_M); esp_register_freertos_tick_hook(tick_hook); ESP_INTR_DISABLE(WDT_INT_NUM); intr_matrix_set(xPortGetCoreID(), ETS_TG1_WDT_LEVEL_INTR_SOURCE, WDT_INT_NUM); @@ -97,4 +98,4 @@ void esp_int_wdt_init() { -#endif \ No newline at end of file +#endif diff --git a/components/esp32/task_wdt.c b/components/esp32/task_wdt.c index 718f7e3d2..860556b8c 100644 --- a/components/esp32/task_wdt.c +++ b/components/esp32/task_wdt.c @@ -205,7 +205,7 @@ void esp_task_wdt_init() { intr_matrix_set(xPortGetCoreID(), ETS_TG0_WDT_LEVEL_INTR_SOURCE, ETS_T0_WDT_INUM); xt_set_interrupt_handler(ETS_T0_WDT_INUM, task_wdt_isr, NULL); TIMERG0.int_clr_timers.wdt=1; - timer_group_intr_enable(TIMER_GROUP_0, BIT(2)); + timer_group_intr_enable(TIMER_GROUP_0, TIMG_WDT_INT_ENA_M); ESP_INTR_ENABLE(ETS_T0_WDT_INUM); } diff --git a/docs/api/timer.rst b/docs/api/timer.rst new file mode 100644 index 000000000..0db0a12c2 --- /dev/null +++ b/docs/api/timer.rst @@ -0,0 +1,73 @@ +TIMER +======== + +Overview +-------- + +ESP32 chip contains two hardware timer groups, each containing two general-purpose hardware timers. + +They are all 64-bit generic timers based on 16-bit prescalers and 64-bit auto-reload-capable up/down counters. + + +Application Example +------------------- + +64-bit hardware timer example: `examples/13_timer_group `_. + +API Reference +------------- + +Header Files +^^^^^^^^^^^^ + + * `components/driver/timer.h `_ + +Macros +^^^^^^ + +.. doxygendefine:: TIMER_BASE_CLK + +Type Definitions +^^^^^^^^^^^^^^^^ + + +Enumerations +^^^^^^^^^^^^ + +.. doxygenenum:: timer_group_t +.. doxygenenum:: timer_idx_t +.. doxygenenum:: timer_count_dir_t +.. doxygenenum:: timer_start_t +.. doxygenenum:: timer_alarm_t +.. doxygenenum:: timer_intr_mode_t +.. doxygenenum:: timer_autoreload_t + +Structures +^^^^^^^^^^ + +.. doxygenstruct:: timer_config_t + :members: + + +Functions +^^^^^^^^^ + +.. doxygenfunction:: timer_get_counter_value +.. doxygenfunction:: timer_get_counter_time_sec +.. doxygenfunction:: timer_set_counter_value +.. doxygenfunction:: timer_start +.. doxygenfunction:: timer_pause +.. doxygenfunction:: timer_set_counter_mode +.. doxygenfunction:: timer_set_auto_reload +.. doxygenfunction:: timer_set_divider +.. doxygenfunction:: timer_set_alarm_value +.. doxygenfunction:: timer_get_alarm_value +.. doxygenfunction:: timer_set_alarm +.. doxygenfunction:: timer_isr_register +.. doxygenfunction:: timer_init +.. doxygenfunction:: timer_get_config +.. doxygenfunction:: timer_group_intr_enable +.. doxygenfunction:: timer_group_intr_disable +.. doxygenfunction:: timer_enable_intr +.. doxygenfunction:: timer_disable_intr +