Changed: - Move most library components to new [`vorago-shared-periphs`](https://egit.irs.uni-stuttgart.de/rust/vorago-shared-periphs) which is mostly re-exported in this crate. - Overhaul and simplification of several HAL APIs. The system configuration and IRQ router peripheral instance generally does not need to be passed to HAL API anymore. - All HAL drivers are now type erased. The constructors will still expect and consume the PAC singleton component for resource management purposes, but are not cached anymore. - Refactoring of GPIO library to be more inline with embassy GPIO API. Added: - I2C clock timeout feature support.
64 lines
1.7 KiB
Rust
64 lines
1.7 KiB
Rust
#![no_std]
|
|
#![no_main]
|
|
// Import panic provider.
|
|
use panic_probe as _;
|
|
// Import logger.
|
|
use defmt_rtt as _;
|
|
|
|
use embassy_example::EXTCLK_FREQ;
|
|
use embassy_executor::Spawner;
|
|
use embassy_time::{Duration, Instant, Ticker};
|
|
use va416xx_hal::{
|
|
clock::ClockConfigurator,
|
|
gpio::{Output, PinState},
|
|
pac,
|
|
pins::PinsG,
|
|
time::Hertz,
|
|
};
|
|
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(feature = "custom-irqs")] {
|
|
use va416xx_hal::pac::interrupt;
|
|
va416xx_embassy::embassy_time_driver_irqs!(timekeeper_irq = TIM12, alarm_irq = TIM11);
|
|
}
|
|
}
|
|
|
|
// main is itself an async function.
|
|
#[embassy_executor::main]
|
|
async fn main(_spawner: Spawner) {
|
|
defmt::println!("VA416xx Embassy Demo");
|
|
|
|
let dp = pac::Peripherals::take().unwrap();
|
|
|
|
// Initialize the systick interrupt & obtain the token to prove that we did
|
|
// Use the external clock connected to XTAL_N.
|
|
let clocks = ClockConfigurator::new(dp.clkgen)
|
|
.xtal_n_clk_with_src_freq(Hertz::from_raw(EXTCLK_FREQ))
|
|
.freeze()
|
|
.unwrap();
|
|
// Safety: Only called once here.
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(not(feature = "custom-irqs"))] {
|
|
va416xx_embassy::init(
|
|
dp.tim15,
|
|
dp.tim14,
|
|
&clocks
|
|
);
|
|
} else {
|
|
va416xx_embassy::init(
|
|
dp.tim12,
|
|
dp.tim11,
|
|
&clocks
|
|
);
|
|
}
|
|
}
|
|
let pinsg = PinsG::new(dp.portg);
|
|
let mut led = Output::new(pinsg.pg5, PinState::Low);
|
|
let mut ticker = Ticker::every(Duration::from_secs(1));
|
|
loop {
|
|
ticker.next().await;
|
|
defmt::info!("Current time: {}", Instant::now().as_secs());
|
|
led.toggle();
|
|
}
|
|
}
|