diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-04-18 18:47:55 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-04-18 18:47:55 +0000 |
| commit | 9d62fba7d2e6b5d3bcb54770ffd031c1f3dafc84 (patch) | |
| tree | c67297584c724948e71dc7cf61979c2bba62b6e5 | |
| parent | 4c6311a1e306d031fd9ff413bbd42baba646384e (diff) | |
| parent | 7512c5f14ed90b264fa7b617bba8be6fc5ae53b4 (diff) | |
Merge pull request #4112 from embassy-rs/update-metapac-4929
stm32: update metapac, cleanup clocks a bit.
| -rw-r--r-- | embassy-stm32/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-stm32/build.rs | 81 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/f013.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/f247.rs | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/g0.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/g4.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/h.rs | 5 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/l.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/u5.rs | 4 |
9 files changed, 63 insertions, 44 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index d15ac4823..82bc76883 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -73,7 +73,7 @@ rand_core = "0.6.3" | |||
| 73 | sdio-host = "0.9.0" | 73 | sdio-host = "0.9.0" |
| 74 | critical-section = "1.1" | 74 | critical-section = "1.1" |
| 75 | #stm32-metapac = { version = "16" } | 75 | #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" } |
| 77 | 77 | ||
| 78 | vcell = "0.1.3" | 78 | vcell = "0.1.3" |
| 79 | nb = "1.0.0" | 79 | nb = "1.0.0" |
| @@ -102,7 +102,7 @@ proc-macro2 = "1.0.36" | |||
| 102 | quote = "1.0.15" | 102 | quote = "1.0.15" |
| 103 | 103 | ||
| 104 | #stm32-metapac = { version = "16", default-features = false, features = ["metadata"]} | 104 | #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"] } |
| 106 | 106 | ||
| 107 | [features] | 107 | [features] |
| 108 | default = ["rt"] | 108 | default = ["rt"] |
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index d982d9010..f9f03c51b 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -489,9 +489,39 @@ fn main() { | |||
| 489 | } | 489 | } |
| 490 | 490 | ||
| 491 | impl<'a> ClockGen<'a> { | 491 | 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 | |||
| 492 | fn gen_clock(&mut self, peripheral: &str, name: &str) -> TokenStream { | 510 | fn gen_clock(&mut self, peripheral: &str, name: &str) -> TokenStream { |
| 493 | let clock_name = format_ident!("{}", name.to_ascii_lowercase()); | 511 | let name = name.to_ascii_lowercase(); |
| 494 | self.clock_names.insert(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 | } | ||
| 495 | quote!(unsafe { | 525 | quote!(unsafe { |
| 496 | unwrap!( | 526 | unwrap!( |
| 497 | crate::rcc::get_freqs().#clock_name.to_hertz(), | 527 | crate::rcc::get_freqs().#clock_name.to_hertz(), |
| @@ -500,6 +530,7 @@ fn main() { | |||
| 500 | #peripheral, | 530 | #peripheral, |
| 501 | #name | 531 | #name |
| 502 | ) | 532 | ) |
| 533 | #muldiv | ||
| 503 | }) | 534 | }) |
| 504 | } | 535 | } |
| 505 | 536 | ||
| @@ -1503,29 +1534,6 @@ fn main() { | |||
| 1503 | } | 1534 | } |
| 1504 | } | 1535 | } |
| 1505 | 1536 | ||
| 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 | |||
| 1529 | fn parse_num(n: &str) -> Result<Frac, ()> { | 1537 | fn parse_num(n: &str) -> Result<Frac, ()> { |
| 1530 | for prefix in ["DIV", "MUL"] { | 1538 | for prefix in ["DIV", "MUL"] { |
| 1531 | if let Some(n) = n.strip_prefix(prefix) { | 1539 | if let Some(n) = n.strip_prefix(prefix) { |
| @@ -2136,3 +2144,26 @@ fn mem_filter(chip: &str, region: &str) -> bool { | |||
| 2136 | 2144 | ||
| 2137 | true | 2145 | true |
| 2138 | } | 2146 | } |
| 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 | } | ||
diff --git a/embassy-stm32/src/rcc/f013.rs b/embassy-stm32/src/rcc/f013.rs index 13b0ae38e..cfa223d1f 100644 --- a/embassy-stm32/src/rcc/f013.rs +++ b/embassy-stm32/src/rcc/f013.rs | |||
| @@ -289,9 +289,6 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 289 | out_freq | 289 | out_freq |
| 290 | }); | 290 | }); |
| 291 | 291 | ||
| 292 | #[cfg(stm32f3)] | ||
| 293 | let pll_mul_2 = pll.map(|pll| pll * 2u32); | ||
| 294 | |||
| 295 | #[cfg(any(rcc_f1, rcc_f1cl, stm32f3, stm32f107))] | 292 | #[cfg(any(rcc_f1, rcc_f1cl, stm32f3, stm32f107))] |
| 296 | let usb = match pll { | 293 | let usb = match pll { |
| 297 | Some(Hertz(72_000_000)) => Some(crate::pac::rcc::vals::Usbpre::DIV1_5), | 294 | Some(Hertz(72_000_000)) => Some(crate::pac::rcc::vals::Usbpre::DIV1_5), |
| @@ -483,9 +480,6 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 483 | hsi: hsi, | 480 | hsi: hsi, |
| 484 | hse: hse, | 481 | hse: hse, |
| 485 | pll1_p: pll, | 482 | pll1_p: pll, |
| 486 | #[cfg(stm32f3)] | ||
| 487 | pll1_p_mul_2: pll_mul_2, | ||
| 488 | hsi_div_244: hsi.map(|h| h / 244u32), | ||
| 489 | sys: Some(sys), | 483 | sys: Some(sys), |
| 490 | pclk1: Some(pclk1), | 484 | pclk1: Some(pclk1), |
| 491 | pclk2: Some(pclk2), | 485 | pclk2: Some(pclk2), |
diff --git a/embassy-stm32/src/rcc/f247.rs b/embassy-stm32/src/rcc/f247.rs index 8ce9d5f5b..ee67f1cc0 100644 --- a/embassy-stm32/src/rcc/f247.rs +++ b/embassy-stm32/src/rcc/f247.rs | |||
| @@ -316,7 +316,6 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 316 | #[cfg(dsihost)] | 316 | #[cfg(dsihost)] |
| 317 | dsi_phy: None, // DSI PLL clock not supported, don't call `RccPeripheral::frequency()` in the drivers | 317 | dsi_phy: None, // DSI PLL clock not supported, don't call `RccPeripheral::frequency()` in the drivers |
| 318 | 318 | ||
| 319 | hsi_div488: hsi.map(|hsi| hsi/488u32), | ||
| 320 | hsi_hse: None, | 319 | hsi_hse: None, |
| 321 | afif: None, | 320 | afif: None, |
| 322 | ); | 321 | ); |
diff --git a/embassy-stm32/src/rcc/g0.rs b/embassy-stm32/src/rcc/g0.rs index 2dbf62a9f..e391b1210 100644 --- a/embassy-stm32/src/rcc/g0.rs +++ b/embassy-stm32/src/rcc/g0.rs | |||
| @@ -309,8 +309,6 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 309 | #[cfg(crs)] | 309 | #[cfg(crs)] |
| 310 | hsi48: hsi48, | 310 | hsi48: hsi48, |
| 311 | rtc: rtc, | 311 | rtc: rtc, |
| 312 | hsi_div_8: hsi.map(|h| h / 8u32), | ||
| 313 | hsi_div_488: hsi.map(|h| h / 488u32), | ||
| 314 | 312 | ||
| 315 | // TODO | 313 | // TODO |
| 316 | lsi: None, | 314 | lsi: None, |
diff --git a/embassy-stm32/src/rcc/g4.rs b/embassy-stm32/src/rcc/g4.rs index 6b34aa306..d7d5c7388 100644 --- a/embassy-stm32/src/rcc/g4.rs +++ b/embassy-stm32/src/rcc/g4.rs | |||
| @@ -320,6 +320,8 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 320 | hse: hse, | 320 | hse: hse, |
| 321 | hsi48: hsi48, | 321 | hsi48: hsi48, |
| 322 | rtc: rtc, | 322 | rtc: rtc, |
| 323 | lsi: None, | ||
| 324 | lse: None, | ||
| 323 | ); | 325 | ); |
| 324 | } | 326 | } |
| 325 | 327 | ||
diff --git a/embassy-stm32/src/rcc/h.rs b/embassy-stm32/src/rcc/h.rs index 33d698861..eaba8cefb 100644 --- a/embassy-stm32/src/rcc/h.rs +++ b/embassy-stm32/src/rcc/h.rs | |||
| @@ -687,7 +687,6 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 687 | hsi: hsi, | 687 | hsi: hsi, |
| 688 | hsi48: hsi48, | 688 | hsi48: hsi48, |
| 689 | csi: csi, | 689 | csi: csi, |
| 690 | csi_div_122: csi.map(|c| c / 122u32), | ||
| 691 | hse: hse, | 690 | hse: hse, |
| 692 | 691 | ||
| 693 | lse: None, | 692 | lse: None, |
| @@ -726,9 +725,9 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 726 | #[cfg(stm32h7rs)] | 725 | #[cfg(stm32h7rs)] |
| 727 | clk48mohci: None, // TODO | 726 | clk48mohci: None, // TODO |
| 728 | #[cfg(stm32h7rs)] | 727 | #[cfg(stm32h7rs)] |
| 729 | hse_div_2: hse.map(|clk| clk / 2u32), | ||
| 730 | #[cfg(stm32h7rs)] | ||
| 731 | usb: Some(Hertz(48_000_000)), | 728 | usb: Some(Hertz(48_000_000)), |
| 729 | #[cfg(stm32h5)] | ||
| 730 | hse_div_rtcpre: None, // TODO | ||
| 732 | ); | 731 | ); |
| 733 | } | 732 | } |
| 734 | 733 | ||
diff --git a/embassy-stm32/src/rcc/l.rs b/embassy-stm32/src/rcc/l.rs index 8223a657b..863942f1a 100644 --- a/embassy-stm32/src/rcc/l.rs +++ b/embassy-stm32/src/rcc/l.rs | |||
| @@ -396,7 +396,7 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 396 | hsi48: hsi48, | 396 | hsi48: hsi48, |
| 397 | 397 | ||
| 398 | #[cfg(any(stm32l0, stm32l1))] | 398 | #[cfg(any(stm32l0, stm32l1))] |
| 399 | pll1_vco_div_2: pll.vco.map(|c| c/2u32), | 399 | pll1_vco: pll.vco, |
| 400 | 400 | ||
| 401 | #[cfg(not(any(stm32l0, stm32l1)))] | 401 | #[cfg(not(any(stm32l0, stm32l1)))] |
| 402 | pll1_p: pll.p, | 402 | pll1_p: pll.p, |
diff --git a/embassy-stm32/src/rcc/u5.rs b/embassy-stm32/src/rcc/u5.rs index d15eb53f8..93a327be7 100644 --- a/embassy-stm32/src/rcc/u5.rs +++ b/embassy-stm32/src/rcc/u5.rs | |||
| @@ -345,10 +345,8 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 345 | lse: lse, | 345 | lse: lse, |
| 346 | lsi: lsi, | 346 | lsi: lsi, |
| 347 | hse: hse, | 347 | hse: hse, |
| 348 | hse_div_2: hse.map(|clk| clk / 2u32), | ||
| 349 | hsi: hsi, | 348 | hsi: hsi, |
| 350 | pll1_p: pll1.p, | 349 | pll1_p: pll1.p, |
| 351 | pll1_p_div_2: pll1.p.map(|clk| clk / 2u32), | ||
| 352 | pll1_q: pll1.q, | 350 | pll1_q: pll1.q, |
| 353 | pll1_r: pll1.r, | 351 | pll1_r: pll1.r, |
| 354 | pll2_p: pll2.p, | 352 | pll2_p: pll2.p, |
| @@ -363,9 +361,7 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 363 | 361 | ||
| 364 | // TODO | 362 | // TODO |
| 365 | audioclk: None, | 363 | audioclk: None, |
| 366 | hsi48_div_2: None, | ||
| 367 | shsi: None, | 364 | shsi: None, |
| 368 | shsi_div_2: None, | ||
| 369 | ); | 365 | ); |
| 370 | } | 366 | } |
| 371 | 367 | ||
