aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stm32-metapac-gen/src/lib.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs
index 8a2698d8e..d9ab92ee6 100644
--- a/stm32-metapac-gen/src/lib.rs
+++ b/stm32-metapac-gen/src/lib.rs
@@ -441,21 +441,31 @@ pub fn gen(options: Options) {
441 }; 441 };
442 442
443 if let Some(clock_prefix) = clock_prefix { 443 if let Some(clock_prefix) = clock_prefix {
444 // Ignore the numbers in clock name when searching for enable bits because clock
445 // names do not map cleanly to regsiter names.
446 // Example:
447 // stm32f0: RCC_APB2ENR - APB peripheral clock enable register 2 CLOCK: APB1
448 // stm32f4: RCC_APB2ENR - RCC APB2 peripheral clock enable register CLOCK: APB2
449 //
450 // Search for the enable bit in all available registers to support the stm32f0 case.
451 let search_clock_prefix = clock_prefix.trim_end_matches(char::is_numeric);
452
444 // Workaround for clock registers being split on some chip families. Assume fields are 453 // Workaround for clock registers being split on some chip families. Assume fields are
445 // named after peripheral and look for first field matching and use that register. 454 // named after peripheral and look for first field matching and use that register.
446 let mut en = find_reg_for_field(&rcc, clock_prefix, &format!("{}EN", name)); 455 let mut en =
456 find_reg_for_field(&rcc, search_clock_prefix, &format!("{}EN", name));
447 let mut rst = 457 let mut rst =
448 find_reg_for_field(&rcc, clock_prefix, &format!("{}RST", name)); 458 find_reg_for_field(&rcc, search_clock_prefix, &format!("{}RST", name));
449 459
450 if en.is_none() && name.ends_with("1") { 460 if en.is_none() && name.ends_with("1") {
451 en = find_reg_for_field( 461 en = find_reg_for_field(
452 &rcc, 462 &rcc,
453 clock_prefix, 463 search_clock_prefix,
454 &format!("{}EN", &name[..name.len() - 1]), 464 &format!("{}EN", &name[..name.len() - 1]),
455 ); 465 );
456 rst = find_reg_for_field( 466 rst = find_reg_for_field(
457 &rcc, 467 &rcc,
458 clock_prefix, 468 search_clock_prefix,
459 &format!("{}RST", &name[..name.len() - 1]), 469 &format!("{}RST", &name[..name.len() - 1]),
460 ); 470 );
461 } 471 }