Skip to content

Commit 469d551

Browse files
committed
rcc: fix rounding of hclk and pclk divisor
1 parent 3980bcd commit 469d551

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/rcc.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ impl CFGR {
221221

222222
assert!(!use_pll || sysclk <= sysclk_max && sysclk >= sysclk_min);
223223

224-
let (hpre_bits, hpre_div) = match sysclk / self.hclk.unwrap_or(sysclk) {
224+
let hclk = self.hclk.unwrap_or(sysclk);
225+
let (hpre_bits, hpre_div) = match (sysclk + hclk - 1) / hclk {
225226
0 => unreachable!(),
226227
1 => (HPREW::DIV1, 1),
227228
2 => (HPREW::DIV2, 2),
@@ -265,7 +266,7 @@ impl CFGR {
265266
let (pclk1_max, pclk2_max) = (50_000_000, 100_000_000);
266267

267268
let pclk1 = self.pclk1.unwrap_or(core::cmp::min(pclk1_max, hclk));
268-
let (ppre1_bits, ppre1) = match hclk / pclk1 {
269+
let (ppre1_bits, ppre1) = match (hclk + pclk1 - 1) / pclk1 {
269270
0 => unreachable!(),
270271
1 => (0b000, 1),
271272
2 => (0b100, 2),
@@ -280,7 +281,7 @@ impl CFGR {
280281
assert!(pclk1 <= pclk1_max);
281282

282283
let pclk2 = self.pclk2.unwrap_or(core::cmp::min(pclk2_max, hclk));
283-
let (ppre2_bits, ppre2) = match hclk / pclk2 {
284+
let (ppre2_bits, ppre2) = match (hclk + pclk2 - 1) / pclk2 {
284285
0 => unreachable!(),
285286
1 => (0b000, 1),
286287
2 => (0b100, 2),

0 commit comments

Comments
 (0)