diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f83b73d..c03e698 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2023-05-18" +channel = "nightly-2024-01-01" components = [ "rust-src", "rustfmt" ] targets = [ "thumbv6m-none-eabi", diff --git a/stm32-data-gen/src/gpio_af.rs b/stm32-data-gen/src/gpio_af.rs index 20353fa..baf6bae 100644 --- a/stm32-data-gen/src/gpio_af.rs +++ b/stm32-data-gen/src/gpio_af.rs @@ -58,11 +58,13 @@ impl Af { for pin in parsed.gpio_pins { // Cleanup pin name - let Some(pin_name) = clean_pin(&pin.name) else {continue}; + let Some(pin_name) = clean_pin(&pin.name) else { continue }; // Extract AFs for signal in pin.pin_signals { - let Some((peri_name, signal_name)) = parse_signal_name(&signal.name) else {continue}; + let Some((peri_name, signal_name)) = parse_signal_name(&signal.name) else { + continue; + }; let afn = if parsed.version.starts_with("STM32F1") { None } else { diff --git a/stm32-data-gen/src/header.rs b/stm32-data-gen/src/header.rs index dd3623a..50e4702 100644 --- a/stm32-data-gen/src/header.rs +++ b/stm32-data-gen/src/header.rs @@ -269,7 +269,7 @@ impl ParsedHeader { let irq_entry = irqs.entry(cur_core.clone()).or_default(); let defines_entry = defines.entry(cur_core.clone()).or_default(); - if let Some(m) = regex!(r"^([a-zA-Z0-9_]+)_IRQn += (\d+),? +/\*!< (.*) \*/").captures(&l) { + if let Some(m) = regex!(r"^([a-zA-Z0-9_]+)_IRQn *= *(\d+),? +/\*!<(.*)\*/").captures(&l) { irq_entry.insert( m.get(1).unwrap().as_str().to_string(), m.get(2).unwrap().as_str().parse().unwrap(), diff --git a/stm32-data-gen/src/interrupts.rs b/stm32-data-gen/src/interrupts.rs index c067cc2..6706cd0 100644 --- a/stm32-data-gen/src/interrupts.rs +++ b/stm32-data-gen/src/interrupts.rs @@ -120,6 +120,10 @@ impl ChipInterrupts { let exists_irq: HashSet = core.interrupts.iter().map(|i| i.name.clone()).collect(); + for i in &exists_irq { + trace!(" irq in header: {i}"); + } + for nvic_string in nvic_strings { trace!(" irq={nvic_string:?}"); let parts = { @@ -154,7 +158,10 @@ impl ChipInterrupts { .iter() .find(|(irq, _)| irq == &name) .unwrap_or(&("", &[])); - let Some(new_name) = eq_irqs.iter().find(|i| exists_irq.contains(**i)) else { continue }; + let Some(new_name) = eq_irqs.iter().find(|i| exists_irq.contains(**i)) else { + trace!(" irq missing in C header, ignoring"); + continue; + }; header_name = new_name.to_string(); } @@ -200,8 +207,7 @@ impl ChipInterrupts { // pass } else if flags .iter() - .map(|flag| ["DMA", "DMAL0", "DMAF0", "DMAL0_DMAMUX", "DMAF0_DMAMUX"].contains(flag)) - .any(std::convert::identity) + .any(|flag| ["DMA", "DMAL0", "DMAF0", "DMAL0_DMAMUX", "DMAF0_DMAMUX"].contains(flag)) { let mut dmas_iter = parts[3].split(','); let mut chans_iter = parts[4].split(';'); @@ -240,6 +246,7 @@ impl ChipInterrupts { interrupt_signals.insert(("RCC".to_string(), "GLOBAL".to_string())); } else { if parts[2].is_empty() { + trace!(" skipping because parts[2].is_empty()"); continue; } @@ -249,6 +256,8 @@ impl ChipInterrupts { .map(ToString::to_string) .collect(); + trace!(" peri_names: {peri_names:?}"); + let name2 = { if name == "USBWakeUp" || name == "USBWakeUp_RMP" { "USB_WKUP" @@ -269,6 +278,8 @@ impl ChipInterrupts { // Parse IRQ interrupt_signals from the IRQ name. for part in tokenize_name(name2) { + trace!(" part={part}"); + let part = { if part == "TAMPER" { "TAMP".to_string()