68 lines
2.0 KiB
Rust
68 lines
2.0 KiB
Rust
#![no_std]
|
|
#![no_main]
|
|
use embassy_executor::Spawner;
|
|
use embassy_time::{Duration, Instant, Ticker};
|
|
use embedded_hal::digital::StatefulOutputPin;
|
|
use panic_rtt_target as _;
|
|
use rtt_target::{rprintln, rtt_init_print};
|
|
use va108xx_embassy::embassy;
|
|
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(feature = "custom-irqs")] {
|
|
use va108xx_embassy::embassy_time_driver_irqs;
|
|
use va108xx_hal::pac::interrupt;
|
|
embassy_time_driver_irqs!(timekeeper_irq = OC23, alarm_irq = OC24);
|
|
}
|
|
}
|
|
|
|
use va108xx_hal::{gpio::PinsA, pac, prelude::*};
|
|
|
|
const SYSCLK_FREQ: Hertz = Hertz::from_raw(50_000_000);
|
|
|
|
// main is itself an async function.
|
|
#[embassy_executor::main]
|
|
async fn main(_spawner: Spawner) {
|
|
rtt_init_print!();
|
|
rprintln!("-- VA108xx Embassy Demo --");
|
|
|
|
let mut dp = pac::Peripherals::take().unwrap();
|
|
|
|
// Safety: Only called once here.
|
|
unsafe {
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(not(feature = "custom-irqs"))] {
|
|
embassy::init(
|
|
&mut dp.sysconfig,
|
|
&dp.irqsel,
|
|
SYSCLK_FREQ,
|
|
dp.tim23,
|
|
dp.tim22,
|
|
);
|
|
} else {
|
|
embassy::init_with_custom_irqs(
|
|
&mut dp.sysconfig,
|
|
&dp.irqsel,
|
|
SYSCLK_FREQ,
|
|
dp.tim23,
|
|
dp.tim22,
|
|
pac::Interrupt::OC23,
|
|
pac::Interrupt::OC24,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
let porta = PinsA::new(&mut dp.sysconfig, dp.porta);
|
|
let mut led0 = porta.pa10.into_readable_push_pull_output();
|
|
let mut led1 = porta.pa7.into_readable_push_pull_output();
|
|
let mut led2 = porta.pa6.into_readable_push_pull_output();
|
|
let mut ticker = Ticker::every(Duration::from_secs(1));
|
|
loop {
|
|
ticker.next().await;
|
|
rprintln!("Current time: {}", Instant::now().as_secs());
|
|
led0.toggle().ok();
|
|
led1.toggle().ok();
|
|
led2.toggle().ok();
|
|
}
|
|
}
|