aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/adc/g4.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/embassy-stm32/src/adc/g4.rs b/embassy-stm32/src/adc/g4.rs
index 514734017..bd8ccbf17 100644
--- a/embassy-stm32/src/adc/g4.rs
+++ b/embassy-stm32/src/adc/g4.rs
@@ -1,3 +1,5 @@
1#[cfg(stm32g4)]
2use pac::adc::regs::Difsel as DifselReg;
1#[allow(unused)] 3#[allow(unused)]
2#[cfg(stm32h7)] 4#[cfg(stm32h7)]
3use pac::adc::vals::{Adcaldif, Difsel, Exten}; 5use pac::adc::vals::{Adcaldif, Difsel, Exten};
@@ -179,6 +181,9 @@ impl<T: Instance> super::SealedAnyInstance for T {
179 w.set_l(sequence.len() as u8 - 1); 181 w.set_l(sequence.len() as u8 - 1);
180 }); 182 });
181 183
184 #[cfg(stm32g4)]
185 let mut difsel = DifselReg::default();
186
182 // Configure channels and ranks 187 // Configure channels and ranks
183 for (_i, ((ch, is_differential), sample_time)) in sequence.enumerate() { 188 for (_i, ((ch, is_differential), sample_time)) in sequence.enumerate() {
184 let sample_time = sample_time.into(); 189 let sample_time = sample_time.into();
@@ -214,10 +219,8 @@ impl<T: Instance> super::SealedAnyInstance for T {
214 219
215 #[cfg(stm32g4)] 220 #[cfg(stm32g4)]
216 { 221 {
217 T::regs().cr().modify(|w| w.set_aden(false)); // disable adc 222 if ch < 18 {
218 223 difsel.set_difsel(
219 T::regs().difsel().modify(|w| {
220 w.set_difsel(
221 ch.into(), 224 ch.into(),
222 if is_differential { 225 if is_differential {
223 Difsel::DIFFERENTIAL 226 Difsel::DIFFERENTIAL
@@ -225,11 +228,16 @@ impl<T: Instance> super::SealedAnyInstance for T {
225 Difsel::SINGLE_ENDED 228 Difsel::SINGLE_ENDED
226 }, 229 },
227 ); 230 );
228 }); 231 }
229
230 T::regs().cr().modify(|w| w.set_aden(true)); // enable adc
231 } 232 }
232 } 233 }
234
235 #[cfg(stm32g4)]
236 {
237 T::regs().cr().modify(|w| w.set_aden(false));
238 T::regs().difsel().write_value(difsel);
239 T::enable();
240 }
233 } 241 }
234} 242}
235 243
@@ -412,7 +420,6 @@ impl<'d, T: Instance + AnyInstance> Adc<'d, T> {
412 NR_INJECTED_RANKS 420 NR_INJECTED_RANKS
413 ); 421 );
414 422
415 T::stop();
416 T::enable(); 423 T::enable();
417 424
418 T::regs().jsqr().modify(|w| w.set_jl(N as u8 - 1)); 425 T::regs().jsqr().modify(|w| w.set_jl(N as u8 - 1));