#![no_std]
#![no_main]
use cortex_m_rt::entry;
use defmt_rtt as _;
use panic_halt as _;
use gd32e2_hal::adc::SampTime;
use gd32e2_hal::pac;
use gd32e2_hal::prelude::*;
use gd32e2_hal::rcu::{AdcPsc, AdcSel, ClockConfig, Irc28mDiv, PllFreq, SysClk};
#[entry]
fn main() -> ! {
let dp = pac::Peripherals::take().unwrap();
let mut fmc = dp.fmc.constrain();
let config = ClockConfig::default()
.sysclk(SysClk::Pll(PllFreq::Mhz48))
.adc_sel(AdcSel::Prescaled(AdcPsc::Apb2Div8));
let mut rcu = dp.rcu.constrain().freeze(&mut fmc, config);
let clocks = rcu.clocks();
let _alt_src = AdcSel::Irc28m(Irc28mDiv::Div2);
let gpioa = dp.gpioa.split(&mut rcu);
let ain = gpioa.pa0.into_analog();
let mut adc = dp.adc.constrain(&mut rcu);
defmt::info!("ADC test, CK_ADC = {} Hz", clocks.ck_adc().to_Hz());
loop {
let vdda = adc.read_vref();
defmt::info!("VDDA = {} mV", vdda);
match adc.read_temperature() {
Some(tenths) => {
defmt::info!("temp = {}.{} C", tenths / 10, (tenths % 10).abs());
}
None => {
defmt::info!("temp unavailable (CK_ADC too fast)");
}
}
let raw = adc.read(&ain, SampTime::Cycles239_5);
defmt::info!("PA0 raw = {}", raw);
for _ in 0..1_000_000 {
cortex_m::asm::nop();
}
}
}