#![no_std]
#![no_main]
use cortex_m_rt::entry;
use defmt_rtt as _;
use panic_halt as _;
use gd32e2_hal::pac;
use gd32e2_hal::prelude::*;
use gd32e2_hal::rcu::{ClockConfig, PllFreq, SysClk};
use gd32e2_hal::time::{MillisDuration, SecsDuration};
const SAMPLES_PER_CYCLE: u8 = 8;
const SAMPLE_GAP: MillisDuration = MillisDuration::from_millis(200);
#[entry]
fn main() -> ! {
let dp = pac::Peripherals::take().unwrap();
let mut fmc = dp.fmc.constrain();
let config = ClockConfig::default().sysclk(SysClk::Pll(PllFreq::Mhz48));
let mut rcu = dp.rcu.constrain().freeze(&mut fmc, config);
let period: SecsDuration = 5u32.secs();
let mut timer = dp.timer5.constrain(&mut rcu).start_interval(period);
let mut delay = dp.timer13.constrain(&mut rcu).into_delay();
let raw_period = period.as_secs();
defmt::info!("TIMER5 started, rolling over every {} s", raw_period);
let mut cycles = 0;
loop {
for _ in 0..SAMPLES_PER_CYCLE {
defmt::info!("cnt = {}", timer.cnt());
delay.delay(SAMPLE_GAP);
}
timer.wait();
cycles += 1;
defmt::info!("cycle {}, {} s elapsed", cycles, cycles * raw_period);
}
}