Jelajahi Sumber

dport access: introduce pause/resume instead of deinit

Ivan Grokhotkov 8 tahun lalu
induk
melakukan
65b046f17f

+ 12 - 1
components/esp32/dport_access.c

@@ -184,7 +184,7 @@ void esp_dport_access_int_init(void)
     assert(res == pdTRUE);
 }
 
-void esp_dport_access_int_deinit(void)
+void esp_dport_access_int_pause(void)
 {
     portENTER_CRITICAL_ISR(&g_dport_mux);
     dport_core_state[0] = DPORT_CORE_STATE_IDLE;
@@ -193,3 +193,14 @@ void esp_dport_access_int_deinit(void)
 #endif
     portEXIT_CRITICAL_ISR(&g_dport_mux);
 }
+
+void esp_dport_access_int_resume(void)
+{
+    portENTER_CRITICAL_ISR(&g_dport_mux);
+    dport_core_state[0] = DPORT_CORE_STATE_RUNNING;
+#ifndef CONFIG_FREERTOS_UNICORE
+    dport_core_state[1] = DPORT_CORE_STATE_RUNNING;
+#endif
+    portEXIT_CRITICAL_ISR(&g_dport_mux);
+}
+

+ 2 - 1
components/esp32/include/esp_dport_access.h

@@ -24,7 +24,8 @@ extern "C" {
 void esp_dport_access_stall_other_cpu_start(void);
 void esp_dport_access_stall_other_cpu_end(void);
 void esp_dport_access_int_init(void);
-void esp_dport_access_int_deinit(void);
+void esp_dport_access_int_pause(void);
+void esp_dport_access_int_resume(void);
 
 #if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !defined(ESP_PLATFORM)
 #define DPORT_STALL_OTHER_CPU_START()

+ 2 - 2
components/esp32/panic.c

@@ -211,7 +211,7 @@ void panicHandler(XtExcFrame *frame)
         return;
     }
     haltOtherCore();
-    esp_dport_access_int_deinit();
+    esp_dport_access_int_pause();
     panicPutStr("Guru Meditation Error: Core ");
     panicPutDec(core_id);
     panicPutStr(" panic'ed (");
@@ -264,7 +264,7 @@ void panicHandler(XtExcFrame *frame)
 void xt_unhandled_exception(XtExcFrame *frame)
 {
     haltOtherCore();
-    esp_dport_access_int_deinit();
+    esp_dport_access_int_pause();
     if (!abort_called) {
         panicPutStr("Guru Meditation Error of type ");
         int exccause = frame->exccause;

+ 1 - 1
components/esp32/system_api.c

@@ -270,7 +270,7 @@ void IRAM_ATTR esp_restart_noos()
     esp_cpu_stall(other_core_id);
 
     // other core is now stalled, can access DPORT registers directly
-    esp_dport_access_int_deinit();
+    esp_dport_access_int_pause();
 
     // We need to disable TG0/TG1 watchdogs
     // First enable RTC watchdog for 1 second