diff options
| author | Eli Orona <[email protected]> | 2024-02-20 17:54:35 -0800 |
|---|---|---|
| committer | Eli Orona <[email protected]> | 2024-02-20 17:54:35 -0800 |
| commit | 2ee9b373738cf78cf784bf8753a7f55568f85d9b (patch) | |
| tree | 57714033b7d8b3e8c94af2f22ddde5ba75fbdd38 | |
| parent | e99ef496116b4cdfa0dd0706ac1bfc600f45c97b (diff) | |
Move to a single Mux Struct.
| -rw-r--r-- | embassy-stm32/build.rs | 26 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/f013.rs | 12 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/mod.rs | 2 |
3 files changed, 18 insertions, 22 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index f45a571f2..2ffbadfc3 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -430,7 +430,7 @@ fn main() { | |||
| 430 | 430 | ||
| 431 | let mut clock_names = BTreeSet::new(); | 431 | let mut clock_names = BTreeSet::new(); |
| 432 | 432 | ||
| 433 | let mut rcc_cfgr_regs = BTreeMap::new(); | 433 | let mut rcc_cfgr_regs = BTreeSet::new(); |
| 434 | 434 | ||
| 435 | for p in METADATA.peripherals { | 435 | for p in METADATA.peripherals { |
| 436 | if !singletons.contains(&p.name.to_string()) { | 436 | if !singletons.contains(&p.name.to_string()) { |
| @@ -510,11 +510,7 @@ fn main() { | |||
| 510 | let field_name = format_ident!("{}", field_name); | 510 | let field_name = format_ident!("{}", field_name); |
| 511 | let enum_name = format_ident!("{}", enum_name); | 511 | let enum_name = format_ident!("{}", enum_name); |
| 512 | 512 | ||
| 513 | if !rcc_cfgr_regs.contains_key(mux.register) { | 513 | rcc_cfgr_regs.insert(( |
| 514 | rcc_cfgr_regs.insert(mux.register, Vec::new()); | ||
| 515 | } | ||
| 516 | |||
| 517 | rcc_cfgr_regs.get_mut(mux.register).unwrap().push(( | ||
| 518 | fieldset_name.clone(), | 514 | fieldset_name.clone(), |
| 519 | field_name.clone(), | 515 | field_name.clone(), |
| 520 | enum_name.clone(), | 516 | enum_name.clone(), |
| @@ -602,10 +598,10 @@ fn main() { | |||
| 602 | } | 598 | } |
| 603 | } | 599 | } |
| 604 | 600 | ||
| 605 | for (rcc_cfgr_reg, fields) in rcc_cfgr_regs { | 601 | if !rcc_cfgr_regs.is_empty() { |
| 606 | println!("cargo:rustc-cfg={}", rcc_cfgr_reg.to_ascii_lowercase()); | 602 | println!("cargo:rustc-cfg=clock_mux"); |
| 607 | 603 | ||
| 608 | let struct_fields: Vec<_> = fields | 604 | let struct_fields: Vec<_> = rcc_cfgr_regs |
| 609 | .iter() | 605 | .iter() |
| 610 | .map(|(_fieldset, fieldname, enum_name)| { | 606 | .map(|(_fieldset, fieldname, enum_name)| { |
| 611 | quote! { | 607 | quote! { |
| @@ -614,12 +610,12 @@ fn main() { | |||
| 614 | }) | 610 | }) |
| 615 | .collect(); | 611 | .collect(); |
| 616 | 612 | ||
| 617 | let field_names: Vec<_> = fields | 613 | let field_names: Vec<_> = rcc_cfgr_regs |
| 618 | .iter() | 614 | .iter() |
| 619 | .map(|(_fieldset, fieldname, _enum_name)| fieldname) | 615 | .map(|(_fieldset, fieldname, _enum_name)| fieldname) |
| 620 | .collect(); | 616 | .collect(); |
| 621 | 617 | ||
| 622 | let inits: Vec<_> = fields | 618 | let inits: Vec<_> = rcc_cfgr_regs |
| 623 | .iter() | 619 | .iter() |
| 624 | .map(|(fieldset, fieldname, _enum_name)| { | 620 | .map(|(fieldset, fieldname, _enum_name)| { |
| 625 | let setter = format_ident!("set_{}", fieldname); | 621 | let setter = format_ident!("set_{}", fieldname); |
| @@ -635,15 +631,13 @@ fn main() { | |||
| 635 | }) | 631 | }) |
| 636 | .collect(); | 632 | .collect(); |
| 637 | 633 | ||
| 638 | let cfgr_reg = format_ident!("{}", rcc_cfgr_reg); | ||
| 639 | |||
| 640 | g.extend(quote! { | 634 | g.extend(quote! { |
| 641 | #[derive(Clone, Copy)] | 635 | #[derive(Clone, Copy)] |
| 642 | pub struct #cfgr_reg { | 636 | pub struct ClockMux { |
| 643 | #( #struct_fields, )* | 637 | #( #struct_fields, )* |
| 644 | } | 638 | } |
| 645 | 639 | ||
| 646 | impl Default for #cfgr_reg { | 640 | impl Default for ClockMux { |
| 647 | fn default() -> Self { | 641 | fn default() -> Self { |
| 648 | Self { | 642 | Self { |
| 649 | #( #field_names: None, )* | 643 | #( #field_names: None, )* |
| @@ -651,7 +645,7 @@ fn main() { | |||
| 651 | } | 645 | } |
| 652 | } | 646 | } |
| 653 | 647 | ||
| 654 | impl #cfgr_reg { | 648 | impl ClockMux { |
| 655 | pub fn init(self) { | 649 | pub fn init(self) { |
| 656 | #( #inits )* | 650 | #( #inits )* |
| 657 | } | 651 | } |
diff --git a/embassy-stm32/src/rcc/f013.rs b/embassy-stm32/src/rcc/f013.rs index a61aae0e8..86af4bd68 100644 --- a/embassy-stm32/src/rcc/f013.rs +++ b/embassy-stm32/src/rcc/f013.rs | |||
| @@ -99,8 +99,8 @@ pub struct Config { | |||
| 99 | pub adc34: AdcClockSource, | 99 | pub adc34: AdcClockSource, |
| 100 | #[cfg(stm32f334)] | 100 | #[cfg(stm32f334)] |
| 101 | pub hrtim: HrtimClockSource, | 101 | pub hrtim: HrtimClockSource, |
| 102 | #[cfg(cfgr3)] | 102 | #[cfg(clock_mux)] |
| 103 | pub cfgr3: crate::_generated::CFGR3, | 103 | pub mux: crate::rcc::ClockMux, |
| 104 | 104 | ||
| 105 | pub ls: super::LsConfig, | 105 | pub ls: super::LsConfig, |
| 106 | } | 106 | } |
| @@ -130,8 +130,8 @@ impl Default for Config { | |||
| 130 | adc34: AdcClockSource::Hclk(AdcHclkPrescaler::Div1), | 130 | adc34: AdcClockSource::Hclk(AdcHclkPrescaler::Div1), |
| 131 | #[cfg(stm32f334)] | 131 | #[cfg(stm32f334)] |
| 132 | hrtim: HrtimClockSource::BusClk, | 132 | hrtim: HrtimClockSource::BusClk, |
| 133 | #[cfg(cfgr3)] | 133 | #[cfg(clock_mux)] |
| 134 | cfgr3: Default::default(), | 134 | mux: Default::default(), |
| 135 | } | 135 | } |
| 136 | } | 136 | } |
| 137 | } | 137 | } |
| @@ -367,8 +367,8 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 367 | } | 367 | } |
| 368 | }; | 368 | }; |
| 369 | 369 | ||
| 370 | #[cfg(cfgr3)] | 370 | #[cfg(clock_mux)] |
| 371 | config.cfgr3.init(); | 371 | config.mux.init(); |
| 372 | 372 | ||
| 373 | set_clocks!( | 373 | set_clocks!( |
| 374 | hsi: hsi, | 374 | hsi: hsi, |
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs index 0f3467151..f71211925 100644 --- a/embassy-stm32/src/rcc/mod.rs +++ b/embassy-stm32/src/rcc/mod.rs | |||
| @@ -32,6 +32,8 @@ mod _version; | |||
| 32 | pub use _version::*; | 32 | pub use _version::*; |
| 33 | 33 | ||
| 34 | pub use crate::_generated::Clocks; | 34 | pub use crate::_generated::Clocks; |
| 35 | #[cfg(clock_mux)] | ||
| 36 | pub use crate::_generated::ClockMux; | ||
| 35 | 37 | ||
| 36 | #[cfg(feature = "low-power")] | 38 | #[cfg(feature = "low-power")] |
| 37 | /// Must be written within a critical section | 39 | /// Must be written within a critical section |
