35 lines
1.1 KiB
Rust
35 lines
1.1 KiB
Rust
|
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 {
|
||
|
sleep(1500);
|
||
|
}
|
||
|
}
|
||
|
}
|