aboutsummaryrefslogtreecommitdiff
path: root/examples/nrf52840/src
diff options
context:
space:
mode:
authorjrmoulton <[email protected]>2025-06-10 15:47:54 -0600
committerjrmoulton <[email protected]>2025-06-10 15:48:36 -0600
commitcfad9798ff99d4de0571a512d156b5fe1ef1d427 (patch)
treefc3bf670f82d139de19466cddad1e909db7f3d2e /examples/nrf52840/src
parentfc342915e6155dec7bafa3e135da7f37a9a07f5c (diff)
parent6186d111a5c150946ee5b7e9e68d987a38c1a463 (diff)
merge new embassy changes
Diffstat (limited to 'examples/nrf52840/src')
-rw-r--r--examples/nrf52840/src/bin/buffered_uart.rs4
-rw-r--r--examples/nrf52840/src/bin/channel.rs4
-rw-r--r--examples/nrf52840/src/bin/channel_sender_receiver.rs11
-rw-r--r--examples/nrf52840/src/bin/ethernet_enc28j60.rs14
-rw-r--r--examples/nrf52840/src/bin/ieee802154_receive.rs38
-rw-r--r--examples/nrf52840/src/bin/ieee802154_send.rs39
-rw-r--r--examples/nrf52840/src/bin/multiprio.rs16
-rw-r--r--examples/nrf52840/src/bin/nfct.rs79
-rw-r--r--examples/nrf52840/src/bin/pdm_continuous.rs4
-rw-r--r--examples/nrf52840/src/bin/pwm_sequence_ws2812b.rs10
-rw-r--r--examples/nrf52840/src/bin/qspi_lowpower.rs14
-rwxr-xr-x[-rw-r--r--]examples/nrf52840/src/bin/rng.rs2
-rw-r--r--examples/nrf52840/src/bin/saadc.rs2
-rw-r--r--examples/nrf52840/src/bin/saadc_continuous.rs12
-rw-r--r--examples/nrf52840/src/bin/spis.rs2
-rw-r--r--examples/nrf52840/src/bin/twim.rs6
-rw-r--r--examples/nrf52840/src/bin/twim_lowpower.rs12
-rw-r--r--examples/nrf52840/src/bin/twis.rs2
-rw-r--r--examples/nrf52840/src/bin/uart.rs4
-rw-r--r--examples/nrf52840/src/bin/uart_idle.rs4
-rw-r--r--examples/nrf52840/src/bin/uart_split.rs4
-rw-r--r--examples/nrf52840/src/bin/usb_ethernet.rs26
-rw-r--r--examples/nrf52840/src/bin/usb_hid_keyboard.rs8
-rw-r--r--examples/nrf52840/src/bin/usb_hid_mouse.rs9
-rw-r--r--examples/nrf52840/src/bin/usb_serial.rs16
-rw-r--r--examples/nrf52840/src/bin/usb_serial_multitask.rs16
-rw-r--r--examples/nrf52840/src/bin/usb_serial_winusb.rs16
-rw-r--r--examples/nrf52840/src/bin/wdt.rs4
-rw-r--r--examples/nrf52840/src/bin/wifi_esp_hosted.rs11
29 files changed, 259 insertions, 130 deletions
diff --git a/examples/nrf52840/src/bin/buffered_uart.rs b/examples/nrf52840/src/bin/buffered_uart.rs
index 6ac72bcaf..f0a066818 100644
--- a/examples/nrf52840/src/bin/buffered_uart.rs
+++ b/examples/nrf52840/src/bin/buffered_uart.rs
@@ -9,7 +9,7 @@ use embedded_io_async::Write;
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11bind_interrupts!(struct Irqs { 11bind_interrupts!(struct Irqs {
12 UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>; 12 UARTE0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>;
13}); 13});
14 14
15#[embassy_executor::main] 15#[embassy_executor::main]
@@ -28,9 +28,9 @@ async fn main(_spawner: Spawner) {
28 p.PPI_CH0, 28 p.PPI_CH0,
29 p.PPI_CH1, 29 p.PPI_CH1,
30 p.PPI_GROUP0, 30 p.PPI_GROUP0,
31 Irqs,
32 p.P0_08, 31 p.P0_08,
33 p.P0_06, 32 p.P0_06,
33 Irqs,
34 config, 34 config,
35 &mut rx_buffer, 35 &mut rx_buffer,
36 &mut tx_buffer, 36 &mut tx_buffer,
diff --git a/examples/nrf52840/src/bin/channel.rs b/examples/nrf52840/src/bin/channel.rs
index 7fcea9dbd..e06ba1c73 100644
--- a/examples/nrf52840/src/bin/channel.rs
+++ b/examples/nrf52840/src/bin/channel.rs
@@ -35,8 +35,8 @@ async fn main(spawner: Spawner) {
35 35
36 loop { 36 loop {
37 match CHANNEL.receive().await { 37 match CHANNEL.receive().await {
38 LedState::On => led.set_high(), 38 LedState::On => led.set_low(),
39 LedState::Off => led.set_low(), 39 LedState::Off => led.set_high(),
40 } 40 }
41 } 41 }
42} 42}
diff --git a/examples/nrf52840/src/bin/channel_sender_receiver.rs b/examples/nrf52840/src/bin/channel_sender_receiver.rs
index 3095a04ec..74c62ca20 100644
--- a/examples/nrf52840/src/bin/channel_sender_receiver.rs
+++ b/examples/nrf52840/src/bin/channel_sender_receiver.rs
@@ -3,7 +3,8 @@
3 3
4use defmt::unwrap; 4use defmt::unwrap;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_nrf::gpio::{AnyPin, Level, Output, OutputDrive, Pin}; 6use embassy_nrf::gpio::{AnyPin, Level, Output, OutputDrive};
7use embassy_nrf::Peri;
7use embassy_sync::blocking_mutex::raw::NoopRawMutex; 8use embassy_sync::blocking_mutex::raw::NoopRawMutex;
8use embassy_sync::channel::{Channel, Receiver, Sender}; 9use embassy_sync::channel::{Channel, Receiver, Sender};
9use embassy_time::Timer; 10use embassy_time::Timer;
@@ -28,13 +29,13 @@ async fn send_task(sender: Sender<'static, NoopRawMutex, LedState, 1>) {
28} 29}
29 30
30#[embassy_executor::task] 31#[embassy_executor::task]
31async fn recv_task(led: AnyPin, receiver: Receiver<'static, NoopRawMutex, LedState, 1>) { 32async fn recv_task(led: Peri<'static, AnyPin>, receiver: Receiver<'static, NoopRawMutex, LedState, 1>) {
32 let mut led = Output::new(led, Level::Low, OutputDrive::Standard); 33 let mut led = Output::new(led, Level::Low, OutputDrive::Standard);
33 34
34 loop { 35 loop {
35 match receiver.receive().await { 36 match receiver.receive().await {
36 LedState::On => led.set_high(), 37 LedState::On => led.set_low(),
37 LedState::Off => led.set_low(), 38 LedState::Off => led.set_high(),
38 } 39 }
39 } 40 }
40} 41}
@@ -45,5 +46,5 @@ async fn main(spawner: Spawner) {
45 let channel = CHANNEL.init(Channel::new()); 46 let channel = CHANNEL.init(Channel::new());
46 47
47 unwrap!(spawner.spawn(send_task(channel.sender()))); 48 unwrap!(spawner.spawn(send_task(channel.sender())));
48 unwrap!(spawner.spawn(recv_task(p.P0_13.degrade(), channel.receiver()))); 49 unwrap!(spawner.spawn(recv_task(p.P0_13.into(), channel.receiver())));
49} 50}
diff --git a/examples/nrf52840/src/bin/ethernet_enc28j60.rs b/examples/nrf52840/src/bin/ethernet_enc28j60.rs
index 94cf09c88..0946492fe 100644
--- a/examples/nrf52840/src/bin/ethernet_enc28j60.rs
+++ b/examples/nrf52840/src/bin/ethernet_enc28j60.rs
@@ -4,7 +4,7 @@
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_net::tcp::TcpSocket; 6use embassy_net::tcp::TcpSocket;
7use embassy_net::{Stack, StackResources}; 7use embassy_net::StackResources;
8use embassy_net_enc28j60::Enc28j60; 8use embassy_net_enc28j60::Enc28j60;
9use embassy_nrf::gpio::{Level, Output, OutputDrive}; 9use embassy_nrf::gpio::{Level, Output, OutputDrive};
10use embassy_nrf::rng::Rng; 10use embassy_nrf::rng::Rng;
@@ -23,11 +23,12 @@ bind_interrupts!(struct Irqs {
23 23
24#[embassy_executor::task] 24#[embassy_executor::task]
25async fn net_task( 25async fn net_task(
26 stack: &'static Stack< 26 mut runner: embassy_net::Runner<
27 'static,
27 Enc28j60<ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static>, Delay>, Output<'static>>, 28 Enc28j60<ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static>, Delay>, Output<'static>>,
28 >, 29 >,
29) -> ! { 30) -> ! {
30 stack.run().await 31 runner.run().await
31} 32}
32 33
33#[embassy_executor::main] 34#[embassy_executor::main]
@@ -67,12 +68,9 @@ async fn main(spawner: Spawner) {
67 68
68 // Init network stack 69 // Init network stack
69 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); 70 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new();
70 static STACK: StaticCell< 71 let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed);
71 Stack<Enc28j60<ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static>, Delay>, Output<'static>>>,
72 > = StaticCell::new();
73 let stack = STACK.init(Stack::new(device, config, RESOURCES.init(StackResources::new()), seed));
74 72
75 unwrap!(spawner.spawn(net_task(stack))); 73 unwrap!(spawner.spawn(net_task(runner)));
76 74
77 // And now we can use it! 75 // And now we can use it!
78 76
diff --git a/examples/nrf52840/src/bin/ieee802154_receive.rs b/examples/nrf52840/src/bin/ieee802154_receive.rs
new file mode 100644
index 000000000..ede8fca65
--- /dev/null
+++ b/examples/nrf52840/src/bin/ieee802154_receive.rs
@@ -0,0 +1,38 @@
1#![no_std]
2#![no_main]
3
4use embassy_executor::Spawner;
5use embassy_nrf::config::{Config, HfclkSource};
6use embassy_nrf::gpio::{Level, Output, OutputDrive};
7use embassy_nrf::radio::ieee802154::{self, Packet};
8use embassy_nrf::{peripherals, radio};
9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _};
11
12embassy_nrf::bind_interrupts!(struct Irqs {
13 RADIO => radio::InterruptHandler<peripherals::RADIO>;
14});
15
16#[embassy_executor::main]
17async fn main(_spawner: Spawner) {
18 let mut config = Config::default();
19 config.hfclk_source = HfclkSource::ExternalXtal;
20 let peripherals = embassy_nrf::init(config);
21
22 // assumes LED on P0_15 with active-high polarity
23 let mut gpo_led = Output::new(peripherals.P0_15, Level::Low, OutputDrive::Standard);
24
25 let mut radio = ieee802154::Radio::new(peripherals.RADIO, Irqs);
26 let mut packet = Packet::new();
27
28 loop {
29 gpo_led.set_low();
30 let rv = radio.receive(&mut packet).await;
31 gpo_led.set_high();
32 match rv {
33 Err(_) => defmt::error!("receive() Err"),
34 Ok(_) => defmt::info!("receive() {:?}", *packet),
35 }
36 Timer::after_millis(100u64).await;
37 }
38}
diff --git a/examples/nrf52840/src/bin/ieee802154_send.rs b/examples/nrf52840/src/bin/ieee802154_send.rs
new file mode 100644
index 000000000..7af9d1d06
--- /dev/null
+++ b/examples/nrf52840/src/bin/ieee802154_send.rs
@@ -0,0 +1,39 @@
1#![no_std]
2#![no_main]
3
4use embassy_executor::Spawner;
5use embassy_nrf::config::{Config, HfclkSource};
6use embassy_nrf::gpio::{Level, Output, OutputDrive};
7use embassy_nrf::radio::ieee802154::{self, Packet};
8use embassy_nrf::{peripherals, radio};
9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _};
11
12embassy_nrf::bind_interrupts!(struct Irqs {
13 RADIO => radio::InterruptHandler<peripherals::RADIO>;
14});
15
16#[embassy_executor::main]
17async fn main(_spawner: Spawner) {
18 let mut config = Config::default();
19 config.hfclk_source = HfclkSource::ExternalXtal;
20 let peripherals = embassy_nrf::init(config);
21
22 // assumes LED on P0_15 with active-high polarity
23 let mut gpo_led = Output::new(peripherals.P0_15, Level::Low, OutputDrive::Standard);
24
25 let mut radio = ieee802154::Radio::new(peripherals.RADIO, Irqs);
26 let mut packet = Packet::new();
27
28 loop {
29 packet.copy_from_slice(&[0_u8; 16]);
30 gpo_led.set_high();
31 let rv = radio.try_send(&mut packet).await;
32 gpo_led.set_low();
33 match rv {
34 Err(_) => defmt::error!("try_send() Err"),
35 Ok(_) => defmt::info!("try_send() {:?}", *packet),
36 }
37 Timer::after_millis(1000u64).await;
38 }
39}
diff --git a/examples/nrf52840/src/bin/multiprio.rs b/examples/nrf52840/src/bin/multiprio.rs
index 797be93a7..d58613da4 100644
--- a/examples/nrf52840/src/bin/multiprio.rs
+++ b/examples/nrf52840/src/bin/multiprio.rs
@@ -112,12 +112,12 @@ static EXECUTOR_MED: InterruptExecutor = InterruptExecutor::new();
112static EXECUTOR_LOW: StaticCell<Executor> = StaticCell::new(); 112static EXECUTOR_LOW: StaticCell<Executor> = StaticCell::new();
113 113
114#[interrupt] 114#[interrupt]
115unsafe fn SWI1_EGU1() { 115unsafe fn EGU1_SWI1() {
116 EXECUTOR_HIGH.on_interrupt() 116 EXECUTOR_HIGH.on_interrupt()
117} 117}
118 118
119#[interrupt] 119#[interrupt]
120unsafe fn SWI0_EGU0() { 120unsafe fn EGU0_SWI0() {
121 EXECUTOR_MED.on_interrupt() 121 EXECUTOR_MED.on_interrupt()
122} 122}
123 123
@@ -127,14 +127,14 @@ fn main() -> ! {
127 127
128 let _p = embassy_nrf::init(Default::default()); 128 let _p = embassy_nrf::init(Default::default());
129 129
130 // High-priority executor: SWI1_EGU1, priority level 6 130 // High-priority executor: EGU1_SWI1, priority level 6
131 interrupt::SWI1_EGU1.set_priority(Priority::P6); 131 interrupt::EGU1_SWI1.set_priority(Priority::P6);
132 let spawner = EXECUTOR_HIGH.start(interrupt::SWI1_EGU1); 132 let spawner = EXECUTOR_HIGH.start(interrupt::EGU1_SWI1);
133 unwrap!(spawner.spawn(run_high())); 133 unwrap!(spawner.spawn(run_high()));
134 134
135 // Medium-priority executor: SWI0_EGU0, priority level 7 135 // Medium-priority executor: EGU0_SWI0, priority level 7
136 interrupt::SWI0_EGU0.set_priority(Priority::P7); 136 interrupt::EGU0_SWI0.set_priority(Priority::P7);
137 let spawner = EXECUTOR_MED.start(interrupt::SWI0_EGU0); 137 let spawner = EXECUTOR_MED.start(interrupt::EGU0_SWI0);
138 unwrap!(spawner.spawn(run_med())); 138 unwrap!(spawner.spawn(run_med()));
139 139
140 // Low priority executor: runs in thread mode, using WFE/SEV 140 // Low priority executor: runs in thread mode, using WFE/SEV
diff --git a/examples/nrf52840/src/bin/nfct.rs b/examples/nrf52840/src/bin/nfct.rs
new file mode 100644
index 000000000..d559d006a
--- /dev/null
+++ b/examples/nrf52840/src/bin/nfct.rs
@@ -0,0 +1,79 @@
1#![no_std]
2#![no_main]
3
4use defmt::*;
5use embassy_executor::Spawner;
6use embassy_nrf::config::HfclkSource;
7use embassy_nrf::nfct::{Config as NfcConfig, NfcId, NfcT};
8use embassy_nrf::{bind_interrupts, nfct};
9use {defmt_rtt as _, embassy_nrf as _, panic_probe as _};
10
11bind_interrupts!(struct Irqs {
12 NFCT => nfct::InterruptHandler;
13});
14
15#[embassy_executor::main]
16async fn main(_spawner: Spawner) {
17 let mut config = embassy_nrf::config::Config::default();
18 config.hfclk_source = HfclkSource::ExternalXtal;
19 let p = embassy_nrf::init(config);
20
21 dbg!("Setting up...");
22 let config = NfcConfig {
23 nfcid1: NfcId::DoubleSize([0x04, 0x68, 0x95, 0x71, 0xFA, 0x5C, 0x64]),
24 sdd_pat: nfct::SddPat::SDD00100,
25 plat_conf: 0b0000,
26 protocol: nfct::SelResProtocol::Type4A,
27 };
28
29 let mut nfc = NfcT::new(p.NFCT, Irqs, &config);
30
31 let mut buf = [0u8; 256];
32
33 loop {
34 info!("activating");
35 nfc.activate().await;
36
37 loop {
38 info!("rxing");
39 let n = match nfc.receive(&mut buf).await {
40 Ok(n) => n,
41 Err(e) => {
42 error!("rx error {}", e);
43 break;
44 }
45 };
46 let req = &buf[..n];
47 info!("received frame {:02x}", req);
48
49 let mut deselect = false;
50 let resp = match req {
51 [0xe0, ..] => {
52 info!("Got RATS, tx'ing ATS");
53 &[0x06, 0x77, 0x77, 0x81, 0x02, 0x80][..]
54 }
55 [0xc2] => {
56 info!("Got deselect!");
57 deselect = true;
58 &[0xc2]
59 }
60 _ => {
61 info!("Got unknown command!");
62 &[0xFF]
63 }
64 };
65
66 match nfc.transmit(resp).await {
67 Ok(()) => {}
68 Err(e) => {
69 error!("tx error {}", e);
70 break;
71 }
72 }
73
74 if deselect {
75 break;
76 }
77 }
78 }
79}
diff --git a/examples/nrf52840/src/bin/pdm_continuous.rs b/examples/nrf52840/src/bin/pdm_continuous.rs
index e948203a5..0d76636b0 100644
--- a/examples/nrf52840/src/bin/pdm_continuous.rs
+++ b/examples/nrf52840/src/bin/pdm_continuous.rs
@@ -20,14 +20,14 @@ bind_interrupts!(struct Irqs {
20 20
21#[embassy_executor::main] 21#[embassy_executor::main]
22async fn main(_p: Spawner) { 22async fn main(_p: Spawner) {
23 let mut p = embassy_nrf::init(Default::default()); 23 let p = embassy_nrf::init(Default::default());
24 let mut config = Config::default(); 24 let mut config = Config::default();
25 // Pins are correct for the onboard microphone on the Feather nRF52840 Sense. 25 // Pins are correct for the onboard microphone on the Feather nRF52840 Sense.
26 config.frequency = Frequency::_1280K; // 16 kHz sample rate 26 config.frequency = Frequency::_1280K; // 16 kHz sample rate
27 config.ratio = Ratio::RATIO80; 27 config.ratio = Ratio::RATIO80;
28 config.operation_mode = OperationMode::Mono; 28 config.operation_mode = OperationMode::Mono;
29 config.gain_left = I7F1::from_bits(5); // 2.5 dB 29 config.gain_left = I7F1::from_bits(5); // 2.5 dB
30 let mut pdm = Pdm::new(p.PDM, Irqs, &mut p.P0_00, &mut p.P0_01, config); 30 let mut pdm = Pdm::new(p.PDM, Irqs, p.P0_00, p.P0_01, config);
31 31
32 let mut bufs = [[0; 1024]; 2]; 32 let mut bufs = [[0; 1024]; 2];
33 33
diff --git a/examples/nrf52840/src/bin/pwm_sequence_ws2812b.rs b/examples/nrf52840/src/bin/pwm_sequence_ws2812b.rs
index 751cf4425..df8da8800 100644
--- a/examples/nrf52840/src/bin/pwm_sequence_ws2812b.rs
+++ b/examples/nrf52840/src/bin/pwm_sequence_ws2812b.rs
@@ -14,6 +14,16 @@ use {defmt_rtt as _, panic_probe as _};
14// https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf. 14// https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf.
15// This demo lights up a single LED in blue. It then proceeds 15// This demo lights up a single LED in blue. It then proceeds
16// to pulsate the LED rapidly. 16// to pulsate the LED rapidly.
17//
18// /!\ NOTE FOR nRF52840-DK users /!\
19//
20// If you're using the nRF52840-DK, the default "Vdd" power source
21// will set the GPIO I/O voltage to 3.0v, using the onboard regulator.
22// This can sometimes not be enough to drive the WS2812B signal if you
23// are not using an external level shifter. If you set the board to "USB"
24// power instead (and provide power via the "nRF USB" connector), the board
25// will instead power the I/Os at 3.3v, which is often enough (but still
26// out of official spec) for the WS2812Bs to work properly.
17 27
18// In the following declarations, setting the high bit tells the PWM 28// In the following declarations, setting the high bit tells the PWM
19// to reverse polarity, which is what the WS2812B expects. 29// to reverse polarity, which is what the WS2812B expects.
diff --git a/examples/nrf52840/src/bin/qspi_lowpower.rs b/examples/nrf52840/src/bin/qspi_lowpower.rs
index 516c9b481..238a0d941 100644
--- a/examples/nrf52840/src/bin/qspi_lowpower.rs
+++ b/examples/nrf52840/src/bin/qspi_lowpower.rs
@@ -37,14 +37,14 @@ async fn main(_p: Spawner) {
37 }); 37 });
38 38
39 let mut q = qspi::Qspi::new( 39 let mut q = qspi::Qspi::new(
40 &mut p.QSPI, 40 p.QSPI.reborrow(),
41 Irqs, 41 Irqs,
42 &mut p.P0_19, 42 p.P0_19.reborrow(),
43 &mut p.P0_17, 43 p.P0_17.reborrow(),
44 &mut p.P0_20, 44 p.P0_20.reborrow(),
45 &mut p.P0_21, 45 p.P0_21.reborrow(),
46 &mut p.P0_22, 46 p.P0_22.reborrow(),
47 &mut p.P0_23, 47 p.P0_23.reborrow(),
48 config, 48 config,
49 ); 49 );
50 50
diff --git a/examples/nrf52840/src/bin/rng.rs b/examples/nrf52840/src/bin/rng.rs
index 326054c9a..f32d17cd9 100644..100755
--- a/examples/nrf52840/src/bin/rng.rs
+++ b/examples/nrf52840/src/bin/rng.rs
@@ -22,7 +22,7 @@ async fn main(_spawner: Spawner) {
22 defmt::info!("Some random bytes: {:?}", bytes); 22 defmt::info!("Some random bytes: {:?}", bytes);
23 23
24 // Sync API with `rand` 24 // Sync API with `rand`
25 defmt::info!("A random number from 1 to 10: {:?}", rng.gen_range(1..=10)); 25 defmt::info!("A random number from 1 to 10: {:?}", rng.random_range(1..=10));
26 26
27 let mut bytes = [0; 1024]; 27 let mut bytes = [0; 1024];
28 rng.fill_bytes(&mut bytes).await; 28 rng.fill_bytes(&mut bytes).await;
diff --git a/examples/nrf52840/src/bin/saadc.rs b/examples/nrf52840/src/bin/saadc.rs
index 653b7d606..cf2d860ab 100644
--- a/examples/nrf52840/src/bin/saadc.rs
+++ b/examples/nrf52840/src/bin/saadc.rs
@@ -16,7 +16,7 @@ bind_interrupts!(struct Irqs {
16async fn main(_p: Spawner) { 16async fn main(_p: Spawner) {
17 let mut p = embassy_nrf::init(Default::default()); 17 let mut p = embassy_nrf::init(Default::default());
18 let config = Config::default(); 18 let config = Config::default();
19 let channel_config = ChannelConfig::single_ended(&mut p.P0_02); 19 let channel_config = ChannelConfig::single_ended(p.P0_02.reborrow());
20 let mut saadc = Saadc::new(p.SAADC, Irqs, config, [channel_config]); 20 let mut saadc = Saadc::new(p.SAADC, Irqs, config, [channel_config]);
21 21
22 loop { 22 loop {
diff --git a/examples/nrf52840/src/bin/saadc_continuous.rs b/examples/nrf52840/src/bin/saadc_continuous.rs
index f76fa3570..e8f169c8c 100644
--- a/examples/nrf52840/src/bin/saadc_continuous.rs
+++ b/examples/nrf52840/src/bin/saadc_continuous.rs
@@ -18,9 +18,9 @@ bind_interrupts!(struct Irqs {
18async fn main(_p: Spawner) { 18async fn main(_p: Spawner) {
19 let mut p = embassy_nrf::init(Default::default()); 19 let mut p = embassy_nrf::init(Default::default());
20 let config = Config::default(); 20 let config = Config::default();
21 let channel_1_config = ChannelConfig::single_ended(&mut p.P0_02); 21 let channel_1_config = ChannelConfig::single_ended(p.P0_02.reborrow());
22 let channel_2_config = ChannelConfig::single_ended(&mut p.P0_03); 22 let channel_2_config = ChannelConfig::single_ended(p.P0_03.reborrow());
23 let channel_3_config = ChannelConfig::single_ended(&mut p.P0_04); 23 let channel_3_config = ChannelConfig::single_ended(p.P0_04.reborrow());
24 let mut saadc = Saadc::new( 24 let mut saadc = Saadc::new(
25 p.SAADC, 25 p.SAADC,
26 Irqs, 26 Irqs,
@@ -40,9 +40,9 @@ async fn main(_p: Spawner) {
40 40
41 saadc 41 saadc
42 .run_task_sampler( 42 .run_task_sampler(
43 &mut p.TIMER0, 43 p.TIMER0.reborrow(),
44 &mut p.PPI_CH0, 44 p.PPI_CH0.reborrow(),
45 &mut p.PPI_CH1, 45 p.PPI_CH1.reborrow(),
46 Frequency::F1MHz, 46 Frequency::F1MHz,
47 1000, // We want to sample at 1KHz 47 1000, // We want to sample at 1KHz
48 &mut bufs, 48 &mut bufs,
diff --git a/examples/nrf52840/src/bin/spis.rs b/examples/nrf52840/src/bin/spis.rs
index 613cd37ab..4f28da07e 100644
--- a/examples/nrf52840/src/bin/spis.rs
+++ b/examples/nrf52840/src/bin/spis.rs
@@ -8,7 +8,7 @@ use embassy_nrf::{bind_interrupts, peripherals, spis};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10bind_interrupts!(struct Irqs { 10bind_interrupts!(struct Irqs {
11 SPIM2_SPIS2_SPI2 => spis::InterruptHandler<peripherals::SPI2>; 11 SPI2 => spis::InterruptHandler<peripherals::SPI2>;
12}); 12});
13 13
14#[embassy_executor::main] 14#[embassy_executor::main]
diff --git a/examples/nrf52840/src/bin/twim.rs b/examples/nrf52840/src/bin/twim.rs
index a9a0765e8..e30a3855d 100644
--- a/examples/nrf52840/src/bin/twim.rs
+++ b/examples/nrf52840/src/bin/twim.rs
@@ -9,12 +9,13 @@ use defmt::*;
9use embassy_executor::Spawner; 9use embassy_executor::Spawner;
10use embassy_nrf::twim::{self, Twim}; 10use embassy_nrf::twim::{self, Twim};
11use embassy_nrf::{bind_interrupts, peripherals}; 11use embassy_nrf::{bind_interrupts, peripherals};
12use static_cell::ConstStaticCell;
12use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
13 14
14const ADDRESS: u8 = 0x50; 15const ADDRESS: u8 = 0x50;
15 16
16bind_interrupts!(struct Irqs { 17bind_interrupts!(struct Irqs {
17 SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twim::InterruptHandler<peripherals::TWISPI0>; 18 TWISPI0 => twim::InterruptHandler<peripherals::TWISPI0>;
18}); 19});
19 20
20#[embassy_executor::main] 21#[embassy_executor::main]
@@ -22,7 +23,8 @@ async fn main(_spawner: Spawner) {
22 let p = embassy_nrf::init(Default::default()); 23 let p = embassy_nrf::init(Default::default());
23 info!("Initializing TWI..."); 24 info!("Initializing TWI...");
24 let config = twim::Config::default(); 25 let config = twim::Config::default();
25 let mut twi = Twim::new(p.TWISPI0, Irqs, p.P0_03, p.P0_04, config); 26 static RAM_BUFFER: ConstStaticCell<[u8; 16]> = ConstStaticCell::new([0; 16]);
27 let mut twi = Twim::new(p.TWISPI0, Irqs, p.P0_03, p.P0_04, config, RAM_BUFFER.take());
26 28
27 info!("Reading..."); 29 info!("Reading...");
28 30
diff --git a/examples/nrf52840/src/bin/twim_lowpower.rs b/examples/nrf52840/src/bin/twim_lowpower.rs
index c743614b8..f7380e20d 100644
--- a/examples/nrf52840/src/bin/twim_lowpower.rs
+++ b/examples/nrf52840/src/bin/twim_lowpower.rs
@@ -19,7 +19,7 @@ use {defmt_rtt as _, panic_probe as _};
19const ADDRESS: u8 = 0x50; 19const ADDRESS: u8 = 0x50;
20 20
21bind_interrupts!(struct Irqs { 21bind_interrupts!(struct Irqs {
22 SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twim::InterruptHandler<peripherals::TWISPI0>; 22 TWISPI0 => twim::InterruptHandler<peripherals::TWISPI0>;
23}); 23});
24 24
25#[embassy_executor::main] 25#[embassy_executor::main]
@@ -30,9 +30,17 @@ async fn main(_p: Spawner) {
30 loop { 30 loop {
31 info!("Initializing TWI..."); 31 info!("Initializing TWI...");
32 let config = twim::Config::default(); 32 let config = twim::Config::default();
33 let mut ram_buffer = [0u8; 16];
33 34
34 // Create the TWIM instance with borrowed singletons, so they're not consumed. 35 // Create the TWIM instance with borrowed singletons, so they're not consumed.
35 let mut twi = Twim::new(&mut p.TWISPI0, Irqs, &mut p.P0_03, &mut p.P0_04, config); 36 let mut twi = Twim::new(
37 p.TWISPI0.reborrow(),
38 Irqs,
39 p.P0_03.reborrow(),
40 p.P0_04.reborrow(),
41 config,
42 &mut ram_buffer,
43 );
36 44
37 info!("Reading..."); 45 info!("Reading...");
38 46
diff --git a/examples/nrf52840/src/bin/twis.rs b/examples/nrf52840/src/bin/twis.rs
index 88bd4cceb..856b34140 100644
--- a/examples/nrf52840/src/bin/twis.rs
+++ b/examples/nrf52840/src/bin/twis.rs
@@ -10,7 +10,7 @@ use embassy_nrf::{bind_interrupts, peripherals};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs { 12bind_interrupts!(struct Irqs {
13 SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twis::InterruptHandler<peripherals::TWISPI0>; 13 TWISPI0 => twis::InterruptHandler<peripherals::TWISPI0>;
14}); 14});
15 15
16#[embassy_executor::main] 16#[embassy_executor::main]
diff --git a/examples/nrf52840/src/bin/uart.rs b/examples/nrf52840/src/bin/uart.rs
index accaccea1..f9f8d74ab 100644
--- a/examples/nrf52840/src/bin/uart.rs
+++ b/examples/nrf52840/src/bin/uart.rs
@@ -7,7 +7,7 @@ use embassy_nrf::{bind_interrupts, peripherals, uarte};
7use {defmt_rtt as _, panic_probe as _}; 7use {defmt_rtt as _, panic_probe as _};
8 8
9bind_interrupts!(struct Irqs { 9bind_interrupts!(struct Irqs {
10 UARTE0_UART0 => uarte::InterruptHandler<peripherals::UARTE0>; 10 UARTE0 => uarte::InterruptHandler<peripherals::UARTE0>;
11}); 11});
12 12
13#[embassy_executor::main] 13#[embassy_executor::main]
@@ -17,7 +17,7 @@ async fn main(_spawner: Spawner) {
17 config.parity = uarte::Parity::EXCLUDED; 17 config.parity = uarte::Parity::EXCLUDED;
18 config.baudrate = uarte::Baudrate::BAUD115200; 18 config.baudrate = uarte::Baudrate::BAUD115200;
19 19
20 let mut uart = uarte::Uarte::new(p.UARTE0, Irqs, p.P0_08, p.P0_06, config); 20 let mut uart = uarte::Uarte::new(p.UARTE0, p.P0_08, p.P0_06, Irqs, config);
21 21
22 info!("uarte initialized!"); 22 info!("uarte initialized!");
23 23
diff --git a/examples/nrf52840/src/bin/uart_idle.rs b/examples/nrf52840/src/bin/uart_idle.rs
index fa93bcf21..00e3ae904 100644
--- a/examples/nrf52840/src/bin/uart_idle.rs
+++ b/examples/nrf52840/src/bin/uart_idle.rs
@@ -8,7 +8,7 @@ use embassy_nrf::{bind_interrupts, uarte};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10bind_interrupts!(struct Irqs { 10bind_interrupts!(struct Irqs {
11 UARTE0_UART0 => uarte::InterruptHandler<UARTE0>; 11 UARTE0 => uarte::InterruptHandler<UARTE0>;
12}); 12});
13 13
14#[embassy_executor::main] 14#[embassy_executor::main]
@@ -18,7 +18,7 @@ async fn main(_spawner: Spawner) {
18 config.parity = uarte::Parity::EXCLUDED; 18 config.parity = uarte::Parity::EXCLUDED;
19 config.baudrate = uarte::Baudrate::BAUD115200; 19 config.baudrate = uarte::Baudrate::BAUD115200;
20 20
21 let uart = uarte::Uarte::new(p.UARTE0, Irqs, p.P0_08, p.P0_06, config); 21 let uart = uarte::Uarte::new(p.UARTE0, p.P0_08, p.P0_06, Irqs, config);
22 let (mut tx, mut rx) = uart.split_with_idle(p.TIMER0, p.PPI_CH0, p.PPI_CH1); 22 let (mut tx, mut rx) = uart.split_with_idle(p.TIMER0, p.PPI_CH0, p.PPI_CH1);
23 23
24 info!("uarte initialized!"); 24 info!("uarte initialized!");
diff --git a/examples/nrf52840/src/bin/uart_split.rs b/examples/nrf52840/src/bin/uart_split.rs
index c7510a9a8..46be8f636 100644
--- a/examples/nrf52840/src/bin/uart_split.rs
+++ b/examples/nrf52840/src/bin/uart_split.rs
@@ -13,7 +13,7 @@ use {defmt_rtt as _, panic_probe as _};
13static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new(); 13static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new();
14 14
15bind_interrupts!(struct Irqs { 15bind_interrupts!(struct Irqs {
16 UARTE0_UART0 => uarte::InterruptHandler<UARTE0>; 16 UARTE0 => uarte::InterruptHandler<UARTE0>;
17}); 17});
18 18
19#[embassy_executor::main] 19#[embassy_executor::main]
@@ -23,7 +23,7 @@ async fn main(spawner: Spawner) {
23 config.parity = uarte::Parity::EXCLUDED; 23 config.parity = uarte::Parity::EXCLUDED;
24 config.baudrate = uarte::Baudrate::BAUD115200; 24 config.baudrate = uarte::Baudrate::BAUD115200;
25 25
26 let uart = uarte::Uarte::new(p.UARTE0, Irqs, p.P0_08, p.P0_06, config); 26 let uart = uarte::Uarte::new(p.UARTE0, p.P0_08, p.P0_06, Irqs, config);
27 let (mut tx, rx) = uart.split(); 27 let (mut tx, rx) = uart.split();
28 28
29 info!("uarte initialized!"); 29 info!("uarte initialized!");
diff --git a/examples/nrf52840/src/bin/usb_ethernet.rs b/examples/nrf52840/src/bin/usb_ethernet.rs
index e56b215e3..49856012d 100644
--- a/examples/nrf52840/src/bin/usb_ethernet.rs
+++ b/examples/nrf52840/src/bin/usb_ethernet.rs
@@ -1,12 +1,10 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5
6use defmt::*; 4use defmt::*;
7use embassy_executor::Spawner; 5use embassy_executor::Spawner;
8use embassy_net::tcp::TcpSocket; 6use embassy_net::tcp::TcpSocket;
9use embassy_net::{Stack, StackResources}; 7use embassy_net::StackResources;
10use embassy_nrf::rng::Rng; 8use embassy_nrf::rng::Rng;
11use embassy_nrf::usb::vbus_detect::HardwareVbusDetect; 9use embassy_nrf::usb::vbus_detect::HardwareVbusDetect;
12use embassy_nrf::usb::Driver; 10use embassy_nrf::usb::Driver;
@@ -20,7 +18,7 @@ use {defmt_rtt as _, panic_probe as _};
20 18
21bind_interrupts!(struct Irqs { 19bind_interrupts!(struct Irqs {
22 USBD => usb::InterruptHandler<peripherals::USBD>; 20 USBD => usb::InterruptHandler<peripherals::USBD>;
23 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 21 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
24 RNG => rng::InterruptHandler<peripherals::RNG>; 22 RNG => rng::InterruptHandler<peripherals::RNG>;
25}); 23});
26 24
@@ -39,18 +37,17 @@ async fn usb_ncm_task(class: Runner<'static, MyDriver, MTU>) -> ! {
39} 37}
40 38
41#[embassy_executor::task] 39#[embassy_executor::task]
42async fn net_task(stack: &'static Stack<Device<'static, MTU>>) -> ! { 40async fn net_task(mut runner: embassy_net::Runner<'static, Device<'static, MTU>>) -> ! {
43 stack.run().await 41 runner.run().await
44} 42}
45 43
46#[embassy_executor::main] 44#[embassy_executor::main]
47async fn main(spawner: Spawner) { 45async fn main(spawner: Spawner) {
48 let p = embassy_nrf::init(Default::default()); 46 let p = embassy_nrf::init(Default::default());
49 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
50 47
51 info!("Enabling ext hfosc..."); 48 info!("Enabling ext hfosc...");
52 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 49 pac::CLOCK.tasks_hfclkstart().write_value(1);
53 while clock.events_hfclkstarted.read().bits() != 1 {} 50 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
54 51
55 // Create the driver, from the HAL. 52 // Create the driver, from the HAL.
56 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 53 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
@@ -63,12 +60,6 @@ async fn main(spawner: Spawner) {
63 config.max_power = 100; 60 config.max_power = 100;
64 config.max_packet_size_0 = 64; 61 config.max_packet_size_0 = 64;
65 62
66 // Required for Windows support.
67 config.composite_with_iads = true;
68 config.device_class = 0xEF;
69 config.device_sub_class = 0x02;
70 config.device_protocol = 0x01;
71
72 // Create embassy-usb DeviceBuilder using the driver and config. 63 // Create embassy-usb DeviceBuilder using the driver and config.
73 static CONFIG_DESC: StaticCell<[u8; 256]> = StaticCell::new(); 64 static CONFIG_DESC: StaticCell<[u8; 256]> = StaticCell::new();
74 static BOS_DESC: StaticCell<[u8; 256]> = StaticCell::new(); 65 static BOS_DESC: StaticCell<[u8; 256]> = StaticCell::new();
@@ -116,10 +107,9 @@ async fn main(spawner: Spawner) {
116 107
117 // Init network stack 108 // Init network stack
118 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); 109 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new();
119 static STACK: StaticCell<Stack<Device<'static, MTU>>> = StaticCell::new(); 110 let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed);
120 let stack = &*STACK.init(Stack::new(device, config, RESOURCES.init(StackResources::new()), seed));
121 111
122 unwrap!(spawner.spawn(net_task(stack))); 112 unwrap!(spawner.spawn(net_task(runner)));
123 113
124 // And now we can use it! 114 // And now we can use it!
125 115
diff --git a/examples/nrf52840/src/bin/usb_hid_keyboard.rs b/examples/nrf52840/src/bin/usb_hid_keyboard.rs
index e33ee5866..5a9dc90a2 100644
--- a/examples/nrf52840/src/bin/usb_hid_keyboard.rs
+++ b/examples/nrf52840/src/bin/usb_hid_keyboard.rs
@@ -1,7 +1,6 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5use core::sync::atomic::{AtomicBool, Ordering}; 4use core::sync::atomic::{AtomicBool, Ordering};
6 5
7use defmt::*; 6use defmt::*;
@@ -22,7 +21,7 @@ use {defmt_rtt as _, panic_probe as _};
22 21
23bind_interrupts!(struct Irqs { 22bind_interrupts!(struct Irqs {
24 USBD => usb::InterruptHandler<peripherals::USBD>; 23 USBD => usb::InterruptHandler<peripherals::USBD>;
25 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 24 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
26}); 25});
27 26
28static SUSPENDED: AtomicBool = AtomicBool::new(false); 27static SUSPENDED: AtomicBool = AtomicBool::new(false);
@@ -30,11 +29,10 @@ static SUSPENDED: AtomicBool = AtomicBool::new(false);
30#[embassy_executor::main] 29#[embassy_executor::main]
31async fn main(_spawner: Spawner) { 30async fn main(_spawner: Spawner) {
32 let p = embassy_nrf::init(Default::default()); 31 let p = embassy_nrf::init(Default::default());
33 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
34 32
35 info!("Enabling ext hfosc..."); 33 info!("Enabling ext hfosc...");
36 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 34 pac::CLOCK.tasks_hfclkstart().write_value(1);
37 while clock.events_hfclkstarted.read().bits() != 1 {} 35 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
38 36
39 // Create the driver, from the HAL. 37 // Create the driver, from the HAL.
40 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 38 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
diff --git a/examples/nrf52840/src/bin/usb_hid_mouse.rs b/examples/nrf52840/src/bin/usb_hid_mouse.rs
index 8076ac283..80cda70e3 100644
--- a/examples/nrf52840/src/bin/usb_hid_mouse.rs
+++ b/examples/nrf52840/src/bin/usb_hid_mouse.rs
@@ -1,8 +1,6 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5
6use defmt::*; 4use defmt::*;
7use embassy_executor::Spawner; 5use embassy_executor::Spawner;
8use embassy_futures::join::join; 6use embassy_futures::join::join;
@@ -18,17 +16,16 @@ use {defmt_rtt as _, panic_probe as _};
18 16
19bind_interrupts!(struct Irqs { 17bind_interrupts!(struct Irqs {
20 USBD => usb::InterruptHandler<peripherals::USBD>; 18 USBD => usb::InterruptHandler<peripherals::USBD>;
21 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 19 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
22}); 20});
23 21
24#[embassy_executor::main] 22#[embassy_executor::main]
25async fn main(_spawner: Spawner) { 23async fn main(_spawner: Spawner) {
26 let p = embassy_nrf::init(Default::default()); 24 let p = embassy_nrf::init(Default::default());
27 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
28 25
29 info!("Enabling ext hfosc..."); 26 info!("Enabling ext hfosc...");
30 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 27 pac::CLOCK.tasks_hfclkstart().write_value(1);
31 while clock.events_hfclkstarted.read().bits() != 1 {} 28 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
32 29
33 // Create the driver, from the HAL. 30 // Create the driver, from the HAL.
34 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 31 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
diff --git a/examples/nrf52840/src/bin/usb_serial.rs b/examples/nrf52840/src/bin/usb_serial.rs
index 02048e692..8d05df791 100644
--- a/examples/nrf52840/src/bin/usb_serial.rs
+++ b/examples/nrf52840/src/bin/usb_serial.rs
@@ -1,8 +1,6 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5
6use defmt::{info, panic}; 4use defmt::{info, panic};
7use embassy_executor::Spawner; 5use embassy_executor::Spawner;
8use embassy_futures::join::join; 6use embassy_futures::join::join;
@@ -16,17 +14,16 @@ use {defmt_rtt as _, panic_probe as _};
16 14
17bind_interrupts!(struct Irqs { 15bind_interrupts!(struct Irqs {
18 USBD => usb::InterruptHandler<peripherals::USBD>; 16 USBD => usb::InterruptHandler<peripherals::USBD>;
19 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 17 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
20}); 18});
21 19
22#[embassy_executor::main] 20#[embassy_executor::main]
23async fn main(_spawner: Spawner) { 21async fn main(_spawner: Spawner) {
24 let p = embassy_nrf::init(Default::default()); 22 let p = embassy_nrf::init(Default::default());
25 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
26 23
27 info!("Enabling ext hfosc..."); 24 info!("Enabling ext hfosc...");
28 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 25 pac::CLOCK.tasks_hfclkstart().write_value(1);
29 while clock.events_hfclkstarted.read().bits() != 1 {} 26 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
30 27
31 // Create the driver, from the HAL. 28 // Create the driver, from the HAL.
32 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 29 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
@@ -39,13 +36,6 @@ async fn main(_spawner: Spawner) {
39 config.max_power = 100; 36 config.max_power = 100;
40 config.max_packet_size_0 = 64; 37 config.max_packet_size_0 = 64;
41 38
42 // Required for windows compatibility.
43 // https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.9.1/kconfig/CONFIG_CDC_ACM_IAD.html#help
44 config.device_class = 0xEF;
45 config.device_sub_class = 0x02;
46 config.device_protocol = 0x01;
47 config.composite_with_iads = true;
48
49 // Create embassy-usb DeviceBuilder using the driver and config. 39 // Create embassy-usb DeviceBuilder using the driver and config.
50 // It needs some buffers for building the descriptors. 40 // It needs some buffers for building the descriptors.
51 let mut config_descriptor = [0; 256]; 41 let mut config_descriptor = [0; 256];
diff --git a/examples/nrf52840/src/bin/usb_serial_multitask.rs b/examples/nrf52840/src/bin/usb_serial_multitask.rs
index 895cca8b9..5e5b4de35 100644
--- a/examples/nrf52840/src/bin/usb_serial_multitask.rs
+++ b/examples/nrf52840/src/bin/usb_serial_multitask.rs
@@ -1,8 +1,6 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5
6use defmt::{info, panic, unwrap}; 4use defmt::{info, panic, unwrap};
7use embassy_executor::Spawner; 5use embassy_executor::Spawner;
8use embassy_nrf::usb::vbus_detect::HardwareVbusDetect; 6use embassy_nrf::usb::vbus_detect::HardwareVbusDetect;
@@ -16,7 +14,7 @@ use {defmt_rtt as _, panic_probe as _};
16 14
17bind_interrupts!(struct Irqs { 15bind_interrupts!(struct Irqs {
18 USBD => usb::InterruptHandler<peripherals::USBD>; 16 USBD => usb::InterruptHandler<peripherals::USBD>;
19 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 17 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
20}); 18});
21 19
22type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; 20type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>;
@@ -39,11 +37,10 @@ async fn echo_task(mut class: CdcAcmClass<'static, MyDriver>) {
39#[embassy_executor::main] 37#[embassy_executor::main]
40async fn main(spawner: Spawner) { 38async fn main(spawner: Spawner) {
41 let p = embassy_nrf::init(Default::default()); 39 let p = embassy_nrf::init(Default::default());
42 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
43 40
44 info!("Enabling ext hfosc..."); 41 info!("Enabling ext hfosc...");
45 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 42 pac::CLOCK.tasks_hfclkstart().write_value(1);
46 while clock.events_hfclkstarted.read().bits() != 1 {} 43 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
47 44
48 // Create the driver, from the HAL. 45 // Create the driver, from the HAL.
49 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 46 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
@@ -56,13 +53,6 @@ async fn main(spawner: Spawner) {
56 config.max_power = 100; 53 config.max_power = 100;
57 config.max_packet_size_0 = 64; 54 config.max_packet_size_0 = 64;
58 55
59 // Required for windows compatibility.
60 // https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.9.1/kconfig/CONFIG_CDC_ACM_IAD.html#help
61 config.device_class = 0xEF;
62 config.device_sub_class = 0x02;
63 config.device_protocol = 0x01;
64 config.composite_with_iads = true;
65
66 static STATE: StaticCell<State> = StaticCell::new(); 56 static STATE: StaticCell<State> = StaticCell::new();
67 let state = STATE.init(State::new()); 57 let state = STATE.init(State::new());
68 58
diff --git a/examples/nrf52840/src/bin/usb_serial_winusb.rs b/examples/nrf52840/src/bin/usb_serial_winusb.rs
index c6675a3d3..8a20ce673 100644
--- a/examples/nrf52840/src/bin/usb_serial_winusb.rs
+++ b/examples/nrf52840/src/bin/usb_serial_winusb.rs
@@ -1,8 +1,6 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::mem;
5
6use defmt::{info, panic}; 4use defmt::{info, panic};
7use embassy_executor::Spawner; 5use embassy_executor::Spawner;
8use embassy_futures::join::join; 6use embassy_futures::join::join;
@@ -18,7 +16,7 @@ use {defmt_rtt as _, panic_probe as _};
18 16
19bind_interrupts!(struct Irqs { 17bind_interrupts!(struct Irqs {
20 USBD => usb::InterruptHandler<peripherals::USBD>; 18 USBD => usb::InterruptHandler<peripherals::USBD>;
21 POWER_CLOCK => usb::vbus_detect::InterruptHandler; 19 CLOCK_POWER => usb::vbus_detect::InterruptHandler;
22}); 20});
23 21
24// This is a randomly generated GUID to allow clients on Windows to find our device 22// This is a randomly generated GUID to allow clients on Windows to find our device
@@ -27,11 +25,10 @@ const DEVICE_INTERFACE_GUIDS: &[&str] = &["{EAA9A5DC-30BA-44BC-9232-606CDC875321
27#[embassy_executor::main] 25#[embassy_executor::main]
28async fn main(_spawner: Spawner) { 26async fn main(_spawner: Spawner) {
29 let p = embassy_nrf::init(Default::default()); 27 let p = embassy_nrf::init(Default::default());
30 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
31 28
32 info!("Enabling ext hfosc..."); 29 info!("Enabling ext hfosc...");
33 clock.tasks_hfclkstart.write(|w| unsafe { w.bits(1) }); 30 pac::CLOCK.tasks_hfclkstart().write_value(1);
34 while clock.events_hfclkstarted.read().bits() != 1 {} 31 while pac::CLOCK.events_hfclkstarted().read() != 1 {}
35 32
36 // Create the driver, from the HAL. 33 // Create the driver, from the HAL.
37 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); 34 let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs));
@@ -44,13 +41,6 @@ async fn main(_spawner: Spawner) {
44 config.max_power = 100; 41 config.max_power = 100;
45 config.max_packet_size_0 = 64; 42 config.max_packet_size_0 = 64;
46 43
47 // Required for windows compatibility.
48 // https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.9.1/kconfig/CONFIG_CDC_ACM_IAD.html#help
49 config.device_class = 0xEF;
50 config.device_sub_class = 0x02;
51 config.device_protocol = 0x01;
52 config.composite_with_iads = true;
53
54 // Create embassy-usb DeviceBuilder using the driver and config. 44 // Create embassy-usb DeviceBuilder using the driver and config.
55 // It needs some buffers for building the descriptors. 45 // It needs some buffers for building the descriptors.
56 let mut config_descriptor = [0; 256]; 46 let mut config_descriptor = [0; 256];
diff --git a/examples/nrf52840/src/bin/wdt.rs b/examples/nrf52840/src/bin/wdt.rs
index ede88cc26..0d9ee3cf8 100644
--- a/examples/nrf52840/src/bin/wdt.rs
+++ b/examples/nrf52840/src/bin/wdt.rs
@@ -4,7 +4,7 @@
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_nrf::gpio::{Input, Pull}; 6use embassy_nrf::gpio::{Input, Pull};
7use embassy_nrf::wdt::{Config, Watchdog}; 7use embassy_nrf::wdt::{Config, HaltConfig, Watchdog};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -17,7 +17,7 @@ async fn main(_spawner: Spawner) {
17 17
18 // This is needed for `probe-rs run` to be able to catch the panic message 18 // This is needed for `probe-rs run` to be able to catch the panic message
19 // in the WDT interrupt. The core resets 2 ticks after firing the interrupt. 19 // in the WDT interrupt. The core resets 2 ticks after firing the interrupt.
20 config.run_during_debug_halt = false; 20 config.action_during_debug_halt = HaltConfig::PAUSE;
21 21
22 let (_wdt, [mut handle]) = match Watchdog::try_new(p.WDT, config) { 22 let (_wdt, [mut handle]) = match Watchdog::try_new(p.WDT, config) {
23 Ok(x) => x, 23 Ok(x) => x,
diff --git a/examples/nrf52840/src/bin/wifi_esp_hosted.rs b/examples/nrf52840/src/bin/wifi_esp_hosted.rs
index a3b69a99b..26eaf485e 100644
--- a/examples/nrf52840/src/bin/wifi_esp_hosted.rs
+++ b/examples/nrf52840/src/bin/wifi_esp_hosted.rs
@@ -4,7 +4,7 @@
4use defmt::{info, unwrap, warn}; 4use defmt::{info, unwrap, warn};
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_net::tcp::TcpSocket; 6use embassy_net::tcp::TcpSocket;
7use embassy_net::{Stack, StackResources}; 7use embassy_net::StackResources;
8use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull}; 8use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull};
9use embassy_nrf::rng::Rng; 9use embassy_nrf::rng::Rng;
10use embassy_nrf::spim::{self, Spim}; 10use embassy_nrf::spim::{self, Spim};
@@ -36,8 +36,8 @@ async fn wifi_task(
36} 36}
37 37
38#[embassy_executor::task] 38#[embassy_executor::task]
39async fn net_task(stack: &'static Stack<hosted::NetDriver<'static>>) -> ! { 39async fn net_task(mut runner: embassy_net::Runner<'static, hosted::NetDriver<'static>>) -> ! {
40 stack.run().await 40 runner.run().await
41} 41}
42 42
43#[embassy_executor::main] 43#[embassy_executor::main]
@@ -90,10 +90,9 @@ async fn main(spawner: Spawner) {
90 90
91 // Init network stack 91 // Init network stack
92 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); 92 static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new();
93 static STACK: StaticCell<Stack<hosted::NetDriver<'static>>> = StaticCell::new(); 93 let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed);
94 let stack = &*STACK.init(Stack::new(device, config, RESOURCES.init(StackResources::new()), seed));
95 94
96 unwrap!(spawner.spawn(net_task(stack))); 95 unwrap!(spawner.spawn(net_task(runner)));
97 96
98 // And now we can use it! 97 // And now we can use it!
99 98