diff options
| author | randi <[email protected]> | 2023-10-07 12:22:31 +1300 |
|---|---|---|
| committer | randi <[email protected]> | 2023-10-07 12:22:31 +1300 |
| commit | 710874021a783768f5d2d3f712e095eba3bc1627 (patch) | |
| tree | ceab2d6ea73e752118e18e3b5dfb8427a66abc46 | |
| parent | b217d147deab67a988df0d5e58a15eb9260dd6fa (diff) | |
Implemented Pwm trait for complementary pwm from embedded_hal
| -rw-r--r-- | embassy-stm32/src/timer/complementary_pwm.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/embassy-stm32/src/timer/complementary_pwm.rs b/embassy-stm32/src/timer/complementary_pwm.rs index 4f033e3a2..0ab727344 100644 --- a/embassy-stm32/src/timer/complementary_pwm.rs +++ b/embassy-stm32/src/timer/complementary_pwm.rs | |||
| @@ -122,6 +122,46 @@ impl<'d, T: ComplementaryCaptureCompare16bitInstance> ComplementaryPwm<'d, T> { | |||
| 122 | } | 122 | } |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | impl<'d, T: ComplementaryCaptureCompare16bitInstance> embedded_hal_02::Pwm for ComplementaryPwm<'d, T> { | ||
| 126 | type Channel = Channel; | ||
| 127 | type Time = Hertz; | ||
| 128 | type Duty = u16; | ||
| 129 | |||
| 130 | fn disable(&mut self, channel: Self::Channel) { | ||
| 131 | self.inner.enable_complementary_channel(channel, false); | ||
| 132 | self.inner.enable_channel(channel, false); | ||
| 133 | } | ||
| 134 | |||
| 135 | fn enable(&mut self, channel: Self::Channel) { | ||
| 136 | self.inner.enable_channel(channel, true); | ||
| 137 | self.inner.enable_complementary_channel(channel, true); | ||
| 138 | } | ||
| 139 | |||
| 140 | fn get_period(&self) -> Self::Time { | ||
| 141 | self.inner.get_frequency().into() | ||
| 142 | } | ||
| 143 | |||
| 144 | fn get_duty(&self, channel: Self::Channel) -> Self::Duty { | ||
| 145 | self.inner.get_compare_value(channel) | ||
| 146 | } | ||
| 147 | |||
| 148 | fn get_max_duty(&self) -> Self::Duty { | ||
| 149 | self.inner.get_max_compare_value() + 1 | ||
| 150 | } | ||
| 151 | |||
| 152 | fn set_duty(&mut self, channel: Self::Channel, duty: Self::Duty) { | ||
| 153 | assert!(duty <= self.get_max_duty()); | ||
| 154 | self.inner.set_compare_value(channel, duty) | ||
| 155 | } | ||
| 156 | |||
| 157 | fn set_period<P>(&mut self, period: P) | ||
| 158 | where | ||
| 159 | P: Into<Self::Time>, | ||
| 160 | { | ||
| 161 | self.inner.set_frequency(period.into()); | ||
| 162 | } | ||
| 163 | } | ||
| 164 | |||
| 125 | fn compute_dead_time_value(value: u16) -> (Ckd, u8) { | 165 | fn compute_dead_time_value(value: u16) -> (Ckd, u8) { |
| 126 | /* | 166 | /* |
| 127 | Dead-time = T_clk * T_dts * T_dtg | 167 | Dead-time = T_clk * T_dts * T_dtg |
