add tick timer and re-factor for app vs interface

This commit is contained in:
sigil-03 2025-08-16 19:37:31 -06:00
parent 51af5c3343
commit 1a714bd907
8 changed files with 164 additions and 27 deletions

View file

@ -84,14 +84,18 @@ static mut IRQ1_FLAG: bool = false;
// }
// }
// TODO: remove
use insert_coin::{TickService, TickServiceData};
use insert_coin::TickTimerService;
#[qingke_rt::entry]
fn main() -> ! {
let mut config = hal::Config::default();
config.rcc = hal::rcc::Config::SYSCLK_FREQ_48MHZ_HSE;
let p = hal::init(config);
// button 1 setup
// let b1 = Input::new(p.PA2, Pull::Up);
// coin button input setup
let b1 = Input::new(p.PD4, Pull::Up);
// p.EXTI4
// let ei = hal::exti::ExtiInput::new(p.PD4, p.EXTI4, Pull::Up);
@ -133,12 +137,62 @@ fn main() -> ! {
let pwm_core = SimplePwmCore::new(pwm);
let app = InsertCoin::new(config, pwm_core);
let mut interfaces = InsertCoin::new(config, pwm_core);
interfaces.set_active(true);
// insert_coin.init();
app.run();
let mut led0_index = 0;
let led0_dcs = [0u8, 25u8, 50u8, 75u8, 100u8, 75u8, 50u8, 25u8];
let mut led1_index = 0;
let led1_dcs = [0u8, 25u8, 50u8, 75u8, 100u8];
// tick timer 0
let tt0_fire_rate_hz = 9;
let tt0_tick_per_service = (interfaces.config.tick_rate_hz/(tt0_fire_rate_hz * 2));
let tt0_service_data = TickServiceData::new(tt0_tick_per_service);
let tt0 = TickTimerService::new(tt0_service_data);
// tick timer 1
let tt1_fire_rate_hz = 3;
let tt1_tick_per_service = (interfaces.config.tick_rate_hz/(tt1_fire_rate_hz * 2));
let tt1_service_data = TickServiceData::new(tt1_tick_per_service);
let tt1 = TickTimerService::new(tt1_service_data);
let mut delay = Delay;
let tick_interval_us = 1000000/interfaces.config.tick_rate_hz;
loop {
tt0.tick();
tt1.tick();
// TODO: timer
// if app.led0.need_service() {
if tt0.need_service() {
interfaces.led0.set_amplitude(led0_dcs[led0_index]);
led0_index += 1;
if led0_index > led0_dcs.len() - 1 {
led0_index = 0;
}
tt0.service();
}
// }
// if app.led1.need_service() {
if tt1.need_service() {
interfaces.led1.set_amplitude(led1_dcs[led1_index]);
led1_index += 1;
if led1_index > led1_dcs.len() - 1 {
led1_index = 0;
}
tt1.service()
}
interfaces.service();
delay.delay_us(tick_interval_us as u32);
}
// // DAC servicer setup
// let mut pwm_dac_interface = SimplePwmDacHandle{pin: core::cell::RefCell::new(pwm), ch: dac_ch};
// let mut dac = DpcmDac::new(pwm_dac_interface);