2024-02-07 12:46:13 +08:00
|
|
|
use stm32f4xx_hal::gpio::{Input, Output, PushPull, PE10, PE11, PE8, PE9};
|
|
|
|
use crate::device::sys_timer::sleep;
|
|
|
|
pub struct HwRevPins{
|
|
|
|
pub h0: PE8<Input>,
|
|
|
|
pub h1: PE9<Input>,
|
|
|
|
pub h2: PE10<Input>,
|
|
|
|
pub h3: PE11<Input>,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct HWRev {
|
|
|
|
pub major: u8,
|
|
|
|
pub minor: u8,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl HWRev {
|
|
|
|
pub fn detect_hw_rev(hwrev_pins: HwRevPins) -> Self {
|
|
|
|
let (h0, h1, h2, h3) = (
|
|
|
|
hwrev_pins.h0.is_high(), hwrev_pins.h1.is_high(),
|
|
|
|
hwrev_pins.h2.is_high(), hwrev_pins.h3.is_high()
|
|
|
|
);
|
|
|
|
match (h0, h1, h2, h3) {
|
|
|
|
(true, true, true, true) => HWRev { major: 0, minor: 3 },
|
|
|
|
(_, _, _, _) => HWRev { major: 0, minor: 0 }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// On Rev0_3, during power up, digital power rails are stabilized way before analog power rails
|
|
|
|
/// This causes improper initialization on any peripherals requiring calibrations
|
|
|
|
/// See Issue #32 on Kirdy Hw Repo
|
|
|
|
pub fn startup_delay_before_gpio_init(&mut self){
|
|
|
|
if self.major == 0 && self.minor == 3 {
|
2024-02-07 16:56:27 +08:00
|
|
|
sleep(5000);
|
2024-02-07 12:46:13 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|