Skip to content

Commit

Permalink
feat(embassy-arch): return OptionalPeripherals from init()
Browse files Browse the repository at this point in the history
  • Loading branch information
ROMemories committed Feb 28, 2024
1 parent f45f85a commit 3a43b74
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 33 deletions.
7 changes: 5 additions & 2 deletions src/riot-rs-embassy/src/arch/dummy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,11 @@ mod executor {
}
pub use executor::{Executor, Spawner};

pub fn init(_: OptionalPeripherals) -> Peripherals {
Peripherals {}
#[derive(Default)]
pub struct Config;

pub fn init(_config: Config) -> OptionalPeripherals {
unimplemented!();
}

pub struct SWI;
33 changes: 17 additions & 16 deletions src/riot-rs-embassy/src/arch/nrf52.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
pub(crate) use embassy_executor::InterruptExecutor as Executor;
pub use embassy_nrf::interrupt::SWI0_EGU0 as SWI;
pub use embassy_nrf::{init, OptionalPeripherals};
pub use embassy_nrf::{interrupt, peripherals};

#[cfg(feature = "usb")]
use embassy_nrf::{bind_interrupts, rng, usb as nrf_usb};

#[cfg(feature = "usb")]
bind_interrupts!(struct Irqs {
USBD => nrf_usb::InterruptHandler<peripherals::USBD>;
POWER_CLOCK => nrf_usb::vbus_detect::InterruptHandler;
RNG => rng::InterruptHandler<peripherals::RNG>;
});
pub use embassy_nrf::{config::Config, interrupt, peripherals, OptionalPeripherals};

#[interrupt]
unsafe fn SWI0_EGU0() {
Expand All @@ -21,18 +10,30 @@ unsafe fn SWI0_EGU0() {
#[cfg(feature = "usb")]
pub mod usb {
use embassy_nrf::{
peripherals,
usb::{vbus_detect::HardwareVbusDetect, Driver},
bind_interrupts, peripherals, rng,
usb::{
self,
vbus_detect::{self, HardwareVbusDetect},
Driver,
},
};

use crate::arch;

bind_interrupts!(struct Irqs {
USBD => usb::InterruptHandler<peripherals::USBD>;
POWER_CLOCK => vbus_detect::InterruptHandler;
RNG => rng::InterruptHandler<peripherals::RNG>;
});

pub type UsbDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>;

pub fn driver(peripherals: &mut arch::OptionalPeripherals) -> UsbDriver {
use super::Irqs;

let usbd = peripherals.USBD.take().unwrap();
Driver::new(usbd, Irqs, HardwareVbusDetect::new(Irqs))
}
}

pub fn init(config: Config) -> OptionalPeripherals {
OptionalPeripherals::from(embassy_nrf::init(config))
}
25 changes: 11 additions & 14 deletions src/riot-rs-embassy/src/arch/rp2040.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,7 @@
pub(crate) use embassy_executor::InterruptExecutor as Executor;
pub use embassy_rp::interrupt;
pub use embassy_rp::interrupt::SWI_IRQ_1 as SWI;
pub use embassy_rp::{config::Config, peripherals, OptionalPeripherals, Peripherals};

#[cfg(feature = "usb")]
use embassy_rp::{bind_interrupts, peripherals::USB, usb::InterruptHandler};

// rp2040 usb start
#[cfg(feature = "usb")]
bind_interrupts!(struct Irqs {
USBCTRL_IRQ => InterruptHandler<USB>;
});
pub use embassy_rp::{config::Config, peripherals, OptionalPeripherals};

#[interrupt]
unsafe fn SWI_IRQ_1() {
Expand All @@ -19,11 +10,17 @@ unsafe fn SWI_IRQ_1() {

#[cfg(feature = "usb")]
pub mod usb {
use embassy_rp::peripherals;
use embassy_rp::usb::Driver;
use embassy_rp::{
bind_interrupts, peripherals,
usb::{Driver, InterruptHandler},
};

use crate::arch;

bind_interrupts!(struct Irqs {
USBCTRL_IRQ => InterruptHandler<USB>;
});

pub type UsbDriver = Driver<'static, peripherals::USB>;

pub fn driver(peripherals: &mut arch::OptionalPeripherals) -> UsbDriver {
Expand All @@ -32,10 +29,10 @@ pub mod usb {
}
}

pub fn init(config: Config) -> Peripherals {
pub fn init(config: Config) -> OptionalPeripherals {
// SWI & DMA priority need to match. DMA is hard-coded to P3 by upstream.
use embassy_rp::interrupt::{InterruptExt, Priority};
SWI.set_priority(Priority::P3);

embassy_rp::init(config)
OptionalPeripherals::from(embassy_rp::init(config))
}
2 changes: 1 addition & 1 deletion src/riot-rs-embassy/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub static EMBASSY_TASKS: [Task] = [..];
#[distributed_slice(riot_rs_rt::INIT_FUNCS)]
pub(crate) fn init() {
riot_rs_rt::debug::println!("riot-rs-embassy::init()");
let p = arch::OptionalPeripherals::from(arch::init(Default::default()));
let p = arch::init(Default::default());
EXECUTOR.start(arch::SWI);
EXECUTOR.spawner().spawn(init_task(p)).unwrap();

Expand Down

0 comments on commit 3a43b74

Please sign in to comment.