Skip to content

Commit 9d62fba

Browse files
authored
Merge pull request #4112 from embassy-rs/update-metapac-4929
stm32: update metapac, cleanup clocks a bit.
2 parents 4c6311a + 7512c5f commit 9d62fba

File tree

9 files changed

+63
-44
lines changed

9 files changed

+63
-44
lines changed

embassy-stm32/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ rand_core = "0.6.3"
7373
sdio-host = "0.9.0"
7474
critical-section = "1.1"
7575
#stm32-metapac = { version = "16" }
76-
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-a7a30c9d54e7415709c463a537501691784672db" }
76+
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-380f03cb71f43a242adc45e83607a380ffe0447b" }
7777

7878
vcell = "0.1.3"
7979
nb = "1.0.0"
@@ -102,7 +102,7 @@ proc-macro2 = "1.0.36"
102102
quote = "1.0.15"
103103

104104
#stm32-metapac = { version = "16", default-features = false, features = ["metadata"]}
105-
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-a7a30c9d54e7415709c463a537501691784672db", default-features = false, features = ["metadata"] }
105+
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-380f03cb71f43a242adc45e83607a380ffe0447b", default-features = false, features = ["metadata"] }
106106

107107
[features]
108108
default = ["rt"]

embassy-stm32/build.rs

+56-25
Original file line numberDiff line numberDiff line change
@@ -489,9 +489,39 @@ fn main() {
489489
}
490490

491491
impl<'a> ClockGen<'a> {
492+
fn parse_mul_div(name: &str) -> (&str, Frac) {
493+
if name == "hse_div_rtcpre" {
494+
return (name, Frac { num: 1, denom: 1 });
495+
}
496+
497+
if let Some(i) = name.find("_div_") {
498+
let n = &name[..i];
499+
let val: u32 = name[i + 5..].parse().unwrap();
500+
(n, Frac { num: 1, denom: val })
501+
} else if let Some(i) = name.find("_mul_") {
502+
let n = &name[..i];
503+
let val: u32 = name[i + 5..].parse().unwrap();
504+
(n, Frac { num: val, denom: 1 })
505+
} else {
506+
(name, Frac { num: 1, denom: 1 })
507+
}
508+
}
509+
492510
fn gen_clock(&mut self, peripheral: &str, name: &str) -> TokenStream {
493-
let clock_name = format_ident!("{}", name.to_ascii_lowercase());
494-
self.clock_names.insert(name.to_ascii_lowercase());
511+
let name = name.to_ascii_lowercase();
512+
let (name, frac) = Self::parse_mul_div(&name);
513+
let clock_name = format_ident!("{}", name);
514+
self.clock_names.insert(name.to_string());
515+
516+
let mut muldiv = quote!();
517+
if frac.num != 1 {
518+
let val = frac.num;
519+
muldiv.extend(quote!(* #val));
520+
}
521+
if frac.denom != 1 {
522+
let val = frac.denom;
523+
muldiv.extend(quote!(/ #val));
524+
}
495525
quote!(unsafe {
496526
unwrap!(
497527
crate::rcc::get_freqs().#clock_name.to_hertz(),
@@ -500,6 +530,7 @@ fn main() {
500530
#peripheral,
501531
#name
502532
)
533+
#muldiv
503534
})
504535
}
505536

@@ -1503,29 +1534,6 @@ fn main() {
15031534
}
15041535
}
15051536

1506-
#[derive(Copy, Clone, Debug)]
1507-
struct Frac {
1508-
num: u32,
1509-
denom: u32,
1510-
}
1511-
1512-
impl Frac {
1513-
fn simplify(self) -> Self {
1514-
let d = gcd(self.num, self.denom);
1515-
Self {
1516-
num: self.num / d,
1517-
denom: self.denom / d,
1518-
}
1519-
}
1520-
}
1521-
1522-
fn gcd(a: u32, b: u32) -> u32 {
1523-
if b == 0 {
1524-
return a;
1525-
}
1526-
gcd(b, a % b)
1527-
}
1528-
15291537
fn parse_num(n: &str) -> Result<Frac, ()> {
15301538
for prefix in ["DIV", "MUL"] {
15311539
if let Some(n) = n.strip_prefix(prefix) {
@@ -2136,3 +2144,26 @@ fn mem_filter(chip: &str, region: &str) -> bool {
21362144

21372145
true
21382146
}
2147+
2148+
#[derive(Copy, Clone, Debug)]
2149+
struct Frac {
2150+
num: u32,
2151+
denom: u32,
2152+
}
2153+
2154+
impl Frac {
2155+
fn simplify(self) -> Self {
2156+
let d = gcd(self.num, self.denom);
2157+
Self {
2158+
num: self.num / d,
2159+
denom: self.denom / d,
2160+
}
2161+
}
2162+
}
2163+
2164+
fn gcd(a: u32, b: u32) -> u32 {
2165+
if b == 0 {
2166+
return a;
2167+
}
2168+
gcd(b, a % b)
2169+
}

embassy-stm32/src/rcc/f013.rs

-6
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,6 @@ pub(crate) unsafe fn init(config: Config) {
289289
out_freq
290290
});
291291

292-
#[cfg(stm32f3)]
293-
let pll_mul_2 = pll.map(|pll| pll * 2u32);
294-
295292
#[cfg(any(rcc_f1, rcc_f1cl, stm32f3, stm32f107))]
296293
let usb = match pll {
297294
Some(Hertz(72_000_000)) => Some(crate::pac::rcc::vals::Usbpre::DIV1_5),
@@ -483,9 +480,6 @@ pub(crate) unsafe fn init(config: Config) {
483480
hsi: hsi,
484481
hse: hse,
485482
pll1_p: pll,
486-
#[cfg(stm32f3)]
487-
pll1_p_mul_2: pll_mul_2,
488-
hsi_div_244: hsi.map(|h| h / 244u32),
489483
sys: Some(sys),
490484
pclk1: Some(pclk1),
491485
pclk2: Some(pclk2),

embassy-stm32/src/rcc/f247.rs

-1
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,6 @@ pub(crate) unsafe fn init(config: Config) {
316316
#[cfg(dsihost)]
317317
dsi_phy: None, // DSI PLL clock not supported, don't call `RccPeripheral::frequency()` in the drivers
318318

319-
hsi_div488: hsi.map(|hsi| hsi/488u32),
320319
hsi_hse: None,
321320
afif: None,
322321
);

embassy-stm32/src/rcc/g0.rs

-2
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,6 @@ pub(crate) unsafe fn init(config: Config) {
309309
#[cfg(crs)]
310310
hsi48: hsi48,
311311
rtc: rtc,
312-
hsi_div_8: hsi.map(|h| h / 8u32),
313-
hsi_div_488: hsi.map(|h| h / 488u32),
314312

315313
// TODO
316314
lsi: None,

embassy-stm32/src/rcc/g4.rs

+2
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ pub(crate) unsafe fn init(config: Config) {
320320
hse: hse,
321321
hsi48: hsi48,
322322
rtc: rtc,
323+
lsi: None,
324+
lse: None,
323325
);
324326
}
325327

embassy-stm32/src/rcc/h.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,6 @@ pub(crate) unsafe fn init(config: Config) {
687687
hsi: hsi,
688688
hsi48: hsi48,
689689
csi: csi,
690-
csi_div_122: csi.map(|c| c / 122u32),
691690
hse: hse,
692691

693692
lse: None,
@@ -726,9 +725,9 @@ pub(crate) unsafe fn init(config: Config) {
726725
#[cfg(stm32h7rs)]
727726
clk48mohci: None, // TODO
728727
#[cfg(stm32h7rs)]
729-
hse_div_2: hse.map(|clk| clk / 2u32),
730-
#[cfg(stm32h7rs)]
731728
usb: Some(Hertz(48_000_000)),
729+
#[cfg(stm32h5)]
730+
hse_div_rtcpre: None, // TODO
732731
);
733732
}
734733

embassy-stm32/src/rcc/l.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ pub(crate) unsafe fn init(config: Config) {
396396
hsi48: hsi48,
397397

398398
#[cfg(any(stm32l0, stm32l1))]
399-
pll1_vco_div_2: pll.vco.map(|c| c/2u32),
399+
pll1_vco: pll.vco,
400400

401401
#[cfg(not(any(stm32l0, stm32l1)))]
402402
pll1_p: pll.p,

embassy-stm32/src/rcc/u5.rs

-4
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,8 @@ pub(crate) unsafe fn init(config: Config) {
345345
lse: lse,
346346
lsi: lsi,
347347
hse: hse,
348-
hse_div_2: hse.map(|clk| clk / 2u32),
349348
hsi: hsi,
350349
pll1_p: pll1.p,
351-
pll1_p_div_2: pll1.p.map(|clk| clk / 2u32),
352350
pll1_q: pll1.q,
353351
pll1_r: pll1.r,
354352
pll2_p: pll2.p,
@@ -363,9 +361,7 @@ pub(crate) unsafe fn init(config: Config) {
363361

364362
// TODO
365363
audioclk: None,
366-
hsi48_div_2: None,
367364
shsi: None,
368-
shsi_div_2: None,
369365
);
370366
}
371367

0 commit comments

Comments
 (0)