mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-31 15:11:40 +01:00 
			
		
		
		
	gpio: Fix IO hold function related problems
1. Fix deep sleep wakeup IOs can not be unhold issue 2. Correct hold related APIs' description 3. Fix gpio_force_hold_all API docs: Add GPIO wakeup source to sleep_modes doc for ESP32C3 and C2
This commit is contained in:
		| @@ -453,7 +453,7 @@ static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, | ||||
| } | ||||
|  | ||||
| /** | ||||
|   * @brief Force hold digital and rtc gpio pad. | ||||
|   * @brief Force hold all digital(VDD3P3_CPU) and rtc(VDD3P3_RTC) gpio pads. | ||||
|   * @note GPIO force hold, whether the chip in sleep mode or wakeup mode. | ||||
|   */ | ||||
| static inline void gpio_ll_force_hold_all(void) | ||||
| @@ -464,15 +464,15 @@ static inline void gpio_ll_force_hold_all(void) | ||||
| } | ||||
|  | ||||
| /** | ||||
|   * @brief Force unhold digital and rtc gpio pad. | ||||
|   * @brief Force unhold all digital(VDD3P3_CPU) and rtc(VDD3P3_RTC) gpio pads. | ||||
|   * @note GPIO force unhold, whether the chip in sleep mode or wakeup mode. | ||||
|   */ | ||||
| static inline void gpio_ll_force_unhold_all(void) | ||||
| { | ||||
|     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); | ||||
|     CLEAR_PERI_REG_MASK(RTC_CNTL_PWC_REG, RTC_CNTL_PAD_FORCE_HOLD_M); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -619,6 +619,20 @@ static inline void gpio_ll_deepsleep_wakeup_disable(gpio_dev_t *hw, uint32_t gpi | ||||
|     CLEAR_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_PIN0_INT_TYPE_S - gpio_num * 3); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Get the status of whether an IO is used for deep-sleep wake-up. | ||||
|  * | ||||
|  * @param hw Peripheral GPIO hardware instance address. | ||||
|  * @param gpio_num GPIO number | ||||
|  * @return True if the pin is enabled to wake up from deep-sleep | ||||
|  */ | ||||
| static inline bool gpio_ll_deepsleep_wakeup_is_enabled(gpio_dev_t *hw, uint32_t gpio_num) | ||||
| { | ||||
|     HAL_ASSERT(gpio_num <= GPIO_NUM_5 && "gpio larger than 5 does not support deep sleep wake-up function"); | ||||
|  | ||||
|     return GET_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, 1 << (RTC_CNTL_GPIO_PIN0_WAKEUP_ENABLE_S - gpio_num)); | ||||
| } | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|   | ||||
| @@ -24,19 +24,15 @@ static inline void rtc_cntl_ll_set_wakeup_timer(uint64_t t) | ||||
|     SET_PERI_REG_MASK(RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_MAIN_TIMER_ALARM_EN_M); | ||||
| } | ||||
|  | ||||
| static inline uint32_t rtc_cntl_ll_gpio_get_wakeup_pins(void) | ||||
| static inline uint32_t rtc_cntl_ll_gpio_get_wakeup_status(void) | ||||
| { | ||||
|     return GET_PERI_REG_MASK(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_WAKEUP_STATUS); | ||||
| } | ||||
|  | ||||
| static inline void rtc_cntl_ll_gpio_set_wakeup_pins(void) | ||||
| { | ||||
|     REG_CLR_BIT(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_WAKEUP_STATUS_CLR); | ||||
| } | ||||
|  | ||||
| static inline void rtc_cntl_ll_gpio_clear_wakeup_pins(void) | ||||
| static inline void rtc_cntl_ll_gpio_clear_wakeup_status(void) | ||||
| { | ||||
|     REG_SET_BIT(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_WAKEUP_STATUS_CLR); | ||||
|     REG_CLR_BIT(RTC_CNTL_GPIO_WAKEUP_REG, RTC_CNTL_GPIO_WAKEUP_STATUS_CLR); | ||||
| } | ||||
|  | ||||
| static inline void rtc_cntl_ll_enable_cpu_retention(uint32_t addr) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user