diff options
| -rw-r--r-- | .github/workflows/rust.yml | 8 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52805.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52810.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52811.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52820.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52832.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52833.rs | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/chips/nrf52840.rs | 2 | ||||
| -rw-r--r-- | embassy-rp/src/dma.rs | 5 | ||||
| -rw-r--r-- | embassy-rp/src/interrupt.rs | 1 | ||||
| -rw-r--r-- | embassy-rp/src/pll.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32-examples/src/example_common.rs | 17 | ||||
| -rw-r--r-- | embassy-stm32/Cargo.toml | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/dma/v2.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/fmt.rs | 114 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/v1.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/v2.rs | 1 | ||||
| -rw-r--r-- | embassy-traits/src/lib.rs | 2 |
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); | |||
| 153 | impl_pin!(P0_31, 0, 31); | 153 | impl_pin!(P0_31, 0, 31); |
| 154 | 154 | ||
| 155 | pub mod irqs { | 155 | pub 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); | |||
| 158 | impl_pin!(P0_31, 0, 31); | 158 | impl_pin!(P0_31, 0, 31); |
| 159 | 159 | ||
| 160 | pub mod irqs { | 160 | pub 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); | |||
| 159 | impl_pin!(P0_31, 0, 31); | 159 | impl_pin!(P0_31, 0, 31); |
| 160 | 160 | ||
| 161 | pub mod irqs { | 161 | pub 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); | |||
| 157 | impl_pin!(P0_31, 0, 31); | 157 | impl_pin!(P0_31, 0, 31); |
| 158 | 158 | ||
| 159 | pub mod irqs { | 159 | pub 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); | |||
| 172 | impl_pin!(P0_31, 0, 31); | 172 | impl_pin!(P0_31, 0, 31); |
| 173 | 173 | ||
| 174 | pub mod irqs { | 174 | pub 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); | |||
| 212 | impl_pin!(P1_15, 1, 15); | 212 | impl_pin!(P1_15, 1, 15); |
| 213 | 213 | ||
| 214 | pub mod irqs { | 214 | pub 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); | |||
| 217 | impl_pin!(P1_15, 1, 15); | 217 | impl_pin!(P1_15, 1, 15); |
| 218 | 218 | ||
| 219 | pub mod irqs { | 219 | pub 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 @@ | |||
| 1 | use core::sync::atomic::{compiler_fence, Ordering}; | 1 | use core::sync::atomic::{compiler_fence, Ordering}; |
| 2 | 2 | ||
| 3 | use defmt::{assert, *}; | 3 | use crate::fmt::{assert, *}; |
| 4 | 4 | use crate::pac::dma::vals; | |
| 5 | use crate::{pac, peripherals}; | 5 | use crate::{pac, peripherals}; |
| 6 | use pac::dma::vals; | ||
| 7 | 6 | ||
| 8 | pub struct Dma<T: Channel> { | 7 | pub 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 | ||
| 10 | mod irqs { | 10 | mod 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 @@ | |||
| 1 | use core::ops::Deref; | 1 | use core::ops::Deref; |
| 2 | use defmt::{assert, *}; | ||
| 3 | 2 | ||
| 3 | use crate::fmt::{assert, *}; | ||
| 4 | use crate::pac; | 4 | use crate::pac; |
| 5 | 5 | ||
| 6 | const XOSC_MHZ: u32 = 12; | 6 | const 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 | |||
| 3 | use defmt_rtt as _; // global logger | ||
| 4 | use panic_probe as _; | ||
| 5 | |||
| 6 | pub use defmt::*; | ||
| 7 | |||
| 8 | use core::sync::atomic::{AtomicUsize, Ordering}; | ||
| 9 | |||
| 10 | defmt::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 | |||
| 19 | rand_core = { version = "0.6.2", optional = true } | 19 | rand_core = { version = "0.6.2", optional = true } |
| 20 | sdio-host = { version = "0.5.0", optional = true } | 20 | sdio-host = { version = "0.5.0", optional = true } |
| 21 | embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } | 21 | embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } |
| 22 | critical-section = "0.2.1" | ||
| 22 | 23 | ||
| 23 | [build-dependencies] | 24 | [build-dependencies] |
| 24 | regex = "1.4.6" | 25 | regex = "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"))] | ||
| 6 | compile_error!("You may not enable both `defmt` and `log` features."); | ||
| 7 | |||
| 8 | pub use fmt::*; | ||
| 9 | |||
| 10 | #[cfg(feature = "defmt")] | ||
| 11 | mod 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")] | ||
| 19 | mod 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")))] | ||
| 28 | mod 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"))] | ||
| 68 | macro_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)] | ||
| 88 | pub struct NoneError; | ||
| 89 | |||
| 90 | pub trait Try { | ||
| 91 | type Ok; | ||
| 92 | type Error; | ||
| 93 | fn into_result(self) -> Result<Self::Ok, Self::Error>; | ||
| 94 | } | ||
| 95 | |||
| 96 | impl<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 | |||
| 106 | impl<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; | |||
| 11 | pub mod flash; | 11 | pub mod flash; |
| 12 | pub mod gpio; | 12 | pub mod gpio; |
| 13 | pub mod i2c; | 13 | pub mod i2c; |
| 14 | pub mod rng; | ||
| 14 | pub mod spi; | 15 | pub mod spi; |
| 15 | pub mod uart; | 16 | pub mod uart; |
| 16 | pub mod rng; | ||
