From fb70e06a734dbaddf6961518dd14ddf6a597055e Mon Sep 17 00:00:00 2001 From: ROMemories Date: Wed, 10 Jan 2024 09:33:43 +0100 Subject: [PATCH] refactor(arch): move arch modules to their own files --- src/riot-rs-embassy/src/lib.rs | 70 +++---------------------------- src/riot-rs-embassy/src/nrf52.rs | 29 +++++++++++++ src/riot-rs-embassy/src/rp2040.rs | 27 ++++++++++++ 3 files changed, 62 insertions(+), 64 deletions(-) create mode 100644 src/riot-rs-embassy/src/nrf52.rs create mode 100644 src/riot-rs-embassy/src/rp2040.rs diff --git a/src/riot-rs-embassy/src/lib.rs b/src/riot-rs-embassy/src/lib.rs index a2f4fdf51..529159c11 100644 --- a/src/riot-rs-embassy/src/lib.rs +++ b/src/riot-rs-embassy/src/lib.rs @@ -4,6 +4,12 @@ pub mod assign_resources; +#[cfg(context = "nrf52")] +pub mod nrf52; + +#[cfg(context = "rp2040")] +pub mod rp2040; + use core::cell::OnceCell; pub use linkme::distributed_slice; @@ -41,70 +47,6 @@ pub static EXECUTOR: InterruptExecutor = InterruptExecutor::new(); #[distributed_slice] pub static EMBASSY_TASKS: [Task] = [..]; -#[cfg(context = "nrf52")] -pub mod nrf52 { - pub use embassy_nrf::interrupt; - pub use embassy_nrf::interrupt::SWI0_EGU0 as SWI; - pub use embassy_nrf::{init, OptionalPeripherals}; - - #[cfg(feature = "usb")] - use embassy_nrf::{bind_interrupts, peripherals, rng, usb as nrf_usb}; - - #[cfg(feature = "usb")] - bind_interrupts!(struct Irqs { - USBD => nrf_usb::InterruptHandler; - POWER_CLOCK => nrf_usb::vbus_detect::InterruptHandler; - RNG => rng::InterruptHandler; - }); - - #[interrupt] - unsafe fn SWI0_EGU0() { - crate::EXECUTOR.on_interrupt() - } - - #[cfg(feature = "usb")] - pub mod usb { - use embassy_nrf::peripherals; - use embassy_nrf::usb::{vbus_detect::HardwareVbusDetect, Driver}; - pub type UsbDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; - pub fn driver(usbd: peripherals::USBD) -> UsbDriver { - use super::Irqs; - Driver::new(usbd, Irqs, HardwareVbusDetect::new(Irqs)) - } - } -} - -#[cfg(context = "rp2040")] -pub mod rp2040 { - pub use embassy_rp::interrupt; - pub use embassy_rp::interrupt::SWI_IRQ_1 as SWI; - pub use embassy_rp::{init, 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; - }); - - #[interrupt] - unsafe fn SWI_IRQ_1() { - crate::EXECUTOR.on_interrupt() - } - - #[cfg(feature = "usb")] - pub mod usb { - use embassy_rp::peripherals; - use embassy_rp::usb::Driver; - pub type UsbDriver = Driver<'static, peripherals::USB>; - pub fn driver(usb: peripherals::USB) -> UsbDriver { - Driver::new(usb, super::Irqs) - } - } -} - #[cfg(context = "nrf52")] pub use nrf52 as arch; diff --git a/src/riot-rs-embassy/src/nrf52.rs b/src/riot-rs-embassy/src/nrf52.rs new file mode 100644 index 000000000..5c1b27b69 --- /dev/null +++ b/src/riot-rs-embassy/src/nrf52.rs @@ -0,0 +1,29 @@ +pub use embassy_nrf::interrupt; +pub use embassy_nrf::interrupt::SWI0_EGU0 as SWI; +pub use embassy_nrf::{init, OptionalPeripherals}; + +#[cfg(feature = "usb")] +use embassy_nrf::{bind_interrupts, peripherals, rng, usb as nrf_usb}; + +#[cfg(feature = "usb")] +bind_interrupts!(struct Irqs { + USBD => nrf_usb::InterruptHandler; + POWER_CLOCK => nrf_usb::vbus_detect::InterruptHandler; + RNG => rng::InterruptHandler; +}); + +#[interrupt] +unsafe fn SWI0_EGU0() { + crate::EXECUTOR.on_interrupt() +} + +#[cfg(feature = "usb")] +pub mod usb { + use embassy_nrf::peripherals; + use embassy_nrf::usb::{vbus_detect::HardwareVbusDetect, Driver}; + pub type UsbDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + pub fn driver(usbd: peripherals::USBD) -> UsbDriver { + use super::Irqs; + Driver::new(usbd, Irqs, HardwareVbusDetect::new(Irqs)) + } +} diff --git a/src/riot-rs-embassy/src/rp2040.rs b/src/riot-rs-embassy/src/rp2040.rs new file mode 100644 index 000000000..5c3bff5c6 --- /dev/null +++ b/src/riot-rs-embassy/src/rp2040.rs @@ -0,0 +1,27 @@ +pub use embassy_rp::interrupt; +pub use embassy_rp::interrupt::SWI_IRQ_1 as SWI; +pub use embassy_rp::{init, 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; +}); + +#[interrupt] +unsafe fn SWI_IRQ_1() { + crate::EXECUTOR.on_interrupt() +} + +#[cfg(feature = "usb")] +pub mod usb { + use embassy_rp::peripherals; + use embassy_rp::usb::Driver; + pub type UsbDriver = Driver<'static, peripherals::USB>; + pub fn driver(usb: peripherals::USB) -> UsbDriver { + Driver::new(usb, super::Irqs) + } +}