aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/rust.yml8
-rw-r--r--embassy-nrf/src/chips/nrf52805.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52810.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52811.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52820.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52832.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52833.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52840.rs2
-rw-r--r--embassy-rp/src/dma.rs5
-rw-r--r--embassy-rp/src/interrupt.rs1
-rw-r--r--embassy-rp/src/pll.rs2
-rw-r--r--embassy-stm32-examples/src/example_common.rs17
-rw-r--r--embassy-stm32/Cargo.toml1
-rw-r--r--embassy-stm32/src/dma/v2.rs2
-rw-r--r--embassy-stm32/src/fmt.rs114
-rw-r--r--embassy-stm32/src/usart/v1.rs6
-rw-r--r--embassy-stm32/src/usart/v2.rs1
-rw-r--r--embassy-traits/src/lib.rs2
18 files changed, 166 insertions, 7 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 97c668aca..931a7bc01 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -57,6 +57,14 @@ jobs:
57 features: nrf52840,defmt 57 features: nrf52840,defmt
58 - package: embassy-rp-examples 58 - package: embassy-rp-examples
59 target: thumbv6m-none-eabi 59 target: thumbv6m-none-eabi
60 - package: embassy-stm32
61 target: thumbv7em-none-eabi
62 features: stm32f411ce
63 - package: embassy-stm32
64 target: thumbv7em-none-eabi
65 features: stm32f429zi
66 - package: embassy-stm32-examples
67 target: thumbv7em-none-eabi
60 68
61 steps: 69 steps:
62 - uses: actions/checkout@v2 70 - uses: actions/checkout@v2
diff --git a/embassy-nrf/src/chips/nrf52805.rs b/embassy-nrf/src/chips/nrf52805.rs
index 272cabc06..f3ceb98e4 100644
--- a/embassy-nrf/src/chips/nrf52805.rs
+++ b/embassy-nrf/src/chips/nrf52805.rs
@@ -153,7 +153,9 @@ impl_pin!(P0_30, 0, 30);
153impl_pin!(P0_31, 0, 31); 153impl_pin!(P0_31, 0, 31);
154 154
155pub mod irqs { 155pub mod irqs {
156 use crate::pac::Interrupt as InterruptEnum;
156 use embassy_macros::interrupt_declare as declare; 157 use embassy_macros::interrupt_declare as declare;
158
157 declare!(POWER_CLOCK); 159 declare!(POWER_CLOCK);
158 declare!(RADIO); 160 declare!(RADIO);
159 declare!(UARTE0_UART0); 161 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52810.rs b/embassy-nrf/src/chips/nrf52810.rs
index 9e9f80090..dae260545 100644
--- a/embassy-nrf/src/chips/nrf52810.rs
+++ b/embassy-nrf/src/chips/nrf52810.rs
@@ -158,7 +158,9 @@ impl_pin!(P0_30, 0, 30);
158impl_pin!(P0_31, 0, 31); 158impl_pin!(P0_31, 0, 31);
159 159
160pub mod irqs { 160pub mod irqs {
161 use crate::pac::Interrupt as InterruptEnum;
161 use embassy_macros::interrupt_declare as declare; 162 use embassy_macros::interrupt_declare as declare;
163
162 declare!(POWER_CLOCK); 164 declare!(POWER_CLOCK);
163 declare!(RADIO); 165 declare!(RADIO);
164 declare!(UARTE0_UART0); 166 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52811.rs b/embassy-nrf/src/chips/nrf52811.rs
index a9ef0ed19..6f9edff35 100644
--- a/embassy-nrf/src/chips/nrf52811.rs
+++ b/embassy-nrf/src/chips/nrf52811.rs
@@ -159,7 +159,9 @@ impl_pin!(P0_30, 0, 30);
159impl_pin!(P0_31, 0, 31); 159impl_pin!(P0_31, 0, 31);
160 160
161pub mod irqs { 161pub mod irqs {
162 use crate::pac::Interrupt as InterruptEnum;
162 use embassy_macros::interrupt_declare as declare; 163 use embassy_macros::interrupt_declare as declare;
164
163 declare!(POWER_CLOCK); 165 declare!(POWER_CLOCK);
164 declare!(RADIO); 166 declare!(RADIO);
165 declare!(UARTE0_UART0); 167 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52820.rs b/embassy-nrf/src/chips/nrf52820.rs
index d0a8b9e9a..8bc50b6d3 100644
--- a/embassy-nrf/src/chips/nrf52820.rs
+++ b/embassy-nrf/src/chips/nrf52820.rs
@@ -157,7 +157,9 @@ impl_pin!(P0_30, 0, 30);
157impl_pin!(P0_31, 0, 31); 157impl_pin!(P0_31, 0, 31);
158 158
159pub mod irqs { 159pub mod irqs {
160 use crate::pac::Interrupt as InterruptEnum;
160 use embassy_macros::interrupt_declare as declare; 161 use embassy_macros::interrupt_declare as declare;
162
161 declare!(POWER_CLOCK); 163 declare!(POWER_CLOCK);
162 declare!(RADIO); 164 declare!(RADIO);
163 declare!(UARTE0_UART0); 165 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52832.rs b/embassy-nrf/src/chips/nrf52832.rs
index 4e57f2fa4..6f3f7fc7b 100644
--- a/embassy-nrf/src/chips/nrf52832.rs
+++ b/embassy-nrf/src/chips/nrf52832.rs
@@ -172,7 +172,9 @@ impl_pin!(P0_30, 0, 30);
172impl_pin!(P0_31, 0, 31); 172impl_pin!(P0_31, 0, 31);
173 173
174pub mod irqs { 174pub mod irqs {
175 use crate::pac::Interrupt as InterruptEnum;
175 use embassy_macros::interrupt_declare as declare; 176 use embassy_macros::interrupt_declare as declare;
177
176 declare!(POWER_CLOCK); 178 declare!(POWER_CLOCK);
177 declare!(RADIO); 179 declare!(RADIO);
178 declare!(UARTE0_UART0); 180 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52833.rs b/embassy-nrf/src/chips/nrf52833.rs
index 30b0ab007..a0240b196 100644
--- a/embassy-nrf/src/chips/nrf52833.rs
+++ b/embassy-nrf/src/chips/nrf52833.rs
@@ -212,7 +212,9 @@ impl_pin!(P1_14, 1, 14);
212impl_pin!(P1_15, 1, 15); 212impl_pin!(P1_15, 1, 15);
213 213
214pub mod irqs { 214pub mod irqs {
215 use crate::pac::Interrupt as InterruptEnum;
215 use embassy_macros::interrupt_declare as declare; 216 use embassy_macros::interrupt_declare as declare;
217
216 declare!(POWER_CLOCK); 218 declare!(POWER_CLOCK);
217 declare!(RADIO); 219 declare!(RADIO);
218 declare!(UARTE0_UART0); 220 declare!(UARTE0_UART0);
diff --git a/embassy-nrf/src/chips/nrf52840.rs b/embassy-nrf/src/chips/nrf52840.rs
index 0b6c3f68e..d4dcfd063 100644
--- a/embassy-nrf/src/chips/nrf52840.rs
+++ b/embassy-nrf/src/chips/nrf52840.rs
@@ -217,7 +217,9 @@ impl_pin!(P1_14, 1, 14);
217impl_pin!(P1_15, 1, 15); 217impl_pin!(P1_15, 1, 15);
218 218
219pub mod irqs { 219pub mod irqs {
220 use crate::pac::Interrupt as InterruptEnum;
220 use embassy_macros::interrupt_declare as declare; 221 use embassy_macros::interrupt_declare as declare;
222
221 declare!(POWER_CLOCK); 223 declare!(POWER_CLOCK);
222 declare!(RADIO); 224 declare!(RADIO);
223 declare!(UARTE0_UART0); 225 declare!(UARTE0_UART0);
diff --git a/embassy-rp/src/dma.rs b/embassy-rp/src/dma.rs
index 73be6d76c..60c1b8809 100644
--- a/embassy-rp/src/dma.rs
+++ b/embassy-rp/src/dma.rs
@@ -1,9 +1,8 @@
1use core::sync::atomic::{compiler_fence, Ordering}; 1use core::sync::atomic::{compiler_fence, Ordering};
2 2
3use defmt::{assert, *}; 3use crate::fmt::{assert, *};
4 4use crate::pac::dma::vals;
5use crate::{pac, peripherals}; 5use crate::{pac, peripherals};
6use pac::dma::vals;
7 6
8pub struct Dma<T: Channel> { 7pub struct Dma<T: Channel> {
9 inner: T, 8 inner: T,
diff --git a/embassy-rp/src/interrupt.rs b/embassy-rp/src/interrupt.rs
index 262f7f546..a4e5959ab 100644
--- a/embassy-rp/src/interrupt.rs
+++ b/embassy-rp/src/interrupt.rs
@@ -9,6 +9,7 @@ pub use embassy_extras::interrupt::Priority3 as Priority;
9 9
10mod irqs { 10mod irqs {
11 use super::*; 11 use super::*;
12 use crate::pac::Interrupt as InterruptEnum;
12 13
13 declare!(TIMER_IRQ_0); 14 declare!(TIMER_IRQ_0);
14 declare!(TIMER_IRQ_1); 15 declare!(TIMER_IRQ_1);
diff --git a/embassy-rp/src/pll.rs b/embassy-rp/src/pll.rs
index 2726367e7..fb643b016 100644
--- a/embassy-rp/src/pll.rs
+++ b/embassy-rp/src/pll.rs
@@ -1,6 +1,6 @@
1use core::ops::Deref; 1use core::ops::Deref;
2use defmt::{assert, *};
3 2
3use crate::fmt::{assert, *};
4use crate::pac; 4use crate::pac;
5 5
6const XOSC_MHZ: u32 = 12; 6const XOSC_MHZ: u32 = 12;
diff --git a/embassy-stm32-examples/src/example_common.rs b/embassy-stm32-examples/src/example_common.rs
new file mode 100644
index 000000000..54d633837
--- /dev/null
+++ b/embassy-stm32-examples/src/example_common.rs
@@ -0,0 +1,17 @@
1#![macro_use]
2
3use defmt_rtt as _; // global logger
4use panic_probe as _;
5
6pub use defmt::*;
7
8use core::sync::atomic::{AtomicUsize, Ordering};
9
10defmt::timestamp! {"{=u64}", {
11 static COUNT: AtomicUsize = AtomicUsize::new(0);
12 // NOTE(no-CAS) `timestamps` runs with interrupts disabled
13 let n = COUNT.load(Ordering::Relaxed);
14 COUNT.store(n + 1, Ordering::Relaxed);
15 n as u64
16 }
17}
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index 3d5bb57cf..81bd032c8 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -19,6 +19,7 @@ futures = { version = "0.3.5", default-features = false, features = ["async-awai
19rand_core = { version = "0.6.2", optional = true } 19rand_core = { version = "0.6.2", optional = true }
20sdio-host = { version = "0.5.0", optional = true } 20sdio-host = { version = "0.5.0", optional = true }
21embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } 21embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true }
22critical-section = "0.2.1"
22 23
23[build-dependencies] 24[build-dependencies]
24regex = "1.4.6" 25regex = "1.4.6"
diff --git a/embassy-stm32/src/dma/v2.rs b/embassy-stm32/src/dma/v2.rs
index 63d0586f3..0dfa01dcd 100644
--- a/embassy-stm32/src/dma/v2.rs
+++ b/embassy-stm32/src/dma/v2.rs
@@ -184,4 +184,4 @@ pub(crate) unsafe fn init() {
184 interrupt::DMA2_Stream5::steal().enable(); 184 interrupt::DMA2_Stream5::steal().enable();
185 interrupt::DMA2_Stream6::steal().enable(); 185 interrupt::DMA2_Stream6::steal().enable();
186 interrupt::DMA2_Stream7::steal().enable(); 186 interrupt::DMA2_Stream7::steal().enable();
187} \ No newline at end of file 187}
diff --git a/embassy-stm32/src/fmt.rs b/embassy-stm32/src/fmt.rs
new file mode 100644
index 000000000..160642ccd
--- /dev/null
+++ b/embassy-stm32/src/fmt.rs
@@ -0,0 +1,114 @@
1#![macro_use]
2#![allow(clippy::module_inception)]
3#![allow(unused)]
4
5#[cfg(all(feature = "defmt", feature = "log"))]
6compile_error!("You may not enable both `defmt` and `log` features.");
7
8pub use fmt::*;
9
10#[cfg(feature = "defmt")]
11mod fmt {
12 pub use defmt::{
13 assert, assert_eq, assert_ne, debug, debug_assert, debug_assert_eq, debug_assert_ne, error,
14 info, panic, todo, trace, unreachable, unwrap, warn,
15 };
16}
17
18#[cfg(feature = "log")]
19mod fmt {
20 pub use core::{
21 assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
22 unreachable,
23 };
24 pub use log::{debug, error, info, trace, warn};
25}
26
27#[cfg(not(any(feature = "defmt", feature = "log")))]
28mod fmt {
29 #![macro_use]
30
31 pub use core::{
32 assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
33 unreachable,
34 };
35
36 macro_rules! trace {
37 ($($msg:expr),+ $(,)?) => {
38 ()
39 };
40 }
41
42 macro_rules! debug {
43 ($($msg:expr),+ $(,)?) => {
44 ()
45 };
46 }
47
48 macro_rules! info {
49 ($($msg:expr),+ $(,)?) => {
50 ()
51 };
52 }
53
54 macro_rules! warn {
55 ($($msg:expr),+ $(,)?) => {
56 ()
57 };
58 }
59
60 macro_rules! error {
61 ($($msg:expr),+ $(,)?) => {
62 ()
63 };
64 }
65}
66
67#[cfg(not(feature = "defmt"))]
68macro_rules! unwrap {
69 ($arg:expr) => {
70 match $crate::fmt::Try::into_result($arg) {
71 ::core::result::Result::Ok(t) => t,
72 ::core::result::Result::Err(e) => {
73 ::core::panic!("unwrap of `{}` failed: {:?}", ::core::stringify!($arg), e);
74 }
75 }
76 };
77 ($arg:expr, $($msg:expr),+ $(,)? ) => {
78 match $crate::fmt::Try::into_result($arg) {
79 ::core::result::Result::Ok(t) => t,
80 ::core::result::Result::Err(e) => {
81 ::core::panic!("unwrap of `{}` failed: {}: {:?}", ::core::stringify!($arg), ::core::format_args!($($msg,)*), e);
82 }
83 }
84 }
85}
86
87#[derive(Debug, Copy, Clone, Eq, PartialEq)]
88pub struct NoneError;
89
90pub trait Try {
91 type Ok;
92 type Error;
93 fn into_result(self) -> Result<Self::Ok, Self::Error>;
94}
95
96impl<T> Try for Option<T> {
97 type Ok = T;
98 type Error = NoneError;
99
100 #[inline]
101 fn into_result(self) -> Result<T, NoneError> {
102 self.ok_or(NoneError)
103 }
104}
105
106impl<T, E> Try for Result<T, E> {
107 type Ok = T;
108 type Error = E;
109
110 #[inline]
111 fn into_result(self) -> Self {
112 self
113 }
114}
diff --git a/embassy-stm32/src/usart/v1.rs b/embassy-stm32/src/usart/v1.rs
index 78a53b53e..5fbe14388 100644
--- a/embassy-stm32/src/usart/v1.rs
+++ b/embassy-stm32/src/usart/v1.rs
@@ -103,7 +103,11 @@ impl<'d, T: Instance> Uart<'d, T> {
103 } 103 }
104 104
105 #[cfg(feature = "_dma_v2")] 105 #[cfg(feature = "_dma_v2")]
106 pub async fn write_dma(&mut self, ch: &mut impl crate::dma::Channel, buffer: &[u8]) -> Result<(), Error> { 106 pub async fn write_dma(
107 &mut self,
108 ch: &mut impl crate::dma::Channel,
109 buffer: &[u8],
110 ) -> Result<(), Error> {
107 let ch_func = 4; // USART3_TX 111 let ch_func = 4; // USART3_TX
108 let r = self.inner.regs(); 112 let r = self.inner.regs();
109 113
diff --git a/embassy-stm32/src/usart/v2.rs b/embassy-stm32/src/usart/v2.rs
index e69de29bb..8b1378917 100644
--- a/embassy-stm32/src/usart/v2.rs
+++ b/embassy-stm32/src/usart/v2.rs
@@ -0,0 +1 @@
diff --git a/embassy-traits/src/lib.rs b/embassy-traits/src/lib.rs
index 047417870..3d84cf078 100644
--- a/embassy-traits/src/lib.rs
+++ b/embassy-traits/src/lib.rs
@@ -11,6 +11,6 @@ pub mod delay;
11pub mod flash; 11pub mod flash;
12pub mod gpio; 12pub mod gpio;
13pub mod i2c; 13pub mod i2c;
14pub mod rng;
14pub mod spi; 15pub mod spi;
15pub mod uart; 16pub mod uart;
16pub mod rng;