aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2021-06-10 09:52:57 +0200
committerUlf Lilleengen <[email protected]>2021-06-10 09:52:57 +0200
commit8dd3ddd228076b49948189f6b95b64dcf131631e (patch)
treed3ab4e211777c7d21397e14175aceae080d4ccf5
parent0a9022d59f412f8ecade98da273126d834006841 (diff)
Special handling for timers instead
-rw-r--r--stm32-metapac/gen/src/lib.rs70
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 }