From c71ace5063111ba4187d9e800e7fd976ac0231ba Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Fri, 14 Nov 2025 16:09:27 -0700 Subject: [PATCH] fix sleep timer overflow --- ch32v-insert-coin/src/app.rs | 29 +++++++++++++++++++++-------- ch32v-insert-coin/src/main.rs | 4 +++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/ch32v-insert-coin/src/app.rs b/ch32v-insert-coin/src/app.rs index 56162b1..c2596e1 100644 --- a/ch32v-insert-coin/src/app.rs +++ b/ch32v-insert-coin/src/app.rs @@ -193,7 +193,7 @@ pub struct TimerConfig { pub usb_adc_timer_ms: usize, pub led0_timer_ms: usize, pub led1_timer_ms: usize, - pub shutdown_timer_ms: usize, + pub shutdown_timer_s: usize, // pub led2_timer_ms: usize, } @@ -205,6 +205,7 @@ pub struct Timers { led0_timer: TickTimerService, led1_timer: TickTimerService, shutdown_timer: TickTimerService, + pps_timer: TickTimerService, // led2_timer: TickTimerService, } @@ -236,12 +237,14 @@ impl Timers { true, ), shutdown_timer: TickTimerService::new( - TickServiceData::new(config.shutdown_timer_ms * system_tick_rate_hz / 1000), + TickServiceData::new(config.shutdown_timer_s), false, - ), // led2_timer: TickTimerService::new( - // TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000), - // true, - // ), + ), + pps_timer: TickTimerService::new(TickServiceData::new(system_tick_rate_hz), true), + // led2_timer: TickTimerService::new( + // TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000), + // true, + // ), } } pub fn tick(&mut self) { @@ -251,7 +254,7 @@ impl Timers { self.usb_adc_timer.tick(); self.led0_timer.tick(); self.led1_timer.tick(); - self.shutdown_timer.tick(); + self.pps_timer.tick(); // self.led2_timer.tick(); } pub fn need_service(&self) -> bool { @@ -262,6 +265,7 @@ impl Timers { | self.led0_timer.need_service() | self.led1_timer.need_service() | self.shutdown_timer.need_service() + | self.pps_timer.need_service() // | self.led2_timer.need_service() } pub fn init(&mut self) { @@ -357,6 +361,9 @@ impl App { self.timers.shutdown_timer.reset(); self.timers.shutdown_timer.enable(true); + self.timers.pps_timer.reset(); + self.timers.pps_timer.enable(true); + // self.timers.led2_timer.reset(); // self.timers.led2_timer.enable(true); @@ -406,6 +413,7 @@ impl App { let avg = self.interfaces.adc_core.get_average(); // #[cfg(feature = "enable_print")] // println!("batt adc service: {bv}, {avg}"); + // println!("none USB"); if avg < 421 { self.set_state(State::DeepSleep); } @@ -450,9 +458,14 @@ impl App { // #[cfg(feature = "enable_print")] // println!("led1 service"); } + if self.timers.pps_timer.need_service() { + self.timers.pps_timer.service(); + self.timers.shutdown_timer.tick(); + } if self.timers.shutdown_timer.need_service() { self.timers.shutdown_timer.service(); self.timers.shutdown_timer.reset(); + // println!("eepy"); self.set_state(State::DeepSleep); } // if self.timers.led2_timer.need_service() { @@ -652,7 +665,7 @@ impl App { if self.interfaces.usb.powered() { return true; } else { - if self.interfaces.adc_core.get_average() > 421 { + if self.interfaces.adc_core.get_average() >= 421 { return true; } } diff --git a/ch32v-insert-coin/src/main.rs b/ch32v-insert-coin/src/main.rs index c4e404f..9693e27 100644 --- a/ch32v-insert-coin/src/main.rs +++ b/ch32v-insert-coin/src/main.rs @@ -339,7 +339,8 @@ fn app_main(mut p: hal::Peripherals) -> ! { usb_adc_timer_ms: 10000, led0_timer_ms: 100, led1_timer_ms: 100, - shutdown_timer_ms: 4 * 60 * 60 * 1000, + // 4 hours: + shutdown_timer_s: 4 * 60 * 60, // led2_timer_ms: 100, }; @@ -517,6 +518,7 @@ fn app_main(mut p: hal::Peripherals) -> ! { app.shut_down(); loop { + riscv::asm::delay(20_000); unsafe { system::enter_standby() }; unsafe { #[allow(static_mut_refs)]