#![no_main]
#![no_std]
use cortex_m::asm;
use cortex_m_rt::entry;
#[cfg(not(feature = "defmt"))]
use panic_halt as _;
#[cfg(feature = "defmt")]
use {defmt_rtt as _, panic_probe as _};
use hal::adc;
use hal::delay::Delay;
use hal::prelude::*;
use stm32h7xx_hal as hal;
#[entry]
fn main() -> ! {
let cp = cortex_m::Peripherals::take().unwrap();
let dp = daisy::pac::Peripherals::take().unwrap();
let board = daisy::Board::take().unwrap();
let ccdr = daisy::board_freeze_clocks!(board, dp);
let pins = daisy::board_split_gpios!(board, ccdr, dp);
let mut delay = Delay::new(cp.SYST, ccdr.clocks);
let mut adc1 = adc::Adc::adc1(
dp.ADC1,
4.MHz(),
&mut delay,
ccdr.peripheral.ADC12,
&ccdr.clocks,
)
.enable();
adc1.set_resolution(adc::Resolution::SixteenBit);
#[cfg(any(feature = "seed", feature = "seed_1_1", feature = "seed_1_2"))]
let mut adc1_channel = pins.GPIO.PIN_21.into_analog();
#[cfg(feature = "patch_sm")]
let mut adc1_channel = pins.GPIO.PIN_C2.into_analog();
let mut led_user = pins.LED_USER.into_push_pull_output();
let scale_factor = ccdr.clocks.sys_ck().to_Hz() as f32 / 65_535.0;
loop {
let pot: u32 = adc1.read(&mut adc1_channel).unwrap();
let ticks = (pot as f32 * scale_factor) as u32;
led_user.set_high();
asm::delay(ticks);
led_user.set_low();
asm::delay(ticks);
}
}