diff options
| author | Timo Kröger <[email protected]> | 2021-07-30 14:30:32 +0200 |
|---|---|---|
| committer | Timo Kröger <[email protected]> | 2021-08-03 17:58:27 +0200 |
| commit | 4e47b15daf5ac739fa9da12f9918e3b01eed3ca9 (patch) | |
| tree | 513e174352c4d9da038b46f2b270390455689e47 | |
| parent | fba8b86005958fafa7e188b20b4212773ce912cb (diff) | |
Ignore the clock number for enable bit search
The number has different meanings depending on family:
stm32f0: RCC_APB2ENR - APB peripheral clock enable register 2 CLOCK: APB1
stm32f4: RCC_APB2ENR - RCC APB2 peripheral clock enable register CLOCK: APB2
Ignore the clock number and search all registers for a matching enable bit.
| -rw-r--r-- | stm32-metapac-gen/src/lib.rs | 18 |
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 | } |
