1#![no_std]
4#![cfg_attr(nightly, feature(doc_cfg))]
5#![deny(missing_docs)]
6
7pub mod gpio;
8
9mod irqs;
10
11#[doc(hidden)]
12pub mod peripheral {
13 pub use embassy_nrf::Peri;
14}
15
16#[cfg(feature = "ble")]
17#[doc(hidden)]
18pub mod ble;
19
20#[cfg(feature = "external-interrupts")]
21#[doc(hidden)]
22pub mod extint_registry;
23
24#[cfg(feature = "hwrng")]
25#[doc(hidden)]
26pub mod hwrng;
27
28#[cfg(feature = "i2c")]
29pub mod i2c;
30
31#[doc(hidden)]
32pub mod identity;
33
34#[cfg(feature = "nrf91-modem")]
35#[doc(hidden)]
36pub mod modem;
37
38#[cfg(feature = "ltem-nrf-modem")]
39#[doc(hidden)]
40pub mod ltem;
41
42#[cfg(feature = "spi")]
43pub mod spi;
44
45#[cfg(feature = "uart")]
46pub mod uart;
47
48#[cfg(feature = "storage")]
49#[doc(hidden)]
50pub mod storage;
51
52#[cfg(feature = "usb")]
53#[doc(hidden)]
54pub mod usb;
55
56#[cfg(feature = "executor-interrupt")]
57#[doc(hidden)]
58pub use embassy_executor::InterruptExecutor as Executor;
59
60#[cfg(feature = "executor-interrupt")]
61#[cfg(context = "nrf51")]
62ariel_os_embassy_common::executor_swi!(SWI0);
63
64#[cfg(feature = "executor-interrupt")]
65#[cfg(context = "nrf52")]
66ariel_os_embassy_common::executor_swi!(EGU0_SWI0);
67
68#[cfg(feature = "executor-interrupt")]
69#[cfg(any(context = "nrf53", context = "nrf91"))]
70ariel_os_embassy_common::executor_swi!(EGU0);
71
72use embassy_nrf::{Peri, PeripheralType, config::Config};
73
74#[doc(hidden)]
75pub use embassy_nrf::{OptionalPeripherals, interrupt};
76
77pub use embassy_nrf::peripherals;
78
79#[cfg(feature = "executor-interrupt")]
80#[doc(hidden)]
81pub static EXECUTOR: Executor = Executor::new();
82
83#[doc(hidden)]
84pub trait IntoPeripheral<'a, T: PeripheralType>: private::Sealed {
85 fn into_hal_peripheral(self) -> Peri<'a, T>;
86}
87
88impl<T: PeripheralType> private::Sealed for Peri<'_, T> {}
89
90#[doc(hidden)]
91impl<'a, T: PeripheralType> IntoPeripheral<'a, T> for Peri<'a, T> {
92 fn into_hal_peripheral(self) -> Peri<'a, T> {
93 self
94 }
95}
96
97mod private {
98 pub trait Sealed {}
99}
100
101#[doc(hidden)]
102#[must_use]
103pub fn init() -> OptionalPeripherals {
104 enable_flash_cache();
105
106 let peripherals = embassy_nrf::init(Config::default());
107 OptionalPeripherals::from(peripherals)
108}
109
110fn enable_flash_cache() {
111 cfg_if::cfg_if! {
113 if #[cfg(any(
114 context = "nrf52",
115 context = "nrf5340-net",
116 context = "nrf91"
117 ))] {
118 embassy_nrf::pac::NVMC
119 .icachecnf()
120 .write(|w| w.set_cacheen(true));
121 }
122 else if #[cfg(context = "nrf5340-app")] {
123 embassy_nrf::pac::CACHE_S
124 .enable().write(|w| w.set_enable(true));
125 }
126 }
127}