esp-hal/qa-test/src/bin/sleep_timer_ext1.rs
Juraj Sadel 689c362403
S2 sleep (#3341)
* esp32s3 copy for esp32s2

* idf's rtc_sleep_pd

* Add the new NRX, FE & FE2 peripherals from the PAC

* Went through rtc_sleep_init -> apply

* Add all else statements of idf's rtc_sleep_init and made the style match the cpp code more for easier checking

* Finish checking/copying base_settings

* Checked flags in apply

* Allow base_settings

* Remove unused variables

* Reenable rtc_peri for Ext1WakeupSource

* Correct comment. Probably copy-pasted and still present in esp32s3

* Remove TODO comments

* Add the esp32s2 sleep work to the changelog

* Add esp32s2 to qa-test where applicable

* update pacs and update after rebase

* changelog

* provide missing ROM functions

* Update PACs

* review comments and cleanup

* review

* Fix wrong cfg condition

---------

Co-authored-by: mennovf <mennovanfrachem@hotmail.com>
2025-04-09 09:46:16 +00:00

58 lines
1.5 KiB
Rust

//! Demonstrates deep sleep with timer and ext1 wakeup
//!
//! The following wiring is assumed:
//! - ext1 wakeup pins => GPIO2, GPIO4
//% CHIPS: esp32 esp32s2 esp32s3
#![no_std]
#![no_main]
use core::time::Duration;
use esp_backtrace as _;
use esp_hal::{
delay::Delay,
gpio::{Input, InputConfig, Pull, RtcPin},
main,
rtc_cntl::{
reset_reason,
sleep::{Ext1WakeupSource, TimerWakeupSource, WakeupLevel},
wakeup_cause,
Rtc,
SocResetReason,
},
system::Cpu,
};
use esp_println::println;
#[main]
fn main() -> ! {
let peripherals = esp_hal::init(esp_hal::Config::default());
let mut rtc = Rtc::new(peripherals.LPWR);
let mut pin_2 = peripherals.GPIO2;
let mut pin_4 = peripherals.GPIO4;
let input = Input::new(
pin_4.reborrow(),
InputConfig::default().with_pull(Pull::None),
);
println!("up and runnning!");
let reason = reset_reason(Cpu::ProCpu).unwrap_or(SocResetReason::ChipPowerOn);
println!("reset reason: {:?}", reason);
let wake_reason = wakeup_cause();
println!("wake reason: {:?}", wake_reason);
let delay = Delay::new();
let timer = TimerWakeupSource::new(Duration::from_secs(30));
core::mem::drop(input);
let mut wakeup_pins: [&mut dyn RtcPin; 2] = [&mut pin_4, &mut pin_2];
let ext1 = Ext1WakeupSource::new(&mut wakeup_pins, WakeupLevel::High);
println!("sleeping!");
delay.delay_millis(100);
rtc.sleep_deep(&[&timer, &ext1]);
}