Просмотр исходного кода

Merge branch 'bugfix/freertos_systimer_stall_when_cpu_halted' into 'master'

freertos: stall systimer while CPU is in debug mode

See merge request espressif/esp-idf!12063
Ivan Grokhotkov 5 лет назад
Родитель
Сommit
bb1f75179b

+ 1 - 0
components/freertos/port/riscv/port.c

@@ -154,6 +154,7 @@ void vPortSetupTimer(void)
     systimer_hal_init();
     systimer_hal_init();
     systimer_hal_connect_alarm_counter(SYSTIMER_ALARM_0, SYSTIMER_COUNTER_1);
     systimer_hal_connect_alarm_counter(SYSTIMER_ALARM_0, SYSTIMER_COUNTER_1);
     systimer_hal_enable_counter(SYSTIMER_COUNTER_1);
     systimer_hal_enable_counter(SYSTIMER_COUNTER_1);
+    systimer_hal_counter_can_stall_by_cpu(SYSTIMER_COUNTER_1, 0, true);
     systimer_hal_set_alarm_period(SYSTIMER_ALARM_0, 1000000UL / CONFIG_FREERTOS_HZ);
     systimer_hal_set_alarm_period(SYSTIMER_ALARM_0, 1000000UL / CONFIG_FREERTOS_HZ);
     systimer_hal_select_alarm_mode(SYSTIMER_ALARM_0, SYSTIMER_ALARM_MODE_PERIOD);
     systimer_hal_select_alarm_mode(SYSTIMER_ALARM_0, SYSTIMER_ALARM_MODE_PERIOD);
     systimer_hal_enable_alarm_int(SYSTIMER_ALARM_0);
     systimer_hal_enable_alarm_int(SYSTIMER_ALARM_0);

+ 5 - 0
components/hal/esp32c3/systimer_hal.c

@@ -121,3 +121,8 @@ void systimer_hal_connect_alarm_counter(systimer_alarm_id_t alarm_id, systimer_c
 {
 {
     systimer_ll_connect_alarm_counter(alarm_id, counter_id);
     systimer_ll_connect_alarm_counter(alarm_id, counter_id);
 }
 }
+
+void systimer_hal_counter_can_stall_by_cpu(uint32_t counter_id, uint32_t cpu_id, bool can)
+{
+    systimer_ll_counter_can_stall_by_cpu(counter_id, cpu_id, can);
+}

+ 6 - 0
components/hal/include/hal/systimer_hal.h

@@ -19,6 +19,7 @@ extern "C" {
 #endif
 #endif
 
 
 #include <stdint.h>
 #include <stdint.h>
+#include <stdbool.h>
 #include "hal/systimer_types.h"
 #include "hal/systimer_types.h"
 
 
 /**
 /**
@@ -81,6 +82,11 @@ void systimer_hal_init(void);
  */
  */
 void systimer_hal_connect_alarm_counter(systimer_alarm_id_t alarm_id, systimer_counter_id_t counter_id);
 void systimer_hal_connect_alarm_counter(systimer_alarm_id_t alarm_id, systimer_counter_id_t counter_id);
 
 
+/**
+ * @brief  set if a counter should be stalled when CPU is halted by the debugger
+ */
+void systimer_hal_counter_can_stall_by_cpu(uint32_t counter_id, uint32_t cpu_id, bool can);
+
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif