ESP32——UPL 唤醒

UPL 唤醒ULP协处理器是RTC外设电源域的一部分,它运行存储在RTC慢速存储器中的程序。ULP协处理器可以在芯片处于休眠模式时运行,可用于轮询传感器、监控ADC或触摸传感器值,以及在检测到特定事件时唤醒芯片。如果请求此唤醒模式,则 RTC 慢速内存将在睡眠期间打开电源。在ULP协处理器开始运行程序之前,RTC外设将自动通电;一旦程序停止运行,RTC外设将再次自动断电。esp_sleep_enable_ulp_wakeup()该函数用于启用此唤醒源。您可以使用以下命令上传 ULP 程序:void
摘要由CSDN通过智能技术生成

UPL 唤醒

ULP协处理器是RTC外设电源域的一部分,它运行存储在RTC慢速存储器中的程序。ULP协处理器可以在芯片处于休眠模式时运行,可用于轮询传感器、监控ADC或触摸传感器值,以及在检测到特定事件时唤醒芯片。如果请求此唤醒模式,则 RTC 慢速内存将在睡眠期间打开电源。在ULP协处理器开始运行程序之前,RTC外设将自动通电;一旦程序停止运行,RTC外设将再次自动断电。

esp_sleep_enable_ulp_wakeup()该函数用于启用此唤醒源。

您可以使用以下命令上传 ULP 程序:

void init_ulp_program() {
    const ulp_insn_t program[] = {
            // initiate wakeup of the SoC启动SoC唤醒
            I_WAKE(),
            // stop the ULP program停止ULP程序
            I_HALT()
    };
 
    size_t load_addr = 0;
    size_t size = sizeof(program)/sizeof(ulp_insn_t);
    ulp_process_macros_and_load(load_addr, program, &size);
 
    ulp_run(0);
}

设置 ULP 唤醒周期的命令是:

esp_err_t ulp_set_wakeup_period(size_t period_index, uint32_t period_us);

参数:
报警周期设置(0 – 4)
唤醒周期的索引,以μs为单位period_index ``period_us a

成功

回报如果 period_index超出范围ESP_OK ESP_ERR_INVALID_ARG

用于唤醒 esp32 的 ULP 命令包括:

 // initiate wakeup of the SoC
    I_WAKE(),
// stop the ULP program
    I_HALT()

这是完整的草图:

/*
 *  ESP32
 *  DEEP Sleep and ULP wake up
 *  by Mischianti Renzo <https://www.mischianti.org>
 *
 *  https://www.mischianti.org/2021/03/23/esp32-practical-power-saving-preserve-gpio-status-external-and-ulp-wake-up-5/
 *
 */
 
#include "esp32/ulp.h"
#include "soc/rtc_cntl_reg.h"
#include "driver/rtc_io.h"
 
void init_ulp_program();
 
RTC_DATA_ATTR int bootCount = 0;
 
/*
Method to print the reason by which ESP32
has been awaken from sleep方法打印ESP32从睡眠中被唤醒的原因
*/
void print_wakeup_reason(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值