diff --git a/components/esp32/CMakeLists.txt b/components/esp32/CMakeLists.txt index c66f3958c..3f408b1ae 100644 --- a/components/esp32/CMakeLists.txt +++ b/components/esp32/CMakeLists.txt @@ -12,7 +12,6 @@ if(BOOTLOADER_BUILD) else() # Regular app build set(srcs - "brownout.c" "cache_err_int.c" "cache_sram_mmu.c" "clk.c" diff --git a/components/esp32/brownout.c b/components/esp32/brownout.c deleted file mode 100644 index 4dbfc8345..000000000 --- a/components/esp32/brownout.c +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include -#include -#include -#include "sdkconfig.h" -#include "soc/soc.h" -#include "soc/cpu.h" -#include "soc/rtc_periph.h" -#include "hal/brownout_hal.h" -#include "esp32/rom/ets_sys.h" -#include "esp_private/system_internal.h" -#include "driver/rtc_cntl.h" -#include "freertos/FreeRTOS.h" - -#ifdef CONFIG_ESP32_BROWNOUT_DET_LVL -#define BROWNOUT_DET_LVL CONFIG_ESP32_BROWNOUT_DET_LVL -#else -#define BROWNOUT_DET_LVL 0 -#endif //CONFIG_ESP32_BROWNOUT_DET_LVL - -static void rtc_brownout_isr_handler(void *arg) -{ - /* Normally RTC ISR clears the interrupt flag after the application-supplied - * handler returns. Since restart is called here, the flag needs to be - * cleared manually. - */ - REG_WRITE(RTC_CNTL_INT_CLR_REG, RTC_CNTL_BROWN_OUT_INT_CLR); - /* Stall the other CPU to make sure the code running there doesn't use UART - * at the same time as the following ets_printf. - */ - esp_cpu_stall(!xPortGetCoreID()); - esp_reset_reason_set_hint(ESP_RST_BROWNOUT); - ets_printf("\r\nBrownout detector was triggered\r\n\r\n"); - esp_restart_noos(); -} - -void esp_brownout_init(void) -{ - brownout_hal_config_t cfg = { - .threshold = BROWNOUT_DET_LVL, - .enabled = true, - .reset_enabled = false, - .flash_power_down = true, - .rf_power_down = true, - }; - - brownout_hal_config(&cfg); - - ESP_ERROR_CHECK( rtc_isr_register(rtc_brownout_isr_handler, NULL, RTC_CNTL_BROWN_OUT_INT_ENA_M) ); - - brownout_hal_intr_enable(true); -} diff --git a/components/esp32s2/CMakeLists.txt b/components/esp32s2/CMakeLists.txt index 1f5a52ed2..45b82a747 100644 --- a/components/esp32s2/CMakeLists.txt +++ b/components/esp32s2/CMakeLists.txt @@ -11,8 +11,7 @@ if(BOOTLOADER_BUILD) else() # Regular app build - set(srcs "brownout.c" - "cache_err_int.c" + set(srcs "cache_err_int.c" "clk.c" "cpu_start.c" "crosscore_int.c" diff --git a/components/esp_common/CMakeLists.txt b/components/esp_common/CMakeLists.txt index c2b658643..125400e74 100644 --- a/components/esp_common/CMakeLists.txt +++ b/components/esp_common/CMakeLists.txt @@ -6,7 +6,8 @@ if(BOOTLOADER_BUILD) set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "-Wl,--gc-sections") else() # Regular app build - set(srcs "src/dbg_stubs.c" + set(srcs "src/brownout.c" + "src/dbg_stubs.c" "src/esp_err_to_name.c" "src/esp_timer.c" "src/ets_timer_legacy.c" diff --git a/components/esp32s2/brownout.c b/components/esp_common/src/brownout.c similarity index 84% rename from components/esp32s2/brownout.c rename to components/esp_common/src/brownout.c index e4eef7cb1..57f62cefa 100644 --- a/components/esp32s2/brownout.c +++ b/components/esp_common/src/brownout.c @@ -26,11 +26,20 @@ #include "driver/rtc_cntl.h" #include "freertos/FreeRTOS.h" -#ifdef CONFIG_ESP32S2_BROWNOUT_DET_LVL +#if defined(CONFIG_ESP32_BROWNOUT_DET_LVL) +#define BROWNOUT_DET_LVL CONFIG_ESP32_BROWNOUT_DET_LVL +#elif defined(CONFIG_ESP32S2_BROWNOUT_DET_LVL) #define BROWNOUT_DET_LVL CONFIG_ESP32S2_BROWNOUT_DET_LVL #else #define BROWNOUT_DET_LVL 0 -#endif //CONFIG_ESP32S2_BROWNOUT_DET_LVL +#endif + +#ifdef SOC_BROWNOUT_RESET_SUPPORTED +#define BROWNOUT_RESET_EN true +#else +#define BROWNOUT_RESET_EN false +#endif // SOC_BROWNOUT_RESET_SUPPORTED + static void rtc_brownout_isr_handler(void *arg) { @@ -38,7 +47,7 @@ static void rtc_brownout_isr_handler(void *arg) * handler returns. Since restart is called here, the flag needs to be * cleared manually. */ - REG_WRITE(RTC_CNTL_INT_CLR_REG, RTC_CNTL_BROWN_OUT_INT_CLR); + brownout_hal_intr_clear(); /* Stall the other CPU to make sure the code running there doesn't use UART * at the same time as the following ets_printf. */ @@ -53,7 +62,7 @@ void esp_brownout_init(void) brownout_hal_config_t cfg = { .threshold = BROWNOUT_DET_LVL, .enabled = true, - .reset_enabled = false, + .reset_enabled = BROWNOUT_RESET_EN, .flash_power_down = true, .rf_power_down = true, }; diff --git a/components/soc/include/hal/brownout_hal.h b/components/soc/include/hal/brownout_hal.h index ac65506ed..97523fcc0 100644 --- a/components/soc/include/hal/brownout_hal.h +++ b/components/soc/include/hal/brownout_hal.h @@ -27,6 +27,7 @@ extern "C" { #include #include #include +#include "soc/brownout_caps.h" typedef struct { uint8_t threshold;