diff options
| author | xoviat <[email protected]> | 2023-10-17 01:05:18 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-17 01:05:18 +0000 |
| commit | 683d5c30669bbb788e60ee3dd31ce30ba14c2d69 (patch) | |
| tree | 525e40103da60e5c1664897a472ae602f65d09ae | |
| parent | 3e3317e8bd4a0c11655fb48a4bcff77791c105bc (diff) | |
| parent | a3574e519ad191c3c4c49fe9779a0a71d61cae3b (diff) | |
Merge pull request #2077 from xoviat/rcc
stm32: update metapac
| -rw-r--r-- | embassy-stm32/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-stm32/build.rs | 18 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/c0.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/l0l1.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/l4l5.rs | 25 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/mod.rs | 16 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/adc.rs | 2 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/mco.rs | 2 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/rng.rs | 2 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/usb_serial.rs | 2 | ||||
| -rw-r--r-- | tests/stm32/src/common.rs | 2 |
11 files changed, 54 insertions, 25 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index 1342b2eab..861753bda 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -58,7 +58,7 @@ rand_core = "0.6.3" | |||
| 58 | sdio-host = "0.5.0" | 58 | sdio-host = "0.5.0" |
| 59 | embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "a4f293d3a6f72158385f79c98634cb8a14d0d2fc", optional = true } | 59 | embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "a4f293d3a6f72158385f79c98634cb8a14d0d2fc", optional = true } |
| 60 | critical-section = "1.1" | 60 | critical-section = "1.1" |
| 61 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-9330e31117668350a62572fdcd2598ec17d08042" } | 61 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-c20cbde88fdfaef4645361d09df0cb63a4dc6462" } |
| 62 | vcell = "0.1.3" | 62 | vcell = "0.1.3" |
| 63 | bxcan = "0.7.0" | 63 | bxcan = "0.7.0" |
| 64 | nb = "1.0.0" | 64 | nb = "1.0.0" |
| @@ -76,7 +76,7 @@ critical-section = { version = "1.1", features = ["std"] } | |||
| 76 | [build-dependencies] | 76 | [build-dependencies] |
| 77 | proc-macro2 = "1.0.36" | 77 | proc-macro2 = "1.0.36" |
| 78 | quote = "1.0.15" | 78 | quote = "1.0.15" |
| 79 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-9330e31117668350a62572fdcd2598ec17d08042", default-features = false, features = ["metadata"]} | 79 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-c20cbde88fdfaef4645361d09df0cb63a4dc6462", default-features = false, features = ["metadata"]} |
| 80 | 80 | ||
| 81 | 81 | ||
| 82 | [features] | 82 | [features] |
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index d118b851e..f8908756d 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -466,15 +466,9 @@ fn main() { | |||
| 466 | 466 | ||
| 467 | let ptype = if let Some(reg) = &p.registers { reg.kind } else { "" }; | 467 | let ptype = if let Some(reg) = &p.registers { reg.kind } else { "" }; |
| 468 | let pname = format_ident!("{}", p.name); | 468 | let pname = format_ident!("{}", p.name); |
| 469 | let clk = format_ident!( | 469 | let clk = format_ident!("{}", rcc.clock); |
| 470 | "{}", | 470 | let en_reg = format_ident!("{}", en.register); |
| 471 | rcc.clock | 471 | let set_en_field = format_ident!("set_{}", en.field); |
| 472 | .to_ascii_lowercase() | ||
| 473 | .replace("ahb", "hclk") | ||
| 474 | .replace("apb", "pclk") | ||
| 475 | ); | ||
| 476 | let en_reg = format_ident!("{}", en.register.to_ascii_lowercase()); | ||
| 477 | let set_en_field = format_ident!("set_{}", en.field.to_ascii_lowercase()); | ||
| 478 | 472 | ||
| 479 | let (before_enable, before_disable) = if refcounted_peripherals.contains(ptype) { | 473 | let (before_enable, before_disable) = if refcounted_peripherals.contains(ptype) { |
| 480 | let refcount_static = | 474 | let refcount_static = |
| @@ -500,11 +494,11 @@ fn main() { | |||
| 500 | (TokenStream::new(), TokenStream::new()) | 494 | (TokenStream::new(), TokenStream::new()) |
| 501 | }; | 495 | }; |
| 502 | 496 | ||
| 497 | let mux_supported = HashSet::from(["c0", "h5", "h50", "h7", "h7ab", "h7rm0433", "g4", "l4"]) | ||
| 498 | .contains(rcc_registers.version); | ||
| 503 | let mux_for = |mux: Option<&'static PeripheralRccRegister>| { | 499 | let mux_for = |mux: Option<&'static PeripheralRccRegister>| { |
| 504 | let checked_rccs = HashSet::from(["h5", "h50", "h7", "h7ab", "h7rm0433", "g4"]); | ||
| 505 | |||
| 506 | // restrict mux implementation to supported versions | 500 | // restrict mux implementation to supported versions |
| 507 | if !checked_rccs.contains(rcc_registers.version) { | 501 | if !mux_supported { |
| 508 | return None; | 502 | return None; |
| 509 | } | 503 | } |
| 510 | 504 | ||
diff --git a/embassy-stm32/src/rcc/c0.rs b/embassy-stm32/src/rcc/c0.rs index e357f0675..68f029ca0 100644 --- a/embassy-stm32/src/rcc/c0.rs +++ b/embassy-stm32/src/rcc/c0.rs | |||
| @@ -134,6 +134,8 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 134 | }; | 134 | }; |
| 135 | 135 | ||
| 136 | set_freqs(Clocks { | 136 | set_freqs(Clocks { |
| 137 | hsi: None, | ||
| 138 | lse: None, | ||
| 137 | sys: sys_clk, | 139 | sys: sys_clk, |
| 138 | hclk1: ahb_freq, | 140 | hclk1: ahb_freq, |
| 139 | pclk1: apb_freq, | 141 | pclk1: apb_freq, |
diff --git a/embassy-stm32/src/rcc/l0l1.rs b/embassy-stm32/src/rcc/l0l1.rs index 308b75aec..333e9eea9 100644 --- a/embassy-stm32/src/rcc/l0l1.rs +++ b/embassy-stm32/src/rcc/l0l1.rs | |||
| @@ -31,7 +31,7 @@ pub enum PLLSource { | |||
| 31 | impl From<PLLSource> for Pllsrc { | 31 | impl From<PLLSource> for Pllsrc { |
| 32 | fn from(val: PLLSource) -> Pllsrc { | 32 | fn from(val: PLLSource) -> Pllsrc { |
| 33 | match val { | 33 | match val { |
| 34 | PLLSource::HSI16 => Pllsrc::HSI16, | 34 | PLLSource::HSI16 => Pllsrc::HSI, |
| 35 | PLLSource::HSE(_) => Pllsrc::HSE, | 35 | PLLSource::HSE(_) => Pllsrc::HSE, |
| 36 | } | 36 | } |
| 37 | } | 37 | } |
| @@ -88,7 +88,7 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 88 | RCC.cr().write(|w| w.set_hsi16on(true)); | 88 | RCC.cr().write(|w| w.set_hsi16on(true)); |
| 89 | while !RCC.cr().read().hsi16rdy() {} | 89 | while !RCC.cr().read().hsi16rdy() {} |
| 90 | 90 | ||
| 91 | (HSI_FREQ, Sw::HSI16) | 91 | (HSI_FREQ, Sw::HSI) |
| 92 | } | 92 | } |
| 93 | ClockSrc::HSE(freq) => { | 93 | ClockSrc::HSE(freq) => { |
| 94 | // Enable HSE | 94 | // Enable HSE |
diff --git a/embassy-stm32/src/rcc/l4l5.rs b/embassy-stm32/src/rcc/l4l5.rs index 90c8923c1..d99bc45c5 100644 --- a/embassy-stm32/src/rcc/l4l5.rs +++ b/embassy-stm32/src/rcc/l4l5.rs | |||
| @@ -187,7 +187,10 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 187 | 187 | ||
| 188 | let sys_clk = match config.mux { | 188 | let sys_clk = match config.mux { |
| 189 | ClockSrc::HSE => hse.unwrap(), | 189 | ClockSrc::HSE => hse.unwrap(), |
| 190 | #[cfg(rcc_l5)] | ||
| 190 | ClockSrc::HSI16 => hsi16.unwrap(), | 191 | ClockSrc::HSI16 => hsi16.unwrap(), |
| 192 | #[cfg(not(rcc_l5))] | ||
| 193 | ClockSrc::HSI => hsi16.unwrap(), | ||
| 191 | ClockSrc::MSI => msi.unwrap(), | 194 | ClockSrc::MSI => msi.unwrap(), |
| 192 | ClockSrc::PLL => pll._r.unwrap(), | 195 | ClockSrc::PLL => pll._r.unwrap(), |
| 193 | }; | 196 | }; |
| @@ -200,7 +203,10 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 200 | Clk48Src::HSI48 => hsi48, | 203 | Clk48Src::HSI48 => hsi48, |
| 201 | Clk48Src::MSI => msi, | 204 | Clk48Src::MSI => msi, |
| 202 | Clk48Src::PLLSAI1_Q => pllsai1._q, | 205 | Clk48Src::PLLSAI1_Q => pllsai1._q, |
| 206 | #[cfg(rcc_l5)] | ||
| 203 | Clk48Src::PLL_Q => pll._q, | 207 | Clk48Src::PLL_Q => pll._q, |
| 208 | #[cfg(not(rcc_l5))] | ||
| 209 | Clk48Src::PLL1_Q => pll._q, | ||
| 204 | }; | 210 | }; |
| 205 | 211 | ||
| 206 | #[cfg(rcc_l4plus)] | 212 | #[cfg(rcc_l4plus)] |
| @@ -266,6 +272,22 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 266 | pclk2: apb2_freq, | 272 | pclk2: apb2_freq, |
| 267 | pclk1_tim: apb1_tim_freq, | 273 | pclk1_tim: apb1_tim_freq, |
| 268 | pclk2_tim: apb2_tim_freq, | 274 | pclk2_tim: apb2_tim_freq, |
| 275 | #[cfg(rcc_l4)] | ||
| 276 | hsi: None, | ||
| 277 | #[cfg(rcc_l4)] | ||
| 278 | lse: None, | ||
| 279 | #[cfg(rcc_l4)] | ||
| 280 | pllsai1_p: None, | ||
| 281 | #[cfg(rcc_l4)] | ||
| 282 | pllsai2_p: None, | ||
| 283 | #[cfg(rcc_l4)] | ||
| 284 | pll1_p: None, | ||
| 285 | #[cfg(rcc_l4)] | ||
| 286 | pll1_q: None, | ||
| 287 | #[cfg(rcc_l4)] | ||
| 288 | sai1_extclk: None, | ||
| 289 | #[cfg(rcc_l4)] | ||
| 290 | sai2_extclk: None, | ||
| 269 | rtc, | 291 | rtc, |
| 270 | }); | 292 | }); |
| 271 | } | 293 | } |
| @@ -341,7 +363,10 @@ fn init_pll(instance: PllInstance, config: Option<Pll>, input: &PllInput) -> Pll | |||
| 341 | let pll_src = match pll.source { | 363 | let pll_src = match pll.source { |
| 342 | PLLSource::NONE => panic!("must not select PLL source as NONE"), | 364 | PLLSource::NONE => panic!("must not select PLL source as NONE"), |
| 343 | PLLSource::HSE => input.hse, | 365 | PLLSource::HSE => input.hse, |
| 366 | #[cfg(rcc_l5)] | ||
| 344 | PLLSource::HSI16 => input.hsi16, | 367 | PLLSource::HSI16 => input.hsi16, |
| 368 | #[cfg(not(rcc_l5))] | ||
| 369 | PLLSource::HSI => input.hsi16, | ||
| 345 | PLLSource::MSI => input.msi, | 370 | PLLSource::MSI => input.msi, |
| 346 | }; | 371 | }; |
| 347 | 372 | ||
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs index 8df6deaae..d587a1988 100644 --- a/embassy-stm32/src/rcc/mod.rs +++ b/embassy-stm32/src/rcc/mod.rs | |||
| @@ -110,14 +110,18 @@ pub struct Clocks { | |||
| 110 | #[cfg(all(rcc_f4, not(stm32f410)))] | 110 | #[cfg(all(rcc_f4, not(stm32f410)))] |
| 111 | pub plli2s1_r: Option<Hertz>, | 111 | pub plli2s1_r: Option<Hertz>, |
| 112 | 112 | ||
| 113 | #[cfg(rcc_l4)] | ||
| 114 | pub pllsai1_p: Option<Hertz>, | ||
| 113 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f446, stm32f469, stm32f479))] | 115 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f446, stm32f469, stm32f479))] |
| 114 | pub pllsai1_q: Option<Hertz>, | 116 | pub pllsai1_q: Option<Hertz>, |
| 115 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f446, stm32f469, stm32f479))] | 117 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f446, stm32f469, stm32f479))] |
| 116 | pub pllsai1_r: Option<Hertz>, | 118 | pub pllsai1_r: Option<Hertz>, |
| 119 | #[cfg(rcc_l4)] | ||
| 120 | pub pllsai2_p: Option<Hertz>, | ||
| 117 | 121 | ||
| 118 | #[cfg(stm32g4)] | 122 | #[cfg(any(stm32g4, rcc_l4))] |
| 119 | pub pll1_p: Option<Hertz>, | 123 | pub pll1_p: Option<Hertz>, |
| 120 | #[cfg(any(stm32h5, stm32h7, rcc_f2, rcc_f4, rcc_f410, rcc_f7))] | 124 | #[cfg(any(stm32h5, stm32h7, rcc_f2, rcc_f4, rcc_f410, rcc_f7, rcc_l4))] |
| 121 | pub pll1_q: Option<Hertz>, | 125 | pub pll1_q: Option<Hertz>, |
| 122 | #[cfg(any(stm32h5, stm32h7))] | 126 | #[cfg(any(stm32h5, stm32h7))] |
| 123 | pub pll2_p: Option<Hertz>, | 127 | pub pll2_p: Option<Hertz>, |
| @@ -154,7 +158,7 @@ pub struct Clocks { | |||
| 154 | 158 | ||
| 155 | pub rtc: Option<Hertz>, | 159 | pub rtc: Option<Hertz>, |
| 156 | 160 | ||
| 157 | #[cfg(any(stm32h5, stm32h7))] | 161 | #[cfg(any(stm32h5, stm32h7, rcc_l4, rcc_c0))] |
| 158 | pub hsi: Option<Hertz>, | 162 | pub hsi: Option<Hertz>, |
| 159 | #[cfg(stm32h5)] | 163 | #[cfg(stm32h5)] |
| 160 | pub hsi48: Option<Hertz>, | 164 | pub hsi48: Option<Hertz>, |
| @@ -163,7 +167,7 @@ pub struct Clocks { | |||
| 163 | #[cfg(any(stm32h5, stm32h7))] | 167 | #[cfg(any(stm32h5, stm32h7))] |
| 164 | pub csi: Option<Hertz>, | 168 | pub csi: Option<Hertz>, |
| 165 | 169 | ||
| 166 | #[cfg(any(stm32h5, stm32h7))] | 170 | #[cfg(any(stm32h5, stm32h7, rcc_l4, rcc_c0))] |
| 167 | pub lse: Option<Hertz>, | 171 | pub lse: Option<Hertz>, |
| 168 | #[cfg(any(stm32h5, stm32h7))] | 172 | #[cfg(any(stm32h5, stm32h7))] |
| 169 | pub hse: Option<Hertz>, | 173 | pub hse: Option<Hertz>, |
| @@ -175,6 +179,10 @@ pub struct Clocks { | |||
| 175 | 179 | ||
| 176 | #[cfg(stm32h7)] | 180 | #[cfg(stm32h7)] |
| 177 | pub rcc_pclk_d3: Option<Hertz>, | 181 | pub rcc_pclk_d3: Option<Hertz>, |
| 182 | #[cfg(rcc_l4)] | ||
| 183 | pub sai1_extclk: Option<Hertz>, | ||
| 184 | #[cfg(rcc_l4)] | ||
| 185 | pub sai2_extclk: Option<Hertz>, | ||
| 178 | } | 186 | } |
| 179 | 187 | ||
| 180 | #[cfg(feature = "low-power")] | 188 | #[cfg(feature = "low-power")] |
diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs index 3d0c623fd..a0ec5c33e 100644 --- a/examples/stm32l4/src/bin/adc.rs +++ b/examples/stm32l4/src/bin/adc.rs | |||
| @@ -13,7 +13,7 @@ fn main() -> ! { | |||
| 13 | info!("Hello World!"); | 13 | info!("Hello World!"); |
| 14 | 14 | ||
| 15 | pac::RCC.ccipr().modify(|w| { | 15 | pac::RCC.ccipr().modify(|w| { |
| 16 | w.set_adcsel(pac::rcc::vals::Adcsel::SYSCLK); | 16 | w.set_adcsel(pac::rcc::vals::Adcsel::SYS); |
| 17 | }); | 17 | }); |
| 18 | pac::RCC.ahb2enr().modify(|w| w.set_adcen(true)); | 18 | pac::RCC.ahb2enr().modify(|w| w.set_adcen(true)); |
| 19 | 19 | ||
diff --git a/examples/stm32l4/src/bin/mco.rs b/examples/stm32l4/src/bin/mco.rs index 2833bb636..504879887 100644 --- a/examples/stm32l4/src/bin/mco.rs +++ b/examples/stm32l4/src/bin/mco.rs | |||
| @@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) { | |||
| 14 | let p = embassy_stm32::init(Default::default()); | 14 | let p = embassy_stm32::init(Default::default()); |
| 15 | info!("Hello World!"); | 15 | info!("Hello World!"); |
| 16 | 16 | ||
| 17 | let _mco = Mco::new(p.MCO, p.PA8, McoSource::HSI16, McoPrescaler::DIV1); | 17 | let _mco = Mco::new(p.MCO, p.PA8, McoSource::HSI, McoPrescaler::DIV1); |
| 18 | 18 | ||
| 19 | let mut led = Output::new(p.PB14, Level::High, Speed::Low); | 19 | let mut led = Output::new(p.PB14, Level::High, Speed::Low); |
| 20 | 20 | ||
diff --git a/examples/stm32l4/src/bin/rng.rs b/examples/stm32l4/src/bin/rng.rs index d184bcf77..49ae15e6b 100644 --- a/examples/stm32l4/src/bin/rng.rs +++ b/examples/stm32l4/src/bin/rng.rs | |||
| @@ -19,7 +19,7 @@ async fn main(_spawner: Spawner) { | |||
| 19 | config.rcc.mux = ClockSrc::PLL; | 19 | config.rcc.mux = ClockSrc::PLL; |
| 20 | config.rcc.hsi16 = true; | 20 | config.rcc.hsi16 = true; |
| 21 | config.rcc.pll = Some(Pll { | 21 | config.rcc.pll = Some(Pll { |
| 22 | source: PLLSource::HSI16, | 22 | source: PLLSource::HSI, |
| 23 | prediv: PllPreDiv::DIV1, | 23 | prediv: PllPreDiv::DIV1, |
| 24 | mul: PllMul::MUL18, | 24 | mul: PllMul::MUL18, |
| 25 | divp: None, | 25 | divp: None, |
diff --git a/examples/stm32l4/src/bin/usb_serial.rs b/examples/stm32l4/src/bin/usb_serial.rs index 3785c6898..34361d112 100644 --- a/examples/stm32l4/src/bin/usb_serial.rs +++ b/examples/stm32l4/src/bin/usb_serial.rs | |||
| @@ -27,7 +27,7 @@ async fn main(_spawner: Spawner) { | |||
| 27 | config.rcc.mux = ClockSrc::PLL; | 27 | config.rcc.mux = ClockSrc::PLL; |
| 28 | config.rcc.hsi16 = true; | 28 | config.rcc.hsi16 = true; |
| 29 | config.rcc.pll = Some(Pll { | 29 | config.rcc.pll = Some(Pll { |
| 30 | source: PLLSource::HSI16, | 30 | source: PLLSource::HSI, |
| 31 | prediv: PllPreDiv::DIV1, | 31 | prediv: PllPreDiv::DIV1, |
| 32 | mul: PllMul::MUL10, | 32 | mul: PllMul::MUL10, |
| 33 | divp: None, | 33 | divp: None, |
diff --git a/tests/stm32/src/common.rs b/tests/stm32/src/common.rs index 6dc1b3002..a802cdfcf 100644 --- a/tests/stm32/src/common.rs +++ b/tests/stm32/src/common.rs | |||
| @@ -290,7 +290,7 @@ pub fn config() -> Config { | |||
| 290 | config.rcc.mux = ClockSrc::PLL; | 290 | config.rcc.mux = ClockSrc::PLL; |
| 291 | config.rcc.hsi16 = true; | 291 | config.rcc.hsi16 = true; |
| 292 | config.rcc.pll = Some(Pll { | 292 | config.rcc.pll = Some(Pll { |
| 293 | source: PLLSource::HSI16, | 293 | source: PLLSource::HSI, |
| 294 | prediv: PllPreDiv::DIV1, | 294 | prediv: PllPreDiv::DIV1, |
| 295 | mul: PllMul::MUL18, | 295 | mul: PllMul::MUL18, |
| 296 | divp: None, | 296 | divp: None, |
