This greatly simplifies the refcount-related code. Since
sizeof(Option<#[repr(u8)] enum>) == sizeof(u8), the code is
equivalent, but the compiler can optimize out bounds checks.
Programs the ADC channel sequence registers once at construction and
reuses them across repeated reads, avoiding the per-call overhead of
reprogramming the sequence registers. Available to all ADC variants that
support DMA reads via a new ConversionMode::ConfiguredSequence variant.
Each variant uses DMACFG=CIRCULAR (or equivalent) with cont=false so DMA
stays armed between calls while the ADC runs only one sequence per start().
On adc_v2, DDS=CONTINUOUS + cont=false is used for the same effect.
Changes:
- embassy-stm32/src/adc/mod.rs: add ConversionMode::ConfiguredSequence,
Adc::configured_sequence method
- embassy-stm32/src/adc/configured_sequence.rs: new file
- embassy-stm32/src/adc/v2.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/v3.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/g4.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/v4.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/c0.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/adc4.rs: add ConfiguredSequence arm
Co-authored-by: tommasoclini <tommasoclini@users.noreply.github.com>
Programs the ADC channel sequence registers once at construction and
reuses them across repeated reads, avoiding the per-call overhead of
reprogramming the sequence registers. Available to all ADC variants that
support DMA reads via a new ConversionMode::ConfiguredSequence variant.
Each variant uses DMACFG=CIRCULAR (or equivalent) with cont=false so DMA
stays armed between calls while the ADC runs only one sequence per start().
On adc_v2, DDS=CONTINUOUS + cont=false is used for the same effect.
Changes:
- embassy-stm32/src/adc/mod.rs: add ConversionMode::ConfiguredSequence,
Adc::configured_sequence method
- embassy-stm32/src/adc/configured_sequence.rs: new file
- embassy-stm32/src/adc/v2.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/v3.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/g4.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/v4.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/c0.rs: add ConfiguredSequence arm
- embassy-stm32/src/adc/adc4.rs: add ConfiguredSequence arm
Co-authored-by: tommasoclini <tommasoclini@users.noreply.github.com>
Add InputCaptureChannel and InputCaptureChannels types with a split()
method, mirroring the existing SimplePwm/OnePulse pattern. This enables
concurrent async capture on multiple channels of the same timer.