Merge pull request #182 from embassy-rs/stm32-ci

Add stm32 ci
This commit is contained in:
Dario Nieuwenhuis 2021-05-17 03:20:04 +02:00 committed by GitHub
commit 86132b5fc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 166 additions and 7 deletions

View File

@ -57,6 +57,14 @@ jobs:
features: nrf52840,defmt features: nrf52840,defmt
- package: embassy-rp-examples - package: embassy-rp-examples
target: thumbv6m-none-eabi target: thumbv6m-none-eabi
- package: embassy-stm32
target: thumbv7em-none-eabi
features: stm32f411ce
- package: embassy-stm32
target: thumbv7em-none-eabi
features: stm32f429zi
- package: embassy-stm32-examples
target: thumbv7em-none-eabi
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2

View File

@ -153,7 +153,9 @@ impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31); impl_pin!(P0_31, 0, 31);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -158,7 +158,9 @@ impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31); impl_pin!(P0_31, 0, 31);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -159,7 +159,9 @@ impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31); impl_pin!(P0_31, 0, 31);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -157,7 +157,9 @@ impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31); impl_pin!(P0_31, 0, 31);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -172,7 +172,9 @@ impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31); impl_pin!(P0_31, 0, 31);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -212,7 +212,9 @@ impl_pin!(P1_14, 1, 14);
impl_pin!(P1_15, 1, 15); impl_pin!(P1_15, 1, 15);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -217,7 +217,9 @@ impl_pin!(P1_14, 1, 14);
impl_pin!(P1_15, 1, 15); impl_pin!(P1_15, 1, 15);
pub mod irqs { pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;
use embassy_macros::interrupt_declare as declare; use embassy_macros::interrupt_declare as declare;
declare!(POWER_CLOCK); declare!(POWER_CLOCK);
declare!(RADIO); declare!(RADIO);
declare!(UARTE0_UART0); declare!(UARTE0_UART0);

View File

@ -1,9 +1,8 @@
use core::sync::atomic::{compiler_fence, Ordering}; use core::sync::atomic::{compiler_fence, Ordering};
use defmt::{assert, *}; use crate::fmt::{assert, *};
use crate::pac::dma::vals;
use crate::{pac, peripherals}; use crate::{pac, peripherals};
use pac::dma::vals;
pub struct Dma<T: Channel> { pub struct Dma<T: Channel> {
inner: T, inner: T,

View File

@ -9,6 +9,7 @@ pub use embassy_extras::interrupt::Priority3 as Priority;
mod irqs { mod irqs {
use super::*; use super::*;
use crate::pac::Interrupt as InterruptEnum;
declare!(TIMER_IRQ_0); declare!(TIMER_IRQ_0);
declare!(TIMER_IRQ_1); declare!(TIMER_IRQ_1);

View File

@ -1,6 +1,6 @@
use core::ops::Deref; use core::ops::Deref;
use defmt::{assert, *};
use crate::fmt::{assert, *};
use crate::pac; use crate::pac;
const XOSC_MHZ: u32 = 12; const XOSC_MHZ: u32 = 12;

View File

@ -0,0 +1,17 @@
#![macro_use]
use defmt_rtt as _; // global logger
use panic_probe as _;
pub use defmt::*;
use core::sync::atomic::{AtomicUsize, Ordering};
defmt::timestamp! {"{=u64}", {
static COUNT: AtomicUsize = AtomicUsize::new(0);
// NOTE(no-CAS) `timestamps` runs with interrupts disabled
let n = COUNT.load(Ordering::Relaxed);
COUNT.store(n + 1, Ordering::Relaxed);
n as u64
}
}

View File

@ -19,6 +19,7 @@ futures = { version = "0.3.5", default-features = false, features = ["async-awai
rand_core = { version = "0.6.2", optional = true } rand_core = { version = "0.6.2", optional = true }
sdio-host = { version = "0.5.0", optional = true } sdio-host = { version = "0.5.0", optional = true }
embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true }
critical-section = "0.2.1"
[build-dependencies] [build-dependencies]
regex = "1.4.6" regex = "1.4.6"

View File

@ -184,4 +184,4 @@ pub(crate) unsafe fn init() {
interrupt::DMA2_Stream5::steal().enable(); interrupt::DMA2_Stream5::steal().enable();
interrupt::DMA2_Stream6::steal().enable(); interrupt::DMA2_Stream6::steal().enable();
interrupt::DMA2_Stream7::steal().enable(); interrupt::DMA2_Stream7::steal().enable();
} }

114
embassy-stm32/src/fmt.rs Normal file
View File

@ -0,0 +1,114 @@
#![macro_use]
#![allow(clippy::module_inception)]
#![allow(unused)]
#[cfg(all(feature = "defmt", feature = "log"))]
compile_error!("You may not enable both `defmt` and `log` features.");
pub use fmt::*;
#[cfg(feature = "defmt")]
mod fmt {
pub use defmt::{
assert, assert_eq, assert_ne, debug, debug_assert, debug_assert_eq, debug_assert_ne, error,
info, panic, todo, trace, unreachable, unwrap, warn,
};
}
#[cfg(feature = "log")]
mod fmt {
pub use core::{
assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
unreachable,
};
pub use log::{debug, error, info, trace, warn};
}
#[cfg(not(any(feature = "defmt", feature = "log")))]
mod fmt {
#![macro_use]
pub use core::{
assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
unreachable,
};
macro_rules! trace {
($($msg:expr),+ $(,)?) => {
()
};
}
macro_rules! debug {
($($msg:expr),+ $(,)?) => {
()
};
}
macro_rules! info {
($($msg:expr),+ $(,)?) => {
()
};
}
macro_rules! warn {
($($msg:expr),+ $(,)?) => {
()
};
}
macro_rules! error {
($($msg:expr),+ $(,)?) => {
()
};
}
}
#[cfg(not(feature = "defmt"))]
macro_rules! unwrap {
($arg:expr) => {
match $crate::fmt::Try::into_result($arg) {
::core::result::Result::Ok(t) => t,
::core::result::Result::Err(e) => {
::core::panic!("unwrap of `{}` failed: {:?}", ::core::stringify!($arg), e);
}
}
};
($arg:expr, $($msg:expr),+ $(,)? ) => {
match $crate::fmt::Try::into_result($arg) {
::core::result::Result::Ok(t) => t,
::core::result::Result::Err(e) => {
::core::panic!("unwrap of `{}` failed: {}: {:?}", ::core::stringify!($arg), ::core::format_args!($($msg,)*), e);
}
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct NoneError;
pub trait Try {
type Ok;
type Error;
fn into_result(self) -> Result<Self::Ok, Self::Error>;
}
impl<T> Try for Option<T> {
type Ok = T;
type Error = NoneError;
#[inline]
fn into_result(self) -> Result<T, NoneError> {
self.ok_or(NoneError)
}
}
impl<T, E> Try for Result<T, E> {
type Ok = T;
type Error = E;
#[inline]
fn into_result(self) -> Self {
self
}
}

View File

@ -103,7 +103,11 @@ impl<'d, T: Instance> Uart<'d, T> {
} }
#[cfg(feature = "_dma_v2")] #[cfg(feature = "_dma_v2")]
pub async fn write_dma(&mut self, ch: &mut impl crate::dma::Channel, buffer: &[u8]) -> Result<(), Error> { pub async fn write_dma(
&mut self,
ch: &mut impl crate::dma::Channel,
buffer: &[u8],
) -> Result<(), Error> {
let ch_func = 4; // USART3_TX let ch_func = 4; // USART3_TX
let r = self.inner.regs(); let r = self.inner.regs();

View File

@ -0,0 +1 @@

View File

@ -11,6 +11,6 @@ pub mod delay;
pub mod flash; pub mod flash;
pub mod gpio; pub mod gpio;
pub mod i2c; pub mod i2c;
pub mod rng;
pub mod spi; pub mod spi;
pub mod uart; pub mod uart;
pub mod rng;