diff options
| author | Ulf Lilleengen <[email protected]> | 2021-06-10 09:52:57 +0200 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2021-06-10 09:52:57 +0200 |
| commit | 8dd3ddd228076b49948189f6b95b64dcf131631e (patch) | |
| tree | d3ab4e211777c7d21397e14175aceae080d4ccf5 | |
| parent | 0a9022d59f412f8ecade98da273126d834006841 (diff) | |
Special handling for timers instead
| -rw-r--r-- | stm32-metapac/gen/src/lib.rs | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/stm32-metapac/gen/src/lib.rs b/stm32-metapac/gen/src/lib.rs index 6db950be3..ea06e308c 100644 --- a/stm32-metapac/gen/src/lib.rs +++ b/stm32-metapac/gen/src/lib.rs | |||
| @@ -268,42 +268,42 @@ pub fn gen(options: Options) { | |||
| 268 | } | 268 | } |
| 269 | 269 | ||
| 270 | if let Some(rcc) = &rcc { | 270 | if let Some(rcc) = &rcc { |
| 271 | // Workaround for clock registers being split on some chip families. Assume fields are | 271 | let mut generate_rcc_peripheral = |clock_prefix| { |
| 272 | // named after peripheral and look for first field matching and use that register. | 272 | // Workaround for clock registers being split on some chip families. Assume fields are |
| 273 | // | 273 | // named after peripheral and look for first field matching and use that register. |
| 274 | // Not all peripherals have the clock hint due to insufficient information from | 274 | |
| 275 | // chip definition. If clock is not specified, the first matching register with the | 275 | let en = find_reg_for_field(&rcc, clock_prefix, &format!("{}EN", name)); |
| 276 | // expected field will be used. | 276 | let rst = find_reg_for_field(&rcc, clock_prefix, &format!("{}RST", name)); |
| 277 | let en = find_reg_for_field( | 277 | |
| 278 | &rcc, | 278 | match (en, rst) { |
| 279 | p.clock.as_ref().unwrap_or(&String::new()), | 279 | (Some((enable_reg, enable_field)), Some((reset_reg, reset_field))) => { |
| 280 | &format!("{}EN", name), | 280 | peripheral_rcc_table.push(vec![ |
| 281 | ); | 281 | name.clone(), |
| 282 | let rst = find_reg_for_field( | 282 | enable_reg.to_ascii_lowercase(), |
| 283 | &rcc, | 283 | reset_reg.to_ascii_lowercase(), |
| 284 | p.clock.as_ref().unwrap_or(&String::new()), | 284 | format!("set_{}", enable_field.to_ascii_lowercase()), |
| 285 | &format!("{}RST", name), | 285 | format!("set_{}", reset_field.to_ascii_lowercase()), |
| 286 | ); | 286 | ]); |
| 287 | 287 | } | |
| 288 | match (en, rst) { | 288 | (None, Some(_)) => { |
| 289 | (Some((enable_reg, enable_field)), Some((reset_reg, reset_field))) => { | 289 | println!("Unable to find enable register for {}", name) |
| 290 | peripheral_rcc_table.push(vec![ | 290 | } |
| 291 | name.clone(), | 291 | (Some(_), None) => { |
| 292 | enable_reg.to_ascii_lowercase(), | 292 | println!("Unable to find reset register for {}", name) |
| 293 | reset_reg.to_ascii_lowercase(), | 293 | } |
| 294 | format!("set_{}", enable_field.to_ascii_lowercase()), | 294 | (None, None) => { |
| 295 | format!("set_{}", reset_field.to_ascii_lowercase()), | 295 | println!("Unable to find enable and reset register for {}", name) |
| 296 | ]); | 296 | } |
| 297 | } | ||
| 298 | (None, Some(_)) => { | ||
| 299 | println!("Unable to find enable register for {}", name) | ||
| 300 | } | ||
| 301 | (Some(_), None) => { | ||
| 302 | println!("Unable to find reset register for {}", name) | ||
| 303 | } | ||
| 304 | (None, None) => { | ||
| 305 | println!("Unable to find enable and reset register for {}", name) | ||
| 306 | } | 297 | } |
| 298 | }; | ||
| 299 | |||
| 300 | if let Some(clock) = &p.clock { | ||
| 301 | generate_rcc_peripheral(clock); | ||
| 302 | } else if name.starts_with("TIM") { | ||
| 303 | // Not all peripherals like timers the clock hint due to insufficient information from | ||
| 304 | // chip definition. If clock is not specified, the first matching register with the | ||
| 305 | // expected field will be used. | ||
| 306 | generate_rcc_peripheral(""); | ||
| 307 | } | 307 | } |
| 308 | } | 308 | } |
| 309 | } | 309 | } |
