|
|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD
|
|
|
+ * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
|
|
|
*
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
*/
|
|
|
@@ -13,6 +13,7 @@
|
|
|
#include "freertos/timers.h"
|
|
|
#include "driver/rtc_io.h"
|
|
|
#include "hal/rtc_io_hal.h"
|
|
|
+#include "soc/rtc_io_periph.h"
|
|
|
#include "soc/soc_caps.h"
|
|
|
|
|
|
static const char __attribute__((__unused__)) *RTCIO_TAG = "RTCIO";
|
|
|
@@ -21,11 +22,24 @@ extern portMUX_TYPE rtc_spinlock; //TODO: Will be placed in the appropriate posi
|
|
|
#define RTCIO_ENTER_CRITICAL() portENTER_CRITICAL(&rtc_spinlock)
|
|
|
#define RTCIO_EXIT_CRITICAL() portEXIT_CRITICAL(&rtc_spinlock)
|
|
|
|
|
|
-#if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
+bool rtc_gpio_is_valid_gpio(gpio_num_t gpio_num)
|
|
|
+{
|
|
|
+#if SOC_RTCIO_PIN_COUNT > 0
|
|
|
+ return (gpio_num < GPIO_PIN_COUNT && rtc_io_num_map[gpio_num] >= 0);
|
|
|
+#else
|
|
|
+ return false;
|
|
|
+#endif
|
|
|
+}
|
|
|
|
|
|
+#if SOC_RTCIO_PIN_COUNT > 0
|
|
|
/*---------------------------------------------------------------
|
|
|
RTC IO
|
|
|
---------------------------------------------------------------*/
|
|
|
+int rtc_io_number_get(gpio_num_t gpio_num)
|
|
|
+{
|
|
|
+ return rtc_io_num_map[gpio_num];
|
|
|
+}
|
|
|
+
|
|
|
esp_err_t rtc_gpio_init(gpio_num_t gpio_num)
|
|
|
{
|
|
|
ESP_RETURN_ON_FALSE(rtc_gpio_is_valid_gpio(gpio_num), ESP_ERR_INVALID_ARG, RTCIO_TAG, "RTCIO number error");
|
|
|
@@ -47,6 +61,7 @@ esp_err_t rtc_gpio_deinit(gpio_num_t gpio_num)
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
|
|
|
+#if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
esp_err_t rtc_gpio_set_level(gpio_num_t gpio_num, uint32_t level)
|
|
|
{
|
|
|
ESP_RETURN_ON_FALSE(rtc_gpio_is_valid_gpio(gpio_num), ESP_ERR_INVALID_ARG, RTCIO_TAG, "RTCIO number error");
|
|
|
@@ -177,34 +192,36 @@ esp_err_t rtc_gpio_hold_dis(gpio_num_t gpio_num)
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
|
|
|
-esp_err_t rtc_gpio_isolate(gpio_num_t gpio_num)
|
|
|
+esp_err_t rtc_gpio_force_hold_en_all(void)
|
|
|
{
|
|
|
- ESP_RETURN_ON_FALSE(rtc_gpio_is_valid_gpio(gpio_num), ESP_ERR_INVALID_ARG, RTCIO_TAG, "RTCIO number error");
|
|
|
RTCIO_ENTER_CRITICAL();
|
|
|
- rtcio_hal_isolate(rtc_io_number_get(gpio_num));
|
|
|
+ rtcio_hal_hold_all();
|
|
|
RTCIO_EXIT_CRITICAL();
|
|
|
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
|
|
|
-esp_err_t rtc_gpio_force_hold_en_all(void)
|
|
|
+esp_err_t rtc_gpio_force_hold_dis_all(void)
|
|
|
{
|
|
|
RTCIO_ENTER_CRITICAL();
|
|
|
- rtcio_hal_hold_all();
|
|
|
+ rtcio_hal_unhold_all();
|
|
|
RTCIO_EXIT_CRITICAL();
|
|
|
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
+#endif // SOC_RTCIO_HOLD_SUPPORTED
|
|
|
|
|
|
-esp_err_t rtc_gpio_force_hold_dis_all(void)
|
|
|
+#if SOC_RTCIO_HOLD_SUPPORTED && SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
+esp_err_t rtc_gpio_isolate(gpio_num_t gpio_num)
|
|
|
{
|
|
|
+ ESP_RETURN_ON_FALSE(rtc_gpio_is_valid_gpio(gpio_num), ESP_ERR_INVALID_ARG, RTCIO_TAG, "RTCIO number error");
|
|
|
RTCIO_ENTER_CRITICAL();
|
|
|
- rtcio_hal_unhold_all();
|
|
|
+ rtcio_hal_isolate(rtc_io_number_get(gpio_num));
|
|
|
RTCIO_EXIT_CRITICAL();
|
|
|
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
-#endif // SOC_RTCIO_HOLD_SUPPORTED
|
|
|
+#endif // SOC_RTCIO_HOLD_SUPPORTED && SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
|
|
|
#if SOC_RTCIO_WAKE_SUPPORTED
|
|
|
|
|
|
@@ -231,19 +248,4 @@ esp_err_t rtc_gpio_wakeup_disable(gpio_num_t gpio_num)
|
|
|
|
|
|
#endif // SOC_RTCIO_WAKE_SUPPORTED
|
|
|
|
|
|
-bool rtc_gpio_is_valid_gpio(gpio_num_t gpio_num)
|
|
|
-{
|
|
|
-#if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
- return (gpio_num < GPIO_PIN_COUNT && rtc_io_num_map[gpio_num] >= 0);
|
|
|
-#else
|
|
|
- return false;
|
|
|
-#endif
|
|
|
-}
|
|
|
-
|
|
|
-#if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
-int rtc_io_number_get(gpio_num_t gpio_num)
|
|
|
-{
|
|
|
- return rtc_io_num_map[gpio_num];
|
|
|
-}
|
|
|
-
|
|
|
-#endif // SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
|
|
|
+#endif // SOC_RTCIO_PIN_COUNT > 0
|