Merge pull request #335 from embassy-rs/fix-irq-parsing
fix irq parsing
This commit is contained in:
commit
9ec9e0afb8
@ -1,5 +1,5 @@
|
||||
[toolchain]
|
||||
channel = "nightly-2023-05-18"
|
||||
channel = "nightly-2024-01-01"
|
||||
components = [ "rust-src", "rustfmt" ]
|
||||
targets = [
|
||||
"thumbv6m-none-eabi",
|
||||
|
@ -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 {
|
||||
|
@ -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(),
|
||||
|
@ -120,6 +120,10 @@ impl ChipInterrupts {
|
||||
|
||||
let exists_irq: HashSet<String> = 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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user