|
38 | 38 | #include "hal/timer_hal.h"
|
39 | 39 | #include "hal/timer_ll.h"
|
40 | 40 | #include "soc/timer_periph.h"
|
| 41 | +#include "esp_private/esp_clk_tree_common.h" |
| 42 | +#include "esp_private/periph_ctrl.h" |
41 | 43 | #include "machine_timer.h"
|
42 | 44 |
|
43 | 45 | #define TIMER_DIVIDER 8
|
@@ -163,8 +165,18 @@ static void machine_timer_isr_handler(machine_timer_obj_t *self) {
|
163 | 165 | void machine_timer_enable(machine_timer_obj_t *self) {
|
164 | 166 | // Initialise the timer.
|
165 | 167 | timer_hal_init(&self->hal_context, self->group, self->index);
|
| 168 | + |
| 169 | + PERIPH_RCC_ACQUIRE_ATOMIC(timer_group_periph_signals.groups[self->index].module, ref_count) { |
| 170 | + if (ref_count == 0) { |
| 171 | + timer_ll_enable_bus_clock(self->index, true); |
| 172 | + timer_ll_reset_register(self->index); |
| 173 | + } |
| 174 | + } |
| 175 | + |
166 | 176 | timer_ll_enable_counter(self->hal_context.dev, self->index, false);
|
| 177 | + esp_clk_tree_enable_src(GPTIMER_CLK_SRC_DEFAULT, true); |
167 | 178 | timer_ll_set_clock_source(self->hal_context.dev, self->index, GPTIMER_CLK_SRC_DEFAULT);
|
| 179 | + timer_ll_enable_clock(self->hal_context.dev, self->index, true); |
168 | 180 | timer_ll_set_clock_prescale(self->hal_context.dev, self->index, TIMER_DIVIDER);
|
169 | 181 | timer_hal_set_counter_value(&self->hal_context, 0);
|
170 | 182 | timer_ll_set_count_direction(self->hal_context.dev, self->index, GPTIMER_COUNT_UP);
|
|
0 commit comments