Skip to content

Commit 000983e

Browse files
committed
Rewrite to use a single freeze_unchecked method
1 parent 5c58afe commit 000983e

File tree

1 file changed

+15
-26
lines changed

1 file changed

+15
-26
lines changed

src/rcc.rs

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ impl RccExt for RCC {
1919
pclk2: None,
2020
sysclk: None,
2121
pll48clk: false,
22-
pclk1_overclock: false,
23-
pclk2_overclock: false,
24-
sysclk_overclock: false,
2522
},
2623
}
2724
}
@@ -127,9 +124,6 @@ pub struct CFGR {
127124
pclk2: Option<u32>,
128125
sysclk: Option<u32>,
129126
pll48clk: bool,
130-
pclk1_overclock: bool,
131-
pclk2_overclock: bool,
132-
sysclk_overclock: bool,
133127
}
134128

135129
impl CFGR {
@@ -180,21 +174,6 @@ impl CFGR {
180174
self
181175
}
182176

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-
198177
#[inline(always)]
199178
fn pll_setup(&self) -> (bool, bool, u32, Option<Hertz>) {
200179
let pllsrcclk = self.hse.unwrap_or(HSI);
@@ -306,14 +285,24 @@ impl CFGR {
306285
}
307286
}
308287

288+
/// Initialises the hardware according to CFGR state returning a Clocks instance.
289+
/// Panics if overclocking is attempted.
309290
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 {
310301
let rcc = unsafe { &*RCC::ptr() };
311302

312303
let (use_pll, sysclk_on_pll, sysclk, pll48clk) = self.pll_setup();
313304

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);
317306

318307
let hclk = self.hclk.unwrap_or(sysclk);
319308
let (hpre_bits, hpre_div) = match (sysclk + hclk - 1) / hclk {
@@ -347,7 +336,7 @@ impl CFGR {
347336
// Calculate real APB1 clock
348337
let pclk1 = hclk / u32::from(ppre1);
349338

350-
assert!(self.pclk1_overclock || pclk1 <= PCLK1_MAX);
339+
assert!(unchecked || pclk1 <= PCLK1_MAX);
351340

352341
let pclk2 = self
353342
.pclk2
@@ -364,7 +353,7 @@ impl CFGR {
364353
// Calculate real APB2 clock
365354
let pclk2 = hclk / u32::from(ppre2);
366355

367-
assert!(self.pclk2_overclock || pclk2 <= PCLK2_MAX);
356+
assert!(unchecked || pclk2 <= PCLK2_MAX);
368357

369358
Self::flash_setup(sysclk);
370359

0 commit comments

Comments
 (0)