Compare commits

...

2 commits

Author SHA1 Message Date
d8477e3d2d add usb power gating 2025-11-15 16:38:07 -07:00
472e43056d add systick disable 2025-11-15 16:23:18 -07:00

View file

@ -239,6 +239,13 @@ fn systick_init(tick_freq_hz: usize) {
w.set_stclk(ch32_hal::pac::systick::vals::Stclk::HCLK_DIV8); // HCLK/8 clock source w.set_stclk(ch32_hal::pac::systick::vals::Stclk::HCLK_DIV8); // HCLK/8 clock source
}); });
} }
fn systick_stop() {
let r = &ch32_hal::pac::SYSTICK;
// Reset SysTick
r.ctlr().write(|w| {
// Start with everything disabled
});
}
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {
EXTI7_0 => Test; EXTI7_0 => Test;
@ -254,8 +261,15 @@ fn app_main(mut p: hal::Peripherals, app_settings: Settings) -> Settings {
let mut adc = hal::adc::Adc::new(p.ADC1, Default::default()); let mut adc = hal::adc::Adc::new(p.ADC1, Default::default());
let mut batt_monitor_pin = p.PD4; let mut batt_monitor_pin = p.PD4;
let mut adc_core = AdcCore::new(adc, batt_monitor_pin); let mut adc_core = AdcCore::new(adc, batt_monitor_pin);
let mut usb_detect_pin = p.PD5;
let usb_detect_input = Input::new(usb_detect_pin, Pull::Up);
let usb = Usb::new(usb_detect_input);
let bv = adc_core.get_battery_voltage(); let bv = adc_core.get_battery_voltage();
if bv < 421 {
// if we don't have USB power, and the batt ADC reads under 421, don't wake
if !usb.powered() && bv < 421 {
adc_core.shutdown(); adc_core.shutdown();
return app_settings; return app_settings;
} }
@ -306,9 +320,6 @@ fn app_main(mut p: hal::Peripherals, app_settings: Settings) -> Settings {
// adc2 // adc2
// let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default()); // let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default());
let mut usb_detect_pin = p.PD5;
let usb_detect_input = Input::new(usb_detect_pin, Pull::Up);
let usb = Usb::new(usb_detect_input);
// println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel()); // println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel());
@ -561,6 +572,7 @@ use ch32_hal::timer::Channel;
// fn shutdown_main(p: Peripherals) { // fn shutdown_main(p: Peripherals) {
fn shutdown_main(p: hal::Peripherals) { fn shutdown_main(p: hal::Peripherals) {
systick_stop();
// LED0 output setup // LED0 output setup
let led0_pin = OutputOpenDrain::new(p.PC3, Level::Low, Default::default()); let led0_pin = OutputOpenDrain::new(p.PC3, Level::Low, Default::default());
let led1_pin = OutputOpenDrain::new(p.PD2, Level::High, Default::default()); let led1_pin = OutputOpenDrain::new(p.PD2, Level::High, Default::default());
@ -595,43 +607,6 @@ fn shutdown_main(p: hal::Peripherals) {
} }
} }
} }
// loop {
// unsafe {
// #[allow(static_mut_refs)]
// INPUT_FLAGS.sense_coin_flag.clear();
// #[allow(static_mut_refs)]
// INPUT_FLAGS.main_btn_flag.clear();
// }
// unsafe { system::enter_standby() };
// riscv::asm::wfi();
// unsafe {
// #[allow(static_mut_refs)]
// if (INPUT_FLAGS.sense_coin_flag.active()
// || (INPUT_FLAGS.main_btn_flag.active() && main_btn_input.is_high_immediate()))
// && app.should_wake()
// {
// break;
// }
// }
// }
// let mut config = hal::Config::default();
// config.rcc = hal::rcc::Config::SYSCLK_FREQ_48MHZ_HSI;
// unsafe {
// hal::rcc::init(config.rcc);
// }
// unsafe {
// use hal::pac::Interrupt;
// use qingke::interrupt::Priority;
// use qingke_rt::CoreInterrupt;
// system::clear_interrupt(2, 6);
// qingke::pfic::set_priority(CoreInterrupt::SysTick as u8, Priority::P15 as u8);
// qingke::pfic::enable_interrupt(Interrupt::EXTI7_0 as u8);
// qingke::pfic::enable_interrupt(CoreInterrupt::SysTick as u8);
// }
} }
#[qingke_rt::entry] #[qingke_rt::entry]