@@ -7,7 +7,9 @@ use embassy_hal_internal::{into_ref, PeripheralRef};
7
7
8
8
use super :: low_level:: { CountingMode , OutputCompareMode , OutputPolarity , Timer } ;
9
9
use super :: { Channel , Channel1Pin , Channel2Pin , Channel3Pin , Channel4Pin , GeneralInstance4Channel , TimerBits } ;
10
- use crate :: gpio:: { AfType , AnyPin , OutputType , Pull , Speed } ;
10
+ #[ cfg( gpio_v2) ]
11
+ use crate :: gpio:: Pull ;
12
+ use crate :: gpio:: { AfType , AnyPin , OutputType , Speed } ;
11
13
use crate :: time:: Hertz ;
12
14
use crate :: Peripheral ;
13
15
@@ -32,13 +34,17 @@ pub struct PwmPin<'d, T, C> {
32
34
///
33
35
/// This configures the pwm pin settings
34
36
pub struct PwmPinConfig {
37
+ /// PWM Pin output type
35
38
pub output_type : OutputType ,
39
+ /// PWM Pin speed
36
40
pub speed : Speed ,
41
+ /// PWM Pin pull type
42
+ #[ cfg( gpio_v2) ]
37
43
pub pull : Pull ,
38
44
}
39
45
40
46
macro_rules! channel_impl {
41
- ( $new_chx: ident, $channel: ident, $pin_trait: ident) => {
47
+ ( $new_chx: ident, $new_chx_with_config : ident , $ channel: ident, $pin_trait: ident) => {
42
48
impl <' d, T : GeneralInstance4Channel > PwmPin <' d, T , $channel> {
43
49
#[ doc = concat!( "Create a new " , stringify!( $channel) , " PWM pin instance." ) ]
44
50
pub fn $new_chx( pin: impl Peripheral <P = impl $pin_trait<T >> + ' d, output_type: OutputType ) -> Self {
@@ -52,6 +58,7 @@ macro_rules! channel_impl {
52
58
phantom: PhantomData ,
53
59
}
54
60
}
61
+
55
62
#[ doc = concat!( "Create a new " , stringify!( $channel) , "_with_config PWM pin instance." ) ]
56
63
pub fn $new_chx_with_config(
57
64
pin: impl Peripheral <P = impl $pin_trait<T >> + ' d,
@@ -62,6 +69,9 @@ macro_rules! channel_impl {
62
69
pin. set_low( ) ;
63
70
pin. set_as_af(
64
71
pin. af_num( ) ,
72
+ #[ cfg( gpio_v1) ]
73
+ AfType :: output( pin_config. output_type, pin_config. speed) ,
74
+ #[ cfg( gpio_v2) ]
65
75
AfType :: output_pull( pin_config. output_type, pin_config. speed, pin_config. pull) ,
66
76
) ;
67
77
} ) ;
@@ -74,10 +84,10 @@ macro_rules! channel_impl {
74
84
} ;
75
85
}
76
86
77
- channel_impl ! ( new_ch1, Ch1 , Channel1Pin ) ;
78
- channel_impl ! ( new_ch2, Ch2 , Channel2Pin ) ;
79
- channel_impl ! ( new_ch3, Ch3 , Channel3Pin ) ;
80
- channel_impl ! ( new_ch4, Ch4 , Channel4Pin ) ;
87
+ channel_impl ! ( new_ch1, new_ch1_with_config , Ch1 , Channel1Pin ) ;
88
+ channel_impl ! ( new_ch2, new_ch2_with_config , Ch2 , Channel2Pin ) ;
89
+ channel_impl ! ( new_ch3, new_ch3_with_config , Ch3 , Channel3Pin ) ;
90
+ channel_impl ! ( new_ch4, new_ch4_with_config , Ch4 , Channel4Pin ) ;
81
91
82
92
/// A single channel of a pwm, obtained from [`SimplePwm::split`],
83
93
/// [`SimplePwm::channel`], [`SimplePwm::ch1`], etc.
0 commit comments