diff options
| author | xoviat <[email protected]> | 2025-11-11 17:19:26 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-11 17:19:26 +0000 |
| commit | 0d1fc76a10863b85961a63db4a9e1e2807f35957 (patch) | |
| tree | 1ffe8a8dddec7085876adb8bfcd86c3fed22ae74 /embassy-stm32/build.rs | |
| parent | f078c85454f09f28a85aa834a9496b37058695e0 (diff) | |
| parent | 769941980442ada1524ee4f60f1d003735caff4b (diff) | |
Merge pull request #4866 from xoviat/adc
adc: impl. differential channels
Diffstat (limited to 'embassy-stm32/build.rs')
| -rw-r--r-- | embassy-stm32/build.rs | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 09a05ce68..48da475df 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -1353,6 +1353,8 @@ fn main() { | |||
| 1353 | 1353 | ||
| 1354 | for p in METADATA.peripherals { | 1354 | for p in METADATA.peripherals { |
| 1355 | if let Some(regs) = &p.registers { | 1355 | if let Some(regs) = &p.registers { |
| 1356 | let mut adc_pairs: BTreeMap<u8, (Option<Ident>, Option<Ident>)> = BTreeMap::new(); | ||
| 1357 | |||
| 1356 | for pin in p.pins { | 1358 | for pin in p.pins { |
| 1357 | let key = (regs.kind, pin.signal); | 1359 | let key = (regs.kind, pin.signal); |
| 1358 | if let Some(tr) = signals.get(&key) { | 1360 | if let Some(tr) = signals.get(&key) { |
| @@ -1474,25 +1476,29 @@ fn main() { | |||
| 1474 | }; | 1476 | }; |
| 1475 | 1477 | ||
| 1476 | // H7 has differential voltage measurements | 1478 | // H7 has differential voltage measurements |
| 1477 | let ch: Option<u8> = if pin.signal.starts_with("INP") { | 1479 | let ch: Option<(u8, bool)> = if pin.signal.starts_with("INP") { |
| 1478 | Some(pin.signal.strip_prefix("INP").unwrap().parse().unwrap()) | 1480 | Some((pin.signal.strip_prefix("INP").unwrap().parse().unwrap(), false)) |
| 1479 | } else if pin.signal.starts_with("INN") { | 1481 | } else if pin.signal.starts_with("INN") { |
| 1480 | // TODO handle in the future when embassy supports differential measurements | 1482 | Some((pin.signal.strip_prefix("INN").unwrap().parse().unwrap(), true)) |
| 1481 | None | ||
| 1482 | } else if pin.signal.starts_with("IN") && pin.signal.ends_with('b') { | 1483 | } else if pin.signal.starts_with("IN") && pin.signal.ends_with('b') { |
| 1483 | // we number STM32L1 ADC bank 1 as 0..=31, bank 2 as 32..=63 | 1484 | // we number STM32L1 ADC bank 1 as 0..=31, bank 2 as 32..=63 |
| 1484 | let signal = pin.signal.strip_prefix("IN").unwrap().strip_suffix('b').unwrap(); | 1485 | let signal = pin.signal.strip_prefix("IN").unwrap().strip_suffix('b').unwrap(); |
| 1485 | Some(32u8 + signal.parse::<u8>().unwrap()) | 1486 | Some((32u8 + signal.parse::<u8>().unwrap(), false)) |
| 1486 | } else if pin.signal.starts_with("IN") { | 1487 | } else if pin.signal.starts_with("IN") { |
| 1487 | Some(pin.signal.strip_prefix("IN").unwrap().parse().unwrap()) | 1488 | Some((pin.signal.strip_prefix("IN").unwrap().parse().unwrap(), false)) |
| 1488 | } else { | 1489 | } else { |
| 1489 | None | 1490 | None |
| 1490 | }; | 1491 | }; |
| 1491 | if let Some(ch) = ch { | 1492 | if let Some((ch, false)) = ch { |
| 1493 | adc_pairs.entry(ch).or_insert((None, None)).0.replace(pin_name.clone()); | ||
| 1494 | |||
| 1492 | g.extend(quote! { | 1495 | g.extend(quote! { |
| 1493 | impl_adc_pin!( #peri, #pin_name, #ch); | 1496 | impl_adc_pin!( #peri, #pin_name, #ch); |
| 1494 | }) | 1497 | }) |
| 1495 | } | 1498 | } |
| 1499 | if let Some((ch, true)) = ch { | ||
| 1500 | adc_pairs.entry(ch).or_insert((None, None)).1.replace(pin_name.clone()); | ||
| 1501 | } | ||
| 1496 | } | 1502 | } |
| 1497 | 1503 | ||
| 1498 | if regs.kind == "opamp" { | 1504 | if regs.kind == "opamp" { |
| @@ -1531,6 +1537,23 @@ fn main() { | |||
| 1531 | }) | 1537 | }) |
| 1532 | } | 1538 | } |
| 1533 | } | 1539 | } |
| 1540 | |||
| 1541 | { | ||
| 1542 | let peri = format_ident!("{}", p.name); | ||
| 1543 | |||
| 1544 | for (ch, (pin, npin)) in adc_pairs { | ||
| 1545 | let (pin_name, npin_name) = match (pin, npin) { | ||
| 1546 | (Some(pin), Some(npin)) => (pin, npin), | ||
| 1547 | _ => { | ||
| 1548 | continue; | ||
| 1549 | } | ||
| 1550 | }; | ||
| 1551 | |||
| 1552 | g.extend(quote! { | ||
| 1553 | impl_adc_pair!( #peri, #pin_name, #npin_name, #ch); | ||
| 1554 | }) | ||
| 1555 | } | ||
| 1556 | } | ||
| 1534 | } | 1557 | } |
| 1535 | } | 1558 | } |
| 1536 | 1559 | ||
