|
|
@@ -18,6 +18,7 @@
|
|
|
#include "soc/gpio_periph.h"
|
|
|
#include "soc/rtc_cntl_reg.h"
|
|
|
#include "hal/gpio_types.h"
|
|
|
+#include "hal/assert.h"
|
|
|
#include "stdlib.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
@@ -37,7 +38,7 @@ extern "C" {
|
|
|
*/
|
|
|
static inline void gpio_ll_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ REG_SET_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PU);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -48,7 +49,7 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ REG_CLR_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PU);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -59,7 +60,7 @@ static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ REG_SET_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PD);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -70,7 +71,7 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ REG_CLR_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PD);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -82,7 +83,7 @@ static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_set_intr_type(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_int_type_t intr_type)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].int_type = intr_type;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -94,7 +95,7 @@ static inline void gpio_ll_set_intr_type(gpio_dev_t *hw, gpio_num_t gpio_num, gp
|
|
|
*/
|
|
|
static inline void gpio_ll_get_intr_status(gpio_dev_t *hw, uint32_t core_id, uint32_t *status)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ *status = hw->pcpu_int.procpu_int;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -106,7 +107,7 @@ static inline void gpio_ll_get_intr_status(gpio_dev_t *hw, uint32_t core_id, uin
|
|
|
*/
|
|
|
static inline void gpio_ll_get_intr_status_high(gpio_dev_t *hw, uint32_t core_id, uint32_t *status)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ *status = 0; // Less than 32 GPIOs in ESP8684
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -117,7 +118,7 @@ static inline void gpio_ll_get_intr_status_high(gpio_dev_t *hw, uint32_t core_id
|
|
|
*/
|
|
|
static inline void gpio_ll_clear_intr_status(gpio_dev_t *hw, uint32_t mask)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->status_w1tc.status_w1tc = mask;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -128,7 +129,7 @@ static inline void gpio_ll_clear_intr_status(gpio_dev_t *hw, uint32_t mask)
|
|
|
*/
|
|
|
static inline void gpio_ll_clear_intr_status_high(gpio_dev_t *hw, uint32_t mask)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ // Less than 32 GPIOs in ESP8684. Do nothing.
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -140,7 +141,8 @@ static inline void gpio_ll_clear_intr_status_high(gpio_dev_t *hw, uint32_t mask)
|
|
|
*/
|
|
|
static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ HAL_ASSERT(core_id == 0 && "target SoC only has a single core");
|
|
|
+ GPIO.pin[gpio_num].int_ena = GPIO_LL_PRO_CPU_INTR_ENA; //enable pro cpu intr
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -151,7 +153,7 @@ static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id,
|
|
|
*/
|
|
|
static inline void gpio_ll_intr_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].int_ena = 0; //disable GPIO intr
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -162,7 +164,7 @@ static inline void gpio_ll_intr_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -173,7 +175,7 @@ static inline void gpio_ll_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_input_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -184,7 +186,10 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->enable_w1tc.enable_w1tc = (0x1 << gpio_num);
|
|
|
+ // Ensure no other output signal is routed via GPIO matrix to this pin
|
|
|
+ REG_WRITE(GPIO_FUNC0_OUT_SEL_CFG_REG + (gpio_num * 4),
|
|
|
+ SIG_GPIO_OUT_IDX);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -195,7 +200,7 @@ static inline void gpio_ll_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->enable_w1ts.enable_w1ts = (0x1 << gpio_num);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -206,7 +211,7 @@ static inline void gpio_ll_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_od_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].pad_driver = 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -217,7 +222,7 @@ static inline void gpio_ll_od_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_od_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].pad_driver = 1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -229,7 +234,11 @@ static inline void gpio_ll_od_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_set_level(gpio_dev_t *hw, gpio_num_t gpio_num, uint32_t level)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ if (level) {
|
|
|
+ hw->out_w1ts.out_w1ts = (1 << gpio_num);
|
|
|
+ } else {
|
|
|
+ hw->out_w1tc.out_w1tc = (1 << gpio_num);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -246,7 +255,7 @@ static inline void gpio_ll_set_level(gpio_dev_t *hw, gpio_num_t gpio_num, uint32
|
|
|
*/
|
|
|
static inline int gpio_ll_get_level(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ return (hw->in.in_data_next >> gpio_num) & 0x1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -258,7 +267,8 @@ static inline int gpio_ll_get_level(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_int_type_t intr_type)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].int_type = intr_type;
|
|
|
+ hw->pin[gpio_num].wakeup_enable = 0x1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -269,7 +279,7 @@ static inline void gpio_ll_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num, gp
|
|
|
*/
|
|
|
static inline void gpio_ll_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->pin[gpio_num].wakeup_enable = 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -281,7 +291,7 @@ static inline void gpio_ll_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_set_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_drive_cap_t strength)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ SET_PERI_REG_BITS(GPIO_PIN_MUX_REG[gpio_num], FUN_DRV_V, strength, FUN_DRV_S);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -293,7 +303,7 @@ static inline void gpio_ll_set_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_
|
|
|
*/
|
|
|
static inline void gpio_ll_get_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_drive_cap_t *strength)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ *strength = (gpio_drive_cap_t)GET_PERI_REG_BITS2(GPIO_PIN_MUX_REG[gpio_num], FUN_DRV_V, FUN_DRV_S);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -303,7 +313,8 @@ static inline void gpio_ll_get_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_
|
|
|
*/
|
|
|
static inline void gpio_ll_deep_sleep_hold_en(gpio_dev_t *hw)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_FORCE_UNHOLD);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_AUTOHOLD_EN_M);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -313,7 +324,7 @@ static inline void gpio_ll_deep_sleep_hold_en(gpio_dev_t *hw)
|
|
|
*/
|
|
|
static inline void gpio_ll_deep_sleep_hold_dis(gpio_dev_t *hw)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_CLR_DG_PAD_AUTOHOLD);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -324,7 +335,11 @@ static inline void gpio_ll_deep_sleep_hold_dis(gpio_dev_t *hw)
|
|
|
*/
|
|
|
static inline void gpio_ll_hold_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ if (gpio_num <= GPIO_NUM_5) {
|
|
|
+ REG_SET_BIT(RTC_CNTL_PAD_HOLD_REG, BIT(gpio_num));
|
|
|
+ } else {
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_PAD_HOLD_REG, GPIO_HOLD_MASK[gpio_num]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -335,7 +350,11 @@ static inline void gpio_ll_hold_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_hold_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ if (gpio_num <= GPIO_NUM_5) {
|
|
|
+ REG_CLR_BIT(RTC_CNTL_PAD_HOLD_REG, BIT(gpio_num));
|
|
|
+ } else {
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PAD_HOLD_REG, GPIO_HOLD_MASK[gpio_num]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -347,7 +366,8 @@ static inline void gpio_ll_hold_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t signal_idx)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->func_in_sel_cfg[signal_idx].sig_in_sel = 0;
|
|
|
+ PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -358,7 +378,7 @@ static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t sign
|
|
|
*/
|
|
|
static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_FUNC_SELECT(pin_name, func);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -372,17 +392,24 @@ static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func)
|
|
|
*/
|
|
|
static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, uint32_t oen_inv)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ hw->func_out_sel_cfg[gpio_num].oen_sel = 0;
|
|
|
+ hw->func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv;
|
|
|
+ gpio_ll_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func);
|
|
|
}
|
|
|
|
|
|
static inline void gpio_ll_force_hold_all(gpio_dev_t *hw)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_FORCE_UNHOLD);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_FORCE_HOLD);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_PWC_REG, RTC_CNTL_PAD_FORCE_HOLD_M);
|
|
|
}
|
|
|
|
|
|
static inline void gpio_ll_force_unhold_all(void)
|
|
|
{
|
|
|
- // abort();// IDF-4019
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_FORCE_HOLD);
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_PWC_REG, RTC_CNTL_PAD_FORCE_HOLD_M);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_DG_PAD_FORCE_UNHOLD);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_DIG_ISO_REG, RTC_CNTL_CLR_DG_PAD_AUTOHOLD);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -393,7 +420,7 @@ static inline void gpio_ll_force_unhold_all(void)
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_sel_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_SEL_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -404,7 +431,7 @@ static inline void gpio_ll_sleep_sel_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_SEL_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -415,7 +442,7 @@ static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_PULLUP_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -426,7 +453,7 @@ static inline void gpio_ll_sleep_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_PULLUP_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -437,7 +464,7 @@ static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_PULLDOWN_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -448,7 +475,7 @@ static inline void gpio_ll_sleep_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_PULLDOWN_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -459,7 +486,7 @@ static inline void gpio_ll_sleep_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_nu
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_INPUT_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -470,7 +497,7 @@ static inline void gpio_ll_sleep_input_disable(gpio_dev_t *hw, gpio_num_t gpio_n
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_input_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -481,7 +508,7 @@ static inline void gpio_ll_sleep_input_enable(gpio_dev_t *hw, gpio_num_t gpio_nu
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_OUTPUT_DISABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -492,7 +519,7 @@ static inline void gpio_ll_sleep_output_disable(gpio_dev_t *hw, gpio_num_t gpio_
|
|
|
*/
|
|
|
static inline void gpio_ll_sleep_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ PIN_SLP_OUTPUT_ENABLE(GPIO_PIN_MUX_REG[gpio_num]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -504,7 +531,15 @@ static inline void gpio_ll_sleep_output_enable(gpio_dev_t *hw, gpio_num_t gpio_n
|
|
|
*/
|
|
|
static inline void gpio_ll_deepsleep_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_int_type_t intr_type)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ HAL_ASSERT(gpio_num <= GPIO_NUM_5 && "gpio larger than 5 does not support deep sleep wake-up function");
|
|
|
+
|
|
|
+ REG_SET_BIT(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_PIN_CLK_GATE);
|
|
|
+ REG_SET_BIT(RTC_CNTL_EXT_WAKEUP_CONF_REG, RTC_CNTL_GPIO_WAKEUP_FILTER);
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, 1 << (RTC_CNTL_GPIO_PIN0_WAKEUP_ENABLE_S - gpio_num));
|
|
|
+ uint32_t reg = REG_READ(RTC_CNTL_GPIO_WAKEUP_REG);
|
|
|
+ reg &= (~(RTC_CNTL_GPIO_PIN0_INT_TYPE_V << (RTC_CNTL_GPIO_PIN0_INT_TYPE_S - gpio_num * 3)));
|
|
|
+ reg |= (intr_type << (RTC_CNTL_GPIO_PIN0_INT_TYPE_S - gpio_num * 3));
|
|
|
+ REG_WRITE(RTC_CNTL_GPIO_WAKEUP_REG, reg);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -515,7 +550,10 @@ static inline void gpio_ll_deepsleep_wakeup_enable(gpio_dev_t *hw, gpio_num_t gp
|
|
|
*/
|
|
|
static inline void gpio_ll_deepsleep_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|
|
{
|
|
|
- abort();// IDF-4019
|
|
|
+ HAL_ASSERT(gpio_num <= GPIO_NUM_5 && "gpio larger than 5 does not support deep sleep wake-up function");
|
|
|
+
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, 1 << (RTC_CNTL_GPIO_PIN0_WAKEUP_ENABLE_S - gpio_num));
|
|
|
+ CLEAR_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_PIN0_INT_TYPE_S - gpio_num * 3);
|
|
|
}
|
|
|
|
|
|
#ifdef __cplusplus
|