1
1
//! Reset and Clock Control
2
2
3
3
use crate :: stm32:: {
4
- rcc:: { self , cfgr} ,
4
+ rcc:: { self , cfgr, cfgr2 } ,
5
5
RCC ,
6
6
} ;
7
7
@@ -169,9 +169,9 @@ pub struct CFGR {
169
169
}
170
170
171
171
pub ( crate ) struct PllConfig {
172
- src : rcc :: cfgr:: PLLSRC_A ,
173
- mul : rcc :: cfgr:: PLLMUL_A ,
174
- div : Option < rcc :: cfgr2:: PREDIV_A > ,
172
+ src : cfgr:: PLLSRC_A ,
173
+ mul : cfgr:: PLLMUL_A ,
174
+ div : Option < cfgr2:: PREDIV_A > ,
175
175
}
176
176
177
177
/// Determine the [greatest common divisor](https://en.wikipedia.org/wiki/Greatest_common_divisor)
@@ -187,46 +187,46 @@ fn gcd(mut a: u32, mut b: u32) -> u32 {
187
187
}
188
188
189
189
/// Convert pll multiplier into equivalent register field type
190
- fn into_pll_mul ( mul : u8 ) -> rcc :: cfgr:: PLLMUL_A {
190
+ fn into_pll_mul ( mul : u8 ) -> cfgr:: PLLMUL_A {
191
191
match mul {
192
- 2 => rcc :: cfgr:: PLLMUL_A :: MUL2 ,
193
- 3 => rcc :: cfgr:: PLLMUL_A :: MUL3 ,
194
- 4 => rcc :: cfgr:: PLLMUL_A :: MUL4 ,
195
- 5 => rcc :: cfgr:: PLLMUL_A :: MUL5 ,
196
- 6 => rcc :: cfgr:: PLLMUL_A :: MUL6 ,
197
- 7 => rcc :: cfgr:: PLLMUL_A :: MUL7 ,
198
- 8 => rcc :: cfgr:: PLLMUL_A :: MUL8 ,
199
- 9 => rcc :: cfgr:: PLLMUL_A :: MUL9 ,
200
- 10 => rcc :: cfgr:: PLLMUL_A :: MUL10 ,
201
- 11 => rcc :: cfgr:: PLLMUL_A :: MUL11 ,
202
- 12 => rcc :: cfgr:: PLLMUL_A :: MUL12 ,
203
- 13 => rcc :: cfgr:: PLLMUL_A :: MUL13 ,
204
- 14 => rcc :: cfgr:: PLLMUL_A :: MUL14 ,
205
- 15 => rcc :: cfgr:: PLLMUL_A :: MUL15 ,
206
- 16 => rcc :: cfgr:: PLLMUL_A :: MUL16 ,
192
+ 2 => cfgr:: PLLMUL_A :: MUL2 ,
193
+ 3 => cfgr:: PLLMUL_A :: MUL3 ,
194
+ 4 => cfgr:: PLLMUL_A :: MUL4 ,
195
+ 5 => cfgr:: PLLMUL_A :: MUL5 ,
196
+ 6 => cfgr:: PLLMUL_A :: MUL6 ,
197
+ 7 => cfgr:: PLLMUL_A :: MUL7 ,
198
+ 8 => cfgr:: PLLMUL_A :: MUL8 ,
199
+ 9 => cfgr:: PLLMUL_A :: MUL9 ,
200
+ 10 => cfgr:: PLLMUL_A :: MUL10 ,
201
+ 11 => cfgr:: PLLMUL_A :: MUL11 ,
202
+ 12 => cfgr:: PLLMUL_A :: MUL12 ,
203
+ 13 => cfgr:: PLLMUL_A :: MUL13 ,
204
+ 14 => cfgr:: PLLMUL_A :: MUL14 ,
205
+ 15 => cfgr:: PLLMUL_A :: MUL15 ,
206
+ 16 => cfgr:: PLLMUL_A :: MUL16 ,
207
207
_ => unreachable ! ( ) ,
208
208
}
209
209
}
210
210
211
211
/// Convert pll divisor into equivalent register field type
212
- fn into_pre_div ( div : u8 ) -> rcc :: cfgr2:: PREDIV_A {
212
+ fn into_pre_div ( div : u8 ) -> cfgr2:: PREDIV_A {
213
213
match div {
214
- 1 => rcc :: cfgr2:: PREDIV_A :: DIV1 ,
215
- 2 => rcc :: cfgr2:: PREDIV_A :: DIV2 ,
216
- 3 => rcc :: cfgr2:: PREDIV_A :: DIV3 ,
217
- 4 => rcc :: cfgr2:: PREDIV_A :: DIV4 ,
218
- 5 => rcc :: cfgr2:: PREDIV_A :: DIV5 ,
219
- 6 => rcc :: cfgr2:: PREDIV_A :: DIV6 ,
220
- 7 => rcc :: cfgr2:: PREDIV_A :: DIV7 ,
221
- 8 => rcc :: cfgr2:: PREDIV_A :: DIV8 ,
222
- 9 => rcc :: cfgr2:: PREDIV_A :: DIV9 ,
223
- 10 => rcc :: cfgr2:: PREDIV_A :: DIV10 ,
224
- 11 => rcc :: cfgr2:: PREDIV_A :: DIV11 ,
225
- 12 => rcc :: cfgr2:: PREDIV_A :: DIV12 ,
226
- 13 => rcc :: cfgr2:: PREDIV_A :: DIV13 ,
227
- 14 => rcc :: cfgr2:: PREDIV_A :: DIV14 ,
228
- 15 => rcc :: cfgr2:: PREDIV_A :: DIV15 ,
229
- 16 => rcc :: cfgr2:: PREDIV_A :: DIV16 ,
214
+ 1 => cfgr2:: PREDIV_A :: DIV1 ,
215
+ 2 => cfgr2:: PREDIV_A :: DIV2 ,
216
+ 3 => cfgr2:: PREDIV_A :: DIV3 ,
217
+ 4 => cfgr2:: PREDIV_A :: DIV4 ,
218
+ 5 => cfgr2:: PREDIV_A :: DIV5 ,
219
+ 6 => cfgr2:: PREDIV_A :: DIV6 ,
220
+ 7 => cfgr2:: PREDIV_A :: DIV7 ,
221
+ 8 => cfgr2:: PREDIV_A :: DIV8 ,
222
+ 9 => cfgr2:: PREDIV_A :: DIV9 ,
223
+ 10 => cfgr2:: PREDIV_A :: DIV10 ,
224
+ 11 => cfgr2:: PREDIV_A :: DIV11 ,
225
+ 12 => cfgr2:: PREDIV_A :: DIV12 ,
226
+ 13 => cfgr2:: PREDIV_A :: DIV13 ,
227
+ 14 => cfgr2:: PREDIV_A :: DIV14 ,
228
+ 15 => cfgr2:: PREDIV_A :: DIV15 ,
229
+ 16 => cfgr2:: PREDIV_A :: DIV16 ,
230
230
_ => unreachable ! ( ) ,
231
231
}
232
232
}
@@ -341,7 +341,7 @@ impl CFGR {
341
341
assert ! ( sysclk <= 72_000_000 ) ;
342
342
343
343
let pll_src = if self . hse . is_some ( ) {
344
- rcc :: cfgr:: PLLSRC_A :: HSE_DIV_PREDIV
344
+ cfgr:: PLLSRC_A :: HSE_DIV_PREDIV
345
345
} else {
346
346
cfgr:: PLLSRC_A :: HSI_DIV2
347
347
} ;
@@ -412,9 +412,9 @@ impl CFGR {
412
412
// Select hardware clock source of the PLL
413
413
// TODO Check whether HSI_DIV2 could be useful
414
414
let pll_src = if self . hse . is_some ( ) {
415
- rcc :: cfgr:: PLLSRC_A :: HSE_DIV_PREDIV
415
+ cfgr:: PLLSRC_A :: HSE_DIV_PREDIV
416
416
} else {
417
- rcc :: cfgr:: PLLSRC_A :: HSI_DIV_PREDIV
417
+ cfgr:: PLLSRC_A :: HSI_DIV_PREDIV
418
418
} ;
419
419
420
420
// Convert into register bit field types
@@ -436,7 +436,7 @@ impl CFGR {
436
436
/// The system clock source is determined by the chosen system clock and the provided hardware
437
437
/// clock.
438
438
/// This function does only chose the PLL if needed, otherwise it will use the oscillator clock as system clock.
439
- fn get_sysclk ( & self ) -> ( u32 , rcc :: cfgr:: SW_A , Option < PllConfig > ) {
439
+ fn get_sysclk ( & self ) -> ( u32 , cfgr:: SW_A , Option < PllConfig > ) {
440
440
// If a sysclk is given, check if the PLL has to be used,
441
441
// else select the system clock source, which is either HSI or HSE.
442
442
if let Some ( sysclk) = self . sysclk {
@@ -447,32 +447,32 @@ impl CFGR {
447
447
// because the two valid USB clocks, 72 Mhz and 48 Mhz, can't be generated
448
448
// directly from neither the internal rc (8 Mhz) nor the external
449
449
// Oscillator (max 32 Mhz), without using the PLL.
450
- ( hseclk, rcc :: cfgr:: SW_A :: HSE , None )
450
+ ( hseclk, cfgr:: SW_A :: HSE , None )
451
451
} else {
452
452
let clock_with_pll = self . calc_pll ( sysclk) ;
453
453
(
454
454
clock_with_pll. 0 ,
455
- rcc :: cfgr:: SW_A :: PLL ,
455
+ cfgr:: SW_A :: PLL ,
456
456
Some ( clock_with_pll. 1 ) ,
457
457
)
458
458
}
459
459
} else if sysclk == HSI {
460
460
// No need to use the PLL
461
- ( HSI , rcc :: cfgr:: SW_A :: HSE , None )
461
+ ( HSI , cfgr:: SW_A :: HSE , None )
462
462
} else {
463
463
let clock_with_pll = self . calc_pll ( sysclk) ;
464
464
(
465
465
clock_with_pll. 0 ,
466
- rcc :: cfgr:: SW_A :: PLL ,
466
+ cfgr:: SW_A :: PLL ,
467
467
Some ( clock_with_pll. 1 ) ,
468
468
)
469
469
}
470
470
} else if let Some ( hseclk) = self . hse {
471
471
// Use HSE as system clock
472
- ( hseclk, rcc :: cfgr:: SW_A :: HSE , None )
472
+ ( hseclk, cfgr:: SW_A :: HSE , None )
473
473
} else {
474
474
// Use HSI as system clock
475
- ( HSI , rcc :: cfgr:: SW_A :: HSI , None )
475
+ ( HSI , cfgr:: SW_A :: HSI , None )
476
476
}
477
477
}
478
478
0 commit comments