aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRomain Goyet <[email protected]>2024-09-05 16:30:45 -0400
committerDario Nieuwenhuis <[email protected]>2024-09-11 01:18:52 +0200
commitac319970b82e3e613c35d45a11f31423204115e0 (patch)
tree8e5ad9fc98c78c9aee926d90decb9e64d64d7ffa
parent652133bce48f39ea5f379d056ca46a7f2ca3a99a (diff)
stm32: Work around LPTIM4
-rw-r--r--embassy-stm32/src/lptim/mod.rs25
-rw-r--r--embassy-stm32/src/lptim/pwm.rs4
2 files changed, 20 insertions, 9 deletions
diff --git a/embassy-stm32/src/lptim/mod.rs b/embassy-stm32/src/lptim/mod.rs
index 9c10efa43..05ed4de44 100644
--- a/embassy-stm32/src/lptim/mod.rs
+++ b/embassy-stm32/src/lptim/mod.rs
@@ -11,17 +11,23 @@ mod channel;
11#[cfg(any(lptim_v2a, lptim_v2b))] 11#[cfg(any(lptim_v2a, lptim_v2b))]
12pub use channel::Channel; 12pub use channel::Channel;
13 13
14pin_trait!(OutputPin, Instance); 14pin_trait!(OutputPin, BasicInstance);
15pin_trait!(Channel1Pin, Instance); 15pin_trait!(Channel1Pin, BasicInstance);
16pin_trait!(Channel2Pin, Instance); 16pin_trait!(Channel2Pin, BasicInstance);
17 17
18pub(crate) trait SealedInstance: RccPeripheral { 18pub(crate) trait SealedInstance: RccPeripheral {
19 fn regs() -> crate::pac::lptim::Lptim; 19 fn regs() -> crate::pac::lptim::Lptim;
20} 20}
21pub(crate) trait SealedBasicInstance: RccPeripheral {}
22
23/// LPTIM basic instance trait.
24#[allow(private_bounds)]
25pub trait BasicInstance: SealedBasicInstance + 'static {}
21 26
22/// LPTIM instance trait. 27/// LPTIM instance trait.
23#[allow(private_bounds)] 28#[allow(private_bounds)]
24pub trait Instance: SealedInstance + 'static {} 29pub trait Instance: BasicInstance + SealedInstance + 'static {}
30
25foreach_interrupt! { 31foreach_interrupt! {
26 ($inst:ident, lptim, LPTIM, UP, $irq:ident) => { 32 ($inst:ident, lptim, LPTIM, UP, $irq:ident) => {
27 impl SealedInstance for crate::peripherals::$inst { 33 impl SealedInstance for crate::peripherals::$inst {
@@ -29,9 +35,14 @@ foreach_interrupt! {
29 crate::pac::$inst 35 crate::pac::$inst
30 } 36 }
31 } 37 }
32 38 impl SealedBasicInstance for crate::peripherals::$inst {
33 impl Instance for crate::peripherals::$inst { 39 }
34 40 impl BasicInstance for crate::peripherals::$inst {}
41 impl Instance for crate::peripherals::$inst {}
42 };
43 ($inst:ident, lptim, LPTIM_BASIC, UP, $irq:ident) => {
44 impl SealedBasicInstance for crate::peripherals::$inst {
35 } 45 }
46 impl BasicInstance for crate::peripherals::$inst {}
36 }; 47 };
37} 48}
diff --git a/embassy-stm32/src/lptim/pwm.rs b/embassy-stm32/src/lptim/pwm.rs
index 586148848..1f43eb6ee 100644
--- a/embassy-stm32/src/lptim/pwm.rs
+++ b/embassy-stm32/src/lptim/pwm.rs
@@ -5,11 +5,11 @@ use core::marker::PhantomData;
5use embassy_hal_internal::{into_ref, PeripheralRef}; 5use embassy_hal_internal::{into_ref, PeripheralRef};
6 6
7use super::timer::Timer; 7use super::timer::Timer;
8use super::Instance;
9#[cfg(not(any(lptim_v2a, lptim_v2b)))] 8#[cfg(not(any(lptim_v2a, lptim_v2b)))]
10use super::OutputPin; 9use super::OutputPin;
11#[cfg(any(lptim_v2a, lptim_v2b))] 10#[cfg(any(lptim_v2a, lptim_v2b))]
12use super::{channel::Channel, timer::ChannelDirection, Channel1Pin, Channel2Pin}; 11use super::{channel::Channel, timer::ChannelDirection, Channel1Pin, Channel2Pin};
12use super::{BasicInstance, Instance};
13use crate::gpio::{AfType, AnyPin, OutputType, Speed}; 13use crate::gpio::{AfType, AnyPin, OutputType, Speed};
14use crate::time::Hertz; 14use crate::time::Hertz;
15use crate::Peripheral; 15use crate::Peripheral;
@@ -31,7 +31,7 @@ pub struct PwmPin<'d, T, C> {
31 31
32macro_rules! channel_impl { 32macro_rules! channel_impl {
33 ($new_chx:ident, $channel:ident, $pin_trait:ident) => { 33 ($new_chx:ident, $channel:ident, $pin_trait:ident) => {
34 impl<'d, T: Instance> PwmPin<'d, T, $channel> { 34 impl<'d, T: BasicInstance> PwmPin<'d, T, $channel> {
35 #[doc = concat!("Create a new ", stringify!($channel), " PWM pin instance.")] 35 #[doc = concat!("Create a new ", stringify!($channel), " PWM pin instance.")]
36 pub fn $new_chx(pin: impl Peripheral<P = impl $pin_trait<T>> + 'd) -> Self { 36 pub fn $new_chx(pin: impl Peripheral<P = impl $pin_trait<T>> + 'd) -> Self {
37 into_ref!(pin); 37 into_ref!(pin);