diff options
| author | Dario Nieuwenhuis <[email protected]> | 2020-10-31 22:37:24 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2020-10-31 22:37:24 +0100 |
| commit | b3858441f76c43981ba13c13aafbd3bdfec3280f (patch) | |
| tree | 9604dc82740b0367b159873e49af84c4c37829f7 /examples | |
| parent | 76196c424a762ac053c89a9e25652fe975f4d458 (diff) | |
Update examples.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples/src/bin/gpiote.rs | 28 | ||||
| -rw-r--r-- | examples/src/bin/multiprio.rs | 8 | ||||
| -rw-r--r-- | examples/src/bin/qspi.rs | 19 | ||||
| -rw-r--r-- | examples/src/bin/rtc_async.rs | 36 | ||||
| -rw-r--r-- | examples/src/bin/uart.rs | 19 |
6 files changed, 52 insertions, 60 deletions
diff --git a/examples/Cargo.toml b/examples/Cargo.toml index 7c44b07a4..8eb7a5ff7 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml | |||
| @@ -26,5 +26,5 @@ panic-probe = "0.1.0" | |||
| 26 | nrf52840-hal = { version = "0.11.0" } | 26 | nrf52840-hal = { version = "0.11.0" } |
| 27 | embassy = { version = "0.1.0", path = "../embassy" } | 27 | embassy = { version = "0.1.0", path = "../embassy" } |
| 28 | embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt-trace", "52840"] } | 28 | embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt-trace", "52840"] } |
| 29 | futures = { version = "0.3.5", default-features = false } | 29 | futures = { version = "0.3.7", default-features = false, features = ["async-await"] } |
| 30 | cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"} \ No newline at end of file | 30 | cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"} \ No newline at end of file |
diff --git a/examples/src/bin/gpiote.rs b/examples/src/bin/gpiote.rs index 5a6ae9333..16b4f06d7 100644 --- a/examples/src/bin/gpiote.rs +++ b/examples/src/bin/gpiote.rs | |||
| @@ -6,15 +6,12 @@ | |||
| 6 | mod example_common; | 6 | mod example_common; |
| 7 | use example_common::*; | 7 | use example_common::*; |
| 8 | 8 | ||
| 9 | use core::pin::Pin; | ||
| 10 | use cortex_m_rt::entry; | 9 | use cortex_m_rt::entry; |
| 11 | use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt}; | ||
| 12 | use embassy_nrf::gpiote; | ||
| 13 | use futures::pin_mut; | ||
| 14 | use nrf52840_hal::gpio; | 10 | use nrf52840_hal::gpio; |
| 15 | 11 | ||
| 16 | use embassy::executor::{task, Executor}; | 12 | use embassy::executor::{task, Executor}; |
| 17 | static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); | 13 | use embassy::util::Forever; |
| 14 | use embassy_nrf::gpiote; | ||
| 18 | 15 | ||
| 19 | #[task] | 16 | #[task] |
| 20 | async fn run() { | 17 | async fn run() { |
| @@ -28,7 +25,7 @@ async fn run() { | |||
| 28 | let pin1 = port0.p0_11.into_pullup_input().degrade(); | 25 | let pin1 = port0.p0_11.into_pullup_input().degrade(); |
| 29 | let button1 = async { | 26 | let button1 = async { |
| 30 | let ch = g | 27 | let ch = g |
| 31 | .new_input_channel(&pin1, gpiote::EventPolarity::HiToLo) | 28 | .new_input_channel(pin1, gpiote::EventPolarity::HiToLo) |
| 32 | .dewrap(); | 29 | .dewrap(); |
| 33 | 30 | ||
| 34 | loop { | 31 | loop { |
| @@ -40,7 +37,7 @@ async fn run() { | |||
| 40 | let pin2 = port0.p0_12.into_pullup_input().degrade(); | 37 | let pin2 = port0.p0_12.into_pullup_input().degrade(); |
| 41 | let button2 = async { | 38 | let button2 = async { |
| 42 | let ch = g | 39 | let ch = g |
| 43 | .new_input_channel(&pin2, gpiote::EventPolarity::LoToHi) | 40 | .new_input_channel(pin2, gpiote::EventPolarity::LoToHi) |
| 44 | .dewrap(); | 41 | .dewrap(); |
| 45 | 42 | ||
| 46 | loop { | 43 | loop { |
| @@ -52,7 +49,7 @@ async fn run() { | |||
| 52 | let pin3 = port0.p0_24.into_pullup_input().degrade(); | 49 | let pin3 = port0.p0_24.into_pullup_input().degrade(); |
| 53 | let button3 = async { | 50 | let button3 = async { |
| 54 | let ch = g | 51 | let ch = g |
| 55 | .new_input_channel(&pin3, gpiote::EventPolarity::Toggle) | 52 | .new_input_channel(pin3, gpiote::EventPolarity::Toggle) |
| 56 | .dewrap(); | 53 | .dewrap(); |
| 57 | 54 | ||
| 58 | loop { | 55 | loop { |
| @@ -64,7 +61,7 @@ async fn run() { | |||
| 64 | let pin4 = port0.p0_25.into_pullup_input().degrade(); | 61 | let pin4 = port0.p0_25.into_pullup_input().degrade(); |
| 65 | let button4 = async { | 62 | let button4 = async { |
| 66 | let ch = g | 63 | let ch = g |
| 67 | .new_input_channel(&pin4, gpiote::EventPolarity::Toggle) | 64 | .new_input_channel(pin4, gpiote::EventPolarity::Toggle) |
| 68 | .dewrap(); | 65 | .dewrap(); |
| 69 | 66 | ||
| 70 | loop { | 67 | loop { |
| @@ -76,16 +73,17 @@ async fn run() { | |||
| 76 | futures::join!(button1, button2, button3, button4); | 73 | futures::join!(button1, button2, button3, button4); |
| 77 | } | 74 | } |
| 78 | 75 | ||
| 76 | static EXECUTOR: Forever<Executor> = Forever::new(); | ||
| 77 | |||
| 79 | #[entry] | 78 | #[entry] |
| 80 | fn main() -> ! { | 79 | fn main() -> ! { |
| 81 | info!("Hello World!"); | 80 | info!("Hello World!"); |
| 82 | 81 | ||
| 83 | unsafe { | 82 | let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); |
| 84 | EXECUTOR.spawn(run()).dewrap(); | 83 | executor.spawn(run()).dewrap(); |
| 85 | 84 | ||
| 86 | loop { | 85 | loop { |
| 87 | EXECUTOR.run(); | 86 | executor.run(); |
| 88 | cortex_m::asm::wfe(); | 87 | cortex_m::asm::wfe(); |
| 89 | } | ||
| 90 | } | 88 | } |
| 91 | } | 89 | } |
diff --git a/examples/src/bin/multiprio.rs b/examples/src/bin/multiprio.rs index ed170c581..30a5e85e1 100644 --- a/examples/src/bin/multiprio.rs +++ b/examples/src/bin/multiprio.rs | |||
| @@ -86,8 +86,8 @@ async fn run_med() { | |||
| 86 | cortex_m::asm::delay(32_000_000); // ~1 second | 86 | cortex_m::asm::delay(32_000_000); // ~1 second |
| 87 | 87 | ||
| 88 | let end = Instant::now(); | 88 | let end = Instant::now(); |
| 89 | let ms = end.duration_since(start).into_ticks() / 33; | 89 | let ms = end.duration_since(start).as_ticks() / 33; |
| 90 | info!(" [med] done in {:u32} ms", ms); | 90 | info!(" [med] done in {:u64} ms", ms); |
| 91 | 91 | ||
| 92 | Timer::after(Duration::from_ticks(23421)).await; | 92 | Timer::after(Duration::from_ticks(23421)).await; |
| 93 | } | 93 | } |
| @@ -103,8 +103,8 @@ async fn run_low() { | |||
| 103 | cortex_m::asm::delay(64_000_000); // ~2 seconds | 103 | cortex_m::asm::delay(64_000_000); // ~2 seconds |
| 104 | 104 | ||
| 105 | let end = Instant::now(); | 105 | let end = Instant::now(); |
| 106 | let ms = end.duration_since(start).into_ticks() / 33; | 106 | let ms = end.duration_since(start).as_ticks() / 33; |
| 107 | info!("[low] done in {:u32} ms", ms); | 107 | info!("[low] done in {:u64} ms", ms); |
| 108 | 108 | ||
| 109 | Timer::after(Duration::from_ticks(32983)).await; | 109 | Timer::after(Duration::from_ticks(32983)).await; |
| 110 | } | 110 | } |
diff --git a/examples/src/bin/qspi.rs b/examples/src/bin/qspi.rs index c60a666ec..caabac8ba 100644 --- a/examples/src/bin/qspi.rs +++ b/examples/src/bin/qspi.rs | |||
| @@ -7,12 +7,12 @@ mod example_common; | |||
| 7 | use example_common::*; | 7 | use example_common::*; |
| 8 | 8 | ||
| 9 | use cortex_m_rt::entry; | 9 | use cortex_m_rt::entry; |
| 10 | use embassy::flash::Flash; | ||
| 11 | use embassy_nrf::qspi; | ||
| 12 | use nrf52840_hal::gpio; | 10 | use nrf52840_hal::gpio; |
| 13 | 11 | ||
| 14 | use embassy::executor::{task, Executor}; | 12 | use embassy::executor::{task, Executor}; |
| 15 | static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); | 13 | use embassy::flash::Flash; |
| 14 | use embassy::util::Forever; | ||
| 15 | use embassy_nrf::qspi; | ||
| 16 | 16 | ||
| 17 | const PAGE_SIZE: usize = 4096; | 17 | const PAGE_SIZE: usize = 4096; |
| 18 | 18 | ||
| @@ -115,16 +115,17 @@ async fn run() { | |||
| 115 | info!("done!") | 115 | info!("done!") |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | static EXECUTOR: Forever<Executor> = Forever::new(); | ||
| 119 | |||
| 118 | #[entry] | 120 | #[entry] |
| 119 | fn main() -> ! { | 121 | fn main() -> ! { |
| 120 | info!("Hello World!"); | 122 | info!("Hello World!"); |
| 121 | 123 | ||
| 122 | unsafe { | 124 | let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); |
| 123 | EXECUTOR.spawn(run()).dewrap(); | 125 | executor.spawn(run()).dewrap(); |
| 124 | 126 | ||
| 125 | loop { | 127 | loop { |
| 126 | EXECUTOR.run(); | 128 | executor.run(); |
| 127 | cortex_m::asm::wfe(); | 129 | cortex_m::asm::wfe(); |
| 128 | } | ||
| 129 | } | 130 | } |
| 130 | } | 131 | } |
diff --git a/examples/src/bin/rtc_async.rs b/examples/src/bin/rtc_async.rs index 30b181a93..5126a2cc8 100644 --- a/examples/src/bin/rtc_async.rs +++ b/examples/src/bin/rtc_async.rs | |||
| @@ -8,11 +8,13 @@ use example_common::*; | |||
| 8 | 8 | ||
| 9 | use core::mem::MaybeUninit; | 9 | use core::mem::MaybeUninit; |
| 10 | use cortex_m_rt::entry; | 10 | use cortex_m_rt::entry; |
| 11 | use embassy::executor::{task, Executor}; | 11 | use nrf52840_hal::clocks; |
| 12 | |||
| 13 | use embassy::executor::{task, TimerExecutor}; | ||
| 12 | use embassy::time::{Clock, Duration, Timer}; | 14 | use embassy::time::{Clock, Duration, Timer}; |
| 15 | use embassy::util::Forever; | ||
| 13 | use embassy_nrf::pac; | 16 | use embassy_nrf::pac; |
| 14 | use embassy_nrf::rtc; | 17 | use embassy_nrf::rtc; |
| 15 | use nrf52840_hal::clocks; | ||
| 16 | 18 | ||
| 17 | #[task] | 19 | #[task] |
| 18 | async fn run1() { | 20 | async fn run1() { |
| @@ -30,8 +32,8 @@ async fn run2() { | |||
| 30 | } | 32 | } |
| 31 | } | 33 | } |
| 32 | 34 | ||
| 33 | static mut RTC: MaybeUninit<rtc::RTC<pac::RTC1>> = MaybeUninit::uninit(); | 35 | static RTC: Forever<rtc::RTC<pac::RTC1>> = Forever::new(); |
| 34 | static mut EXECUTOR: MaybeUninit<Executor<rtc::Alarm<pac::RTC1>>> = MaybeUninit::uninit(); | 36 | static EXECUTOR: Forever<TimerExecutor<rtc::Alarm<pac::RTC1>>> = Forever::new(); |
| 35 | 37 | ||
| 36 | #[entry] | 38 | #[entry] |
| 37 | fn main() -> ! { | 39 | fn main() -> ! { |
| @@ -44,28 +46,18 @@ fn main() -> ! { | |||
| 44 | .set_lfclk_src_external(clocks::LfOscConfiguration::NoExternalNoBypass) | 46 | .set_lfclk_src_external(clocks::LfOscConfiguration::NoExternalNoBypass) |
| 45 | .start_lfclk(); | 47 | .start_lfclk(); |
| 46 | 48 | ||
| 47 | let rtc: &'static _ = unsafe { | 49 | let rtc = RTC.put(rtc::RTC::new(p.RTC1)); |
| 48 | let ptr = RTC.as_mut_ptr(); | ||
| 49 | ptr.write(rtc::RTC::new(p.RTC1)); | ||
| 50 | &*ptr | ||
| 51 | }; | ||
| 52 | |||
| 53 | rtc.start(); | 50 | rtc.start(); |
| 51 | |||
| 54 | unsafe { embassy::time::set_clock(rtc) }; | 52 | unsafe { embassy::time::set_clock(rtc) }; |
| 55 | 53 | ||
| 56 | let executor: &'static _ = unsafe { | 54 | let executor = EXECUTOR.put(TimerExecutor::new(rtc.alarm0(), cortex_m::asm::sev)); |
| 57 | let ptr = EXECUTOR.as_mut_ptr(); | ||
| 58 | ptr.write(Executor::new(rtc.alarm0(), cortex_m::asm::sev)); | ||
| 59 | &*ptr | ||
| 60 | }; | ||
| 61 | 55 | ||
| 62 | unsafe { | 56 | executor.spawn(run1()).dewrap(); |
| 63 | executor.spawn(run1()).dewrap(); | 57 | executor.spawn(run2()).dewrap(); |
| 64 | executor.spawn(run2()).dewrap(); | ||
| 65 | 58 | ||
| 66 | loop { | 59 | loop { |
| 67 | executor.run(); | 60 | executor.run(); |
| 68 | cortex_m::asm::wfe(); | 61 | cortex_m::asm::wfe(); |
| 69 | } | ||
| 70 | } | 62 | } |
| 71 | } | 63 | } |
diff --git a/examples/src/bin/uart.rs b/examples/src/bin/uart.rs index 0eec2cd8d..eeaf5fee6 100644 --- a/examples/src/bin/uart.rs +++ b/examples/src/bin/uart.rs | |||
| @@ -7,13 +7,13 @@ mod example_common; | |||
| 7 | use example_common::*; | 7 | use example_common::*; |
| 8 | 8 | ||
| 9 | use cortex_m_rt::entry; | 9 | use cortex_m_rt::entry; |
| 10 | use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt}; | ||
| 11 | use embassy_nrf::uarte; | ||
| 12 | use futures::pin_mut; | 10 | use futures::pin_mut; |
| 13 | use nrf52840_hal::gpio; | 11 | use nrf52840_hal::gpio; |
| 14 | 12 | ||
| 15 | use embassy::executor::{task, Executor}; | 13 | use embassy::executor::{task, Executor}; |
| 16 | static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); | 14 | use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt}; |
| 15 | use embassy::util::Forever; | ||
| 16 | use embassy_nrf::uarte; | ||
| 17 | 17 | ||
| 18 | #[task] | 18 | #[task] |
| 19 | async fn run() { | 19 | async fn run() { |
| @@ -64,16 +64,17 @@ async fn run() { | |||
| 64 | } | 64 | } |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | static EXECUTOR: Forever<Executor> = Forever::new(); | ||
| 68 | |||
| 67 | #[entry] | 69 | #[entry] |
| 68 | fn main() -> ! { | 70 | fn main() -> ! { |
| 69 | info!("Hello World!"); | 71 | info!("Hello World!"); |
| 70 | 72 | ||
| 71 | unsafe { | 73 | let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); |
| 72 | EXECUTOR.spawn(run()).dewrap(); | 74 | executor.spawn(run()).dewrap(); |
| 73 | 75 | ||
| 74 | loop { | 76 | loop { |
| 75 | EXECUTOR.run(); | 77 | executor.run(); |
| 76 | cortex_m::asm::wfe(); | 78 | cortex_m::asm::wfe(); |
| 77 | } | ||
| 78 | } | 79 | } |
| 79 | } | 80 | } |
