@@ -9,7 +9,7 @@ use crate::stm32::{TIM1, TIM15, TIM2};
9
9
use crate :: gpio:: gpioa:: { PA0 , PA1 , PA10 , PA11 , PA15 , PA2 , PA3 , PA8 , PA9 } ;
10
10
use crate :: gpio:: gpiob:: { PB10 , PB11 , PB14 , PB3 } ;
11
11
use crate :: gpio:: Alternate ;
12
- use crate :: rcc:: { Clocks , Enable , Reset , APB1R1 , APB2 } ;
12
+ use crate :: rcc:: { BusTimerClock , Clocks , Enable , RccBus , Reset } ;
13
13
use crate :: time:: Hertz ;
14
14
15
15
// NB: REMAP is not implemented!
@@ -103,28 +103,27 @@ pins_to_channels_mapping! {
103
103
// TIM15: (PA2, PA3), (C1, C2), (14, 14);
104
104
}
105
105
106
- pub trait PwmExt1 : Sized {
107
- fn pwm < PINS , T > ( self , _: PINS , frequency : T , clocks : Clocks , apb : & mut APB2 ) -> PINS :: Channels
108
- where
109
- PINS : Pins < Self > ,
110
- T : Into < Hertz > ;
111
- }
112
-
113
- pub trait PwmExt2 : Sized {
106
+ pub trait PwmExt : Sized + RccBus {
114
107
fn pwm < PINS , T > (
115
108
self ,
116
109
_: PINS ,
117
110
frequency : T ,
118
111
clocks : Clocks ,
119
- apb : & mut APB1R1 ,
112
+ apb : & mut Self :: Bus ,
120
113
) -> PINS :: Channels
121
114
where
122
115
PINS : Pins < Self > ,
123
116
T : Into < Hertz > ;
124
117
}
125
118
126
- impl PwmExt1 for TIM1 {
127
- fn pwm < PINS , T > ( self , _pins : PINS , freq : T , clocks : Clocks , apb : & mut APB2 ) -> PINS :: Channels
119
+ impl PwmExt for TIM1 {
120
+ fn pwm < PINS , T > (
121
+ self ,
122
+ _pins : PINS ,
123
+ freq : T ,
124
+ clocks : Clocks ,
125
+ apb : & mut Self :: Bus ,
126
+ ) -> PINS :: Channels
128
127
where
129
128
PINS : Pins < Self > ,
130
129
T : Into < Hertz > ,
@@ -133,8 +132,14 @@ impl PwmExt1 for TIM1 {
133
132
}
134
133
}
135
134
136
- impl PwmExt1 for TIM15 {
137
- fn pwm < PINS , T > ( self , _pins : PINS , freq : T , clocks : Clocks , apb : & mut APB2 ) -> PINS :: Channels
135
+ impl PwmExt for TIM15 {
136
+ fn pwm < PINS , T > (
137
+ self ,
138
+ _pins : PINS ,
139
+ freq : T ,
140
+ clocks : Clocks ,
141
+ apb : & mut Self :: Bus ,
142
+ ) -> PINS :: Channels
138
143
where
139
144
PINS : Pins < Self > ,
140
145
T : Into < Hertz > ,
@@ -143,8 +148,14 @@ impl PwmExt1 for TIM15 {
143
148
}
144
149
}
145
150
146
- impl PwmExt2 for TIM2 {
147
- fn pwm < PINS , T > ( self , _pins : PINS , freq : T , clocks : Clocks , apb : & mut APB1R1 ) -> PINS :: Channels
151
+ impl PwmExt for TIM2 {
152
+ fn pwm < PINS , T > (
153
+ self ,
154
+ _pins : PINS ,
155
+ freq : T ,
156
+ clocks : Clocks ,
157
+ apb : & mut Self :: Bus ,
158
+ ) -> PINS :: Channels
148
159
where
149
160
PINS : Pins < Self > ,
150
161
T : Into < Hertz > ,
@@ -170,14 +181,14 @@ pub struct C3;
170
181
pub struct C4 ;
171
182
172
183
macro_rules! advanced_timer {
173
- ( $( $TIMX: ident: ( $timX: ident, $apb : ident , $ psc_width: ident, $arr_width: ident) , ) +) => {
184
+ ( $( $TIMX: ident: ( $timX: ident, $psc_width: ident, $arr_width: ident) , ) +) => {
174
185
$(
175
186
fn $timX<PINS >(
176
187
tim: $TIMX,
177
188
_pins: PINS ,
178
189
freq: Hertz ,
179
190
clocks: Clocks ,
180
- apb: & mut $apb ,
191
+ apb: & mut <$TIMX as RccBus > :: Bus ,
181
192
) -> PINS :: Channels
182
193
where
183
194
PINS : Pins <$TIMX>,
@@ -201,9 +212,8 @@ macro_rules! advanced_timer {
201
212
tim. ccmr2_output( ) . modify( |_, w| w. oc4pe( ) . set_bit( ) . oc4m( ) . bits( 6 ) ) ;
202
213
}
203
214
204
- let clk = clocks. pclk2( ) . 0 ;
205
- let freq = freq. 0 ;
206
- let ticks = clk / freq;
215
+ let clk = <$TIMX as BusTimerClock >:: timer_clock( & clocks) ;
216
+ let ticks = clk. 0 / freq. 0 ;
207
217
208
218
// maybe this is all u32? also, why no `- 1` vs `timer.rs`?
209
219
let psc = ticks / ( 1 << 16 ) ;
@@ -239,14 +249,14 @@ macro_rules! advanced_timer {
239
249
}
240
250
241
251
macro_rules! standard_timer {
242
- ( $( $TIMX: ident: ( $timX: ident, $apb : ident , $ psc_width: ident, $arr_width: ident) , ) +) => {
252
+ ( $( $TIMX: ident: ( $timX: ident, $psc_width: ident, $arr_width: ident) , ) +) => {
243
253
$(
244
254
fn $timX<PINS >(
245
255
tim: $TIMX,
246
256
_pins: PINS ,
247
257
freq: Hertz ,
248
258
clocks: Clocks ,
249
- apb: & mut $apb ,
259
+ apb: & mut <$TIMX as RccBus > :: Bus ,
250
260
) -> PINS :: Channels
251
261
where
252
262
PINS : Pins <$TIMX>,
@@ -270,9 +280,8 @@ macro_rules! standard_timer {
270
280
tim. ccmr2_output( ) . modify( |_, w| w. oc4pe( ) . set_bit( ) . oc4m( ) . bits( 6 ) ) ;
271
281
}
272
282
273
- let clk = clocks. pclk1( ) . 0 ;
274
- let freq = freq. 0 ;
275
- let ticks = clk / freq;
283
+ let clk = <$TIMX as BusTimerClock >:: timer_clock( & clocks) ;
284
+ let ticks = clk. 0 / freq. 0 ;
276
285
277
286
// maybe this is all u32? also, why no `- 1` vs `timer.rs`?
278
287
let psc = ticks / ( 1 << 16 ) ;
@@ -304,14 +313,14 @@ macro_rules! standard_timer {
304
313
}
305
314
306
315
macro_rules! small_timer {
307
- ( $( $TIMX: ident: ( $timX: ident, $apb : ident , $ psc_width: ident, $arr_width: ident) , ) +) => {
316
+ ( $( $TIMX: ident: ( $timX: ident, $psc_width: ident, $arr_width: ident) , ) +) => {
308
317
$(
309
318
fn $timX<PINS >(
310
319
tim: $TIMX,
311
320
_pins: PINS ,
312
321
freq: Hertz ,
313
322
clocks: Clocks ,
314
- apb: & mut $apb ,
323
+ apb: & mut <$TIMX as RccBus > :: Bus ,
315
324
) -> PINS :: Channels
316
325
where
317
326
PINS : Pins <$TIMX>,
@@ -328,9 +337,8 @@ macro_rules! small_timer {
328
337
// tim.ccmr1_output().modify(|_, w| w.oc2pe().set_bit().oc2m().bits(6));
329
338
// }
330
339
331
- let clk = clocks. pclk1( ) . 0 ;
332
- let freq = freq. 0 ;
333
- let ticks = clk / freq;
340
+ let clk = <$TIMX as BusTimerClock >:: timer_clock( & clocks) ;
341
+ let ticks = clk. 0 / freq. 0 ;
334
342
335
343
// maybe this is all u32? also, why no `- 1` vs `timer.rs`?
336
344
let psc = ticks / ( 1 << 16 ) ;
@@ -396,13 +404,13 @@ macro_rules! pwm_channels {
396
404
}
397
405
398
406
advanced_timer ! {
399
- TIM1 : ( tim1, APB2 , u16 , u16 ) ,
407
+ TIM1 : ( tim1, u16 , u16 ) ,
400
408
}
401
409
402
410
standard_timer ! {
403
- TIM2 : ( tim2, APB1R1 , u16 , u32 ) ,
411
+ TIM2 : ( tim2, u16 , u32 ) ,
404
412
}
405
413
406
414
small_timer ! {
407
- TIM15 : ( tim15, APB2 , u16 , u16 ) ,
415
+ TIM15 : ( tim15, u16 , u16 ) ,
408
416
}
0 commit comments