mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
uart: support light sleep on esp32s3
This commit is contained in:
58
examples/system/light_sleep/main/gpio_wakeup.c
Normal file
58
examples/system/light_sleep/main/gpio_wakeup.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_check.h"
|
||||
#include "esp_sleep.h"
|
||||
#include "driver/gpio.h"
|
||||
|
||||
/* Most development boards have "boot" button attached to GPIO0.
|
||||
* You can also change this to another pin.
|
||||
*/
|
||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32H2
|
||||
#define BOOT_BUTTON_NUM 9
|
||||
#else
|
||||
#define BOOT_BUTTON_NUM 0
|
||||
#endif
|
||||
|
||||
/* Use boot button as gpio input */
|
||||
#define GPIO_WAKEUP_NUM BOOT_BUTTON_NUM
|
||||
/* "Boot" button is active low */
|
||||
#define GPIO_WAKEUP_LEVEL 0
|
||||
|
||||
static const char *TAG = "gpio_wakeup";
|
||||
|
||||
void example_wait_gpio_inactive(void)
|
||||
{
|
||||
printf("Waiting for GPIO%d to go high...\n", GPIO_WAKEUP_NUM);
|
||||
while (gpio_get_level(GPIO_WAKEUP_NUM) == GPIO_WAKEUP_LEVEL) {
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
}
|
||||
|
||||
esp_err_t example_register_gpio_wakeup(void)
|
||||
{
|
||||
/* Initialize GPIO */
|
||||
gpio_config_t config = {
|
||||
.pin_bit_mask = BIT64(GPIO_WAKEUP_NUM),
|
||||
.mode = GPIO_MODE_INPUT,
|
||||
.pull_down_en = false,
|
||||
.pull_up_en = false,
|
||||
.intr_type = GPIO_INTR_DISABLE
|
||||
};
|
||||
ESP_RETURN_ON_ERROR(gpio_config(&config), TAG, "Initialize GPIO%d failed", GPIO_WAKEUP_NUM);
|
||||
|
||||
/* Enable wake up from GPIO */
|
||||
ESP_RETURN_ON_ERROR(gpio_wakeup_enable(GPIO_WAKEUP_NUM, GPIO_WAKEUP_LEVEL == 0 ? GPIO_INTR_LOW_LEVEL : GPIO_INTR_HIGH_LEVEL),
|
||||
TAG, "Enable gpio wakeup failed");
|
||||
ESP_RETURN_ON_ERROR(esp_sleep_enable_gpio_wakeup(), TAG, "Configure gpio as wakeup source failed");
|
||||
|
||||
/* Make sure the GPIO is inactive and it won't trigger wakeup immediately */
|
||||
example_wait_gpio_inactive();
|
||||
ESP_LOGI(TAG, "gpio wakeup source is ready");
|
||||
|
||||
return ESP_OK;
|
||||
}
|
Reference in New Issue
Block a user