aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2020-10-31 22:37:24 +0100
committerDario Nieuwenhuis <[email protected]>2020-10-31 22:37:24 +0100
commitb3858441f76c43981ba13c13aafbd3bdfec3280f (patch)
tree9604dc82740b0367b159873e49af84c4c37829f7 /examples
parent76196c424a762ac053c89a9e25652fe975f4d458 (diff)
Update examples.
Diffstat (limited to 'examples')
-rw-r--r--examples/Cargo.toml2
-rw-r--r--examples/src/bin/gpiote.rs28
-rw-r--r--examples/src/bin/multiprio.rs8
-rw-r--r--examples/src/bin/qspi.rs19
-rw-r--r--examples/src/bin/rtc_async.rs36
-rw-r--r--examples/src/bin/uart.rs19
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"
26nrf52840-hal = { version = "0.11.0" } 26nrf52840-hal = { version = "0.11.0" }
27embassy = { version = "0.1.0", path = "../embassy" } 27embassy = { version = "0.1.0", path = "../embassy" }
28embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt-trace", "52840"] } 28embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt-trace", "52840"] }
29futures = { version = "0.3.5", default-features = false } 29futures = { version = "0.3.7", default-features = false, features = ["async-await"] }
30cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"} \ No newline at end of file 30cortex-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 @@
6mod example_common; 6mod example_common;
7use example_common::*; 7use example_common::*;
8 8
9use core::pin::Pin;
10use cortex_m_rt::entry; 9use cortex_m_rt::entry;
11use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt};
12use embassy_nrf::gpiote;
13use futures::pin_mut;
14use nrf52840_hal::gpio; 10use nrf52840_hal::gpio;
15 11
16use embassy::executor::{task, Executor}; 12use embassy::executor::{task, Executor};
17static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); 13use embassy::util::Forever;
14use embassy_nrf::gpiote;
18 15
19#[task] 16#[task]
20async fn run() { 17async 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
76static EXECUTOR: Forever<Executor> = Forever::new();
77
79#[entry] 78#[entry]
80fn main() -> ! { 79fn 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;
7use example_common::*; 7use example_common::*;
8 8
9use cortex_m_rt::entry; 9use cortex_m_rt::entry;
10use embassy::flash::Flash;
11use embassy_nrf::qspi;
12use nrf52840_hal::gpio; 10use nrf52840_hal::gpio;
13 11
14use embassy::executor::{task, Executor}; 12use embassy::executor::{task, Executor};
15static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); 13use embassy::flash::Flash;
14use embassy::util::Forever;
15use embassy_nrf::qspi;
16 16
17const PAGE_SIZE: usize = 4096; 17const PAGE_SIZE: usize = 4096;
18 18
@@ -115,16 +115,17 @@ async fn run() {
115 info!("done!") 115 info!("done!")
116} 116}
117 117
118static EXECUTOR: Forever<Executor> = Forever::new();
119
118#[entry] 120#[entry]
119fn main() -> ! { 121fn 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
9use core::mem::MaybeUninit; 9use core::mem::MaybeUninit;
10use cortex_m_rt::entry; 10use cortex_m_rt::entry;
11use embassy::executor::{task, Executor}; 11use nrf52840_hal::clocks;
12
13use embassy::executor::{task, TimerExecutor};
12use embassy::time::{Clock, Duration, Timer}; 14use embassy::time::{Clock, Duration, Timer};
15use embassy::util::Forever;
13use embassy_nrf::pac; 16use embassy_nrf::pac;
14use embassy_nrf::rtc; 17use embassy_nrf::rtc;
15use nrf52840_hal::clocks;
16 18
17#[task] 19#[task]
18async fn run1() { 20async fn run1() {
@@ -30,8 +32,8 @@ async fn run2() {
30 } 32 }
31} 33}
32 34
33static mut RTC: MaybeUninit<rtc::RTC<pac::RTC1>> = MaybeUninit::uninit(); 35static RTC: Forever<rtc::RTC<pac::RTC1>> = Forever::new();
34static mut EXECUTOR: MaybeUninit<Executor<rtc::Alarm<pac::RTC1>>> = MaybeUninit::uninit(); 36static EXECUTOR: Forever<TimerExecutor<rtc::Alarm<pac::RTC1>>> = Forever::new();
35 37
36#[entry] 38#[entry]
37fn main() -> ! { 39fn 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;
7use example_common::*; 7use example_common::*;
8 8
9use cortex_m_rt::entry; 9use cortex_m_rt::entry;
10use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt};
11use embassy_nrf::uarte;
12use futures::pin_mut; 10use futures::pin_mut;
13use nrf52840_hal::gpio; 11use nrf52840_hal::gpio;
14 12
15use embassy::executor::{task, Executor}; 13use embassy::executor::{task, Executor};
16static EXECUTOR: Executor = Executor::new(|| cortex_m::asm::sev()); 14use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt};
15use embassy::util::Forever;
16use embassy_nrf::uarte;
17 17
18#[task] 18#[task]
19async fn run() { 19async fn run() {
@@ -64,16 +64,17 @@ async fn run() {
64 } 64 }
65} 65}
66 66
67static EXECUTOR: Forever<Executor> = Forever::new();
68
67#[entry] 69#[entry]
68fn main() -> ! { 70fn 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}