pounder_test/src/hardware/mod.rs

84 lines
2.3 KiB
Rust
Raw Normal View History

2021-01-18 23:47:47 +08:00
///! Module for all hardware-specific setup of Stabilizer
use stm32h7xx_hal as hal;
// Re-export for the DigitalInputs below:
pub use embedded_hal::digital::v2::InputPin;
2021-01-18 23:55:56 +08:00
#[cfg(feature = "semihosting")]
use panic_semihosting as _;
2021-01-18 23:47:47 +08:00
mod adc;
mod afe;
mod configuration;
2021-02-17 19:08:03 +08:00
mod cycle_counter;
2021-01-18 23:47:47 +08:00
mod dac;
pub mod design_parameters;
2021-01-18 23:47:47 +08:00
mod digital_input_stamper;
mod eeprom;
pub mod pounder;
mod system_timer;
2021-01-18 23:47:47 +08:00
mod timers;
2021-05-07 20:11:25 +08:00
pub use adc::{Adc0Input, Adc1Input, AdcCode};
2021-01-18 23:47:47 +08:00
pub use afe::Gain as AfeGain;
2021-02-17 19:08:03 +08:00
pub use cycle_counter::CycleCounter;
pub use dac::{Dac0Output, Dac1Output, DacCode};
2021-01-20 21:29:29 +08:00
pub use digital_input_stamper::InputStamper;
2021-01-18 23:47:47 +08:00
pub use pounder::DdsOutput;
pub use system_timer::SystemTimer;
2021-01-18 23:47:47 +08:00
// Type alias for the analog front-end (AFE) for ADC0.
pub type AFE0 = afe::ProgrammableGainAmplifier<
hal::gpio::gpiof::PF2<hal::gpio::Output<hal::gpio::PushPull>>,
hal::gpio::gpiof::PF5<hal::gpio::Output<hal::gpio::PushPull>>,
>;
// Type alias for the analog front-end (AFE) for ADC1.
pub type AFE1 = afe::ProgrammableGainAmplifier<
hal::gpio::gpiod::PD14<hal::gpio::Output<hal::gpio::PushPull>>,
hal::gpio::gpiod::PD15<hal::gpio::Output<hal::gpio::PushPull>>,
>;
// Type alias for digital input 0 (DI0).
pub type DigitalInput0 =
hal::gpio::gpiog::PG9<hal::gpio::Input<hal::gpio::Floating>>;
// Type alias for digital input 1 (DI1).
pub type DigitalInput1 =
hal::gpio::gpioc::PC15<hal::gpio::Input<hal::gpio::Floating>>;
2021-01-31 01:48:27 +08:00
pub type NetworkStack = smoltcp_nal::NetworkStack<
2021-01-18 23:47:47 +08:00
'static,
'static,
hal::ethernet::EthernetDMA<'static>,
>;
2021-03-18 03:16:13 +08:00
pub type EthernetPhy = hal::ethernet::phy::LAN8742A<hal::ethernet::EthernetMAC>;
2021-01-18 23:47:47 +08:00
pub use configuration::{setup, PounderDevices, StabilizerDevices};
#[inline(never)]
#[panic_handler]
#[cfg(all(not(feature = "semihosting")))]
2021-01-18 23:47:47 +08:00
fn panic(_info: &core::panic::PanicInfo) -> ! {
let gpiod = unsafe { &*hal::stm32::GPIOD::ptr() };
// Turn on both red LEDs, FP_LED_1, FP_LED_3
gpiod.odr.modify(|_, w| w.odr6().high().odr12().high());
2021-03-04 00:00:29 +08:00
loop {
// Halt
core::sync::atomic::compiler_fence(
core::sync::atomic::Ordering::SeqCst,
);
2021-01-18 23:47:47 +08:00
}
}
#[cortex_m_rt::exception]
fn HardFault(ef: &cortex_m_rt::ExceptionFrame) -> ! {
panic!("HardFault at {:#?}", ef);
}
2021-03-04 00:05:22 +08:00
#[cortex_m_rt::exception]
fn DefaultHandler(irqn: i16) {
panic!("Unhandled exception (IRQn = {})", irqn);
}