Parcourir la source

Merge branch 'bugfix/timer_example_crashed_not_calling_timer_group_set_alarm_value_in_isr_v4.2' into 'release/v4.2'

driver/timer: fixed auto reload problem in default isr callback  (backport to 4.2)

See merge request espressif/esp-idf!13530
morris il y a 4 ans
Parent
commit
49d1dc0fd3
1 fichiers modifiés avec 6 ajouts et 2 suppressions
  1. 6 2
      components/driver/timer.c

+ 6 - 2
components/driver/timer.c

@@ -216,8 +216,12 @@ static void IRAM_ATTR timer_isr_default(void *arg)
             is_awoken = timer_obj->timer_isr_fun.fn(timer_obj->timer_isr_fun.args);
             //Clear intrrupt status
             timer_hal_clear_intr_status(&(timer_obj->hal));
-            //After the alarm has been triggered, we need enable it again, so it is triggered the next time.
-            timer_hal_set_alarm_enable(&(timer_obj->hal), TIMER_ALARM_EN);
+            //If the timer is set to auto reload, we need enable it again, so it is triggered the next time.
+            if (timer_hal_get_auto_reload(&timer_obj->hal)) {
+                timer_hal_set_alarm_enable(&(timer_obj->hal), TIMER_ALARM_EN);
+            } else {
+                timer_hal_set_alarm_enable(&(timer_obj->hal), TIMER_ALARM_DIS);
+            }
         }
     }
     TIMER_EXIT_CRITICAL(&timer_spinlock[timer_obj->timer_isr_fun.isr_timer_group]);