driver: fix timer driver initialization sequence to not trigger interrupt immediately

add timer_hal_reset_periph()
fix timer_init() to reset timer counter during init
This commit is contained in:
Alex Lisitsyn
2021-09-16 19:45:33 +08:00
parent dc71fa895d
commit c5d0d89508
4 changed files with 55 additions and 4 deletions

View File

@@ -282,13 +282,14 @@ esp_err_t timer_init(timer_group_t group_num, timer_idx_t timer_num, const timer
TIMER_ENTER_CRITICAL(&timer_spinlock[group_num]);
timer_hal_init(&(p_timer_obj[group_num][timer_num]->hal), group_num, timer_num);
timer_hal_intr_disable(&(p_timer_obj[group_num][timer_num]->hal));
timer_hal_reset_periph(&(p_timer_obj[group_num][timer_num]->hal));
timer_hal_clear_intr_status(&(p_timer_obj[group_num][timer_num]->hal));
timer_hal_set_auto_reload(&(p_timer_obj[group_num][timer_num]->hal), config->auto_reload);
timer_hal_set_divider(&(p_timer_obj[group_num][timer_num]->hal), config->divider);
timer_hal_set_counter_increase(&(p_timer_obj[group_num][timer_num]->hal), config->counter_dir);
timer_hal_set_alarm_enable(&(p_timer_obj[group_num][timer_num]->hal), config->alarm_en);
timer_hal_set_level_int_enable(&(p_timer_obj[group_num][timer_num]->hal), true);
// Disable level interrupt by default
timer_hal_set_level_int_enable(&(p_timer_obj[group_num][timer_num]->hal), false);
if (config->intr_type != TIMER_INTR_LEVEL) {
ESP_LOGW(TIMER_TAG, "only support Level Interrupt, switch to Level Interrupt instead");
}