aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/adc/v3.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs
index 313244e19..fd74d5318 100644
--- a/embassy-stm32/src/adc/v3.rs
+++ b/embassy-stm32/src/adc/v3.rs
@@ -1,5 +1,7 @@
1use cfg_if::cfg_if; 1use cfg_if::cfg_if;
2use pac::adc::vals::Dmacfg; 2use pac::adc::vals::Dmacfg;
3#[cfg(adc_v3)]
4use pac::adc::vals::{OversamplingRatio, OversamplingShift, Rovsm, Trovs};
3 5
4use super::{ 6use super::{
5 blocking_delay_us, Adc, AdcChannel, AnyAdcChannel, Instance, Resolution, RxDma, SampleTime, SealedAdcChannel, 7 blocking_delay_us, Adc, AdcChannel, AnyAdcChannel, Instance, Resolution, RxDma, SampleTime, SealedAdcChannel,
@@ -470,6 +472,23 @@ impl<'d, T: Instance> Adc<'d, T> {
470 T::regs().cfgr2().modify(|reg| reg.set_ovse(enable)); 472 T::regs().cfgr2().modify(|reg| reg.set_ovse(enable));
471 } 473 }
472 474
475 #[cfg(adc_v3)]
476 pub fn enable_regular_oversampling_mode(&mut self, mode: Rovsm, trig_mode: Trovs, enable: bool) {
477 T::regs().cfgr2().modify(|reg| reg.set_trovs(trig_mode));
478 T::regs().cfgr2().modify(|reg| reg.set_rovsm(mode));
479 T::regs().cfgr2().modify(|reg| reg.set_rovse(enable));
480 }
481
482 #[cfg(adc_v3)]
483 pub fn set_oversampling_ratio(&mut self, ratio: OversamplingRatio) {
484 T::regs().cfgr2().modify(|reg| reg.set_ovsr(ratio));
485 }
486
487 #[cfg(adc_v3)]
488 pub fn set_oversampling_shift(&mut self, shift: OversamplingShift) {
489 T::regs().cfgr2().modify(|reg| reg.set_ovss(shift));
490 }
491
473 fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { 492 fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) {
474 cfg_if! { 493 cfg_if! {
475 if #[cfg(any(adc_g0, adc_u0))] { 494 if #[cfg(any(adc_g0, adc_u0))] {