@@ -19,9 +19,6 @@ impl RccExt for RCC {
19
19
pclk2 : None ,
20
20
sysclk : None ,
21
21
pll48clk : false ,
22
- pclk1_overclock : false ,
23
- pclk2_overclock : false ,
24
- sysclk_overclock : false ,
25
22
} ,
26
23
}
27
24
}
@@ -127,9 +124,6 @@ pub struct CFGR {
127
124
pclk2 : Option < u32 > ,
128
125
sysclk : Option < u32 > ,
129
126
pll48clk : bool ,
130
- pclk1_overclock : bool ,
131
- pclk2_overclock : bool ,
132
- sysclk_overclock : bool ,
133
127
}
134
128
135
129
impl CFGR {
@@ -180,21 +174,6 @@ impl CFGR {
180
174
self
181
175
}
182
176
183
- pub unsafe fn pclk1_allow_overclock ( mut self ) -> Self {
184
- self . pclk1_overclock = true ;
185
- self
186
- }
187
-
188
- pub unsafe fn pclk2_allow_overclock ( mut self ) -> Self {
189
- self . pclk2_overclock = true ;
190
- self
191
- }
192
-
193
- pub unsafe fn sysclk_allow_overclock ( mut self ) -> Self {
194
- self . sysclk_overclock = true ;
195
- self
196
- }
197
-
198
177
#[ inline( always) ]
199
178
fn pll_setup ( & self ) -> ( bool , bool , u32 , Option < Hertz > ) {
200
179
let pllsrcclk = self . hse . unwrap_or ( HSI ) ;
@@ -306,14 +285,24 @@ impl CFGR {
306
285
}
307
286
}
308
287
288
+ /// Initialises the hardware according to CFGR state returning a Clocks instance.
289
+ /// Panics if overclocking is attempted.
309
290
pub fn freeze ( self ) -> Clocks {
291
+ self . freeze_internal ( false )
292
+ }
293
+
294
+ /// Initialises the hardware according to CFGR state returning a Clocks instance.
295
+ /// Allows overclocking.
296
+ pub unsafe fn freeze_unchecked ( self ) -> Clocks {
297
+ self . freeze_internal ( true )
298
+ }
299
+
300
+ pub fn freeze_internal ( self , unchecked : bool ) -> Clocks {
310
301
let rcc = unsafe { & * RCC :: ptr ( ) } ;
311
302
312
303
let ( use_pll, sysclk_on_pll, sysclk, pll48clk) = self . pll_setup ( ) ;
313
304
314
- assert ! (
315
- self . sysclk_overclock || !sysclk_on_pll || sysclk <= SYSCLK_MAX && sysclk >= SYSCLK_MIN
316
- ) ;
305
+ assert ! ( unchecked || !sysclk_on_pll || sysclk <= SYSCLK_MAX && sysclk >= SYSCLK_MIN ) ;
317
306
318
307
let hclk = self . hclk . unwrap_or ( sysclk) ;
319
308
let ( hpre_bits, hpre_div) = match ( sysclk + hclk - 1 ) / hclk {
@@ -347,7 +336,7 @@ impl CFGR {
347
336
// Calculate real APB1 clock
348
337
let pclk1 = hclk / u32:: from ( ppre1) ;
349
338
350
- assert ! ( self . pclk1_overclock || pclk1 <= PCLK1_MAX ) ;
339
+ assert ! ( unchecked || pclk1 <= PCLK1_MAX ) ;
351
340
352
341
let pclk2 = self
353
342
. pclk2
@@ -364,7 +353,7 @@ impl CFGR {
364
353
// Calculate real APB2 clock
365
354
let pclk2 = hclk / u32:: from ( ppre2) ;
366
355
367
- assert ! ( self . pclk2_overclock || pclk2 <= PCLK2_MAX ) ;
356
+ assert ! ( unchecked || pclk2 <= PCLK2_MAX ) ;
368
357
369
358
Self :: flash_setup ( sysclk) ;
370
359
0 commit comments