aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-04-06 23:36:54 +0000
committerGitHub <[email protected]>2025-04-06 23:36:54 +0000
commit9d83955fd5d03e6ea056b534154636f1eaed3684 (patch)
treec824c7ecffaa0ca04e3b63ff06be83a4d088e9f6
parentc7c32739fe8f70b66a2f3ce886d7684419fe4713 (diff)
parent1074cc7eaf406647a887fbc1fbe521ae1e8850bc (diff)
Merge pull request #4056 from embassy-rs/f1-enable-adc-irq
stm32/adc: enable interrupt for stm32f1
-rw-r--r--embassy-stm32/src/adc/f1.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/embassy-stm32/src/adc/f1.rs b/embassy-stm32/src/adc/f1.rs
index fa6255c23..3cdc9d8fb 100644
--- a/embassy-stm32/src/adc/f1.rs
+++ b/embassy-stm32/src/adc/f1.rs
@@ -4,8 +4,10 @@ use core::task::Poll;
4 4
5use super::blocking_delay_us; 5use super::blocking_delay_us;
6use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; 6use crate::adc::{Adc, AdcChannel, Instance, SampleTime};
7use crate::interrupt::typelevel::Interrupt;
8use crate::interrupt::{self};
7use crate::time::Hertz; 9use crate::time::Hertz;
8use crate::{interrupt, rcc, Peri}; 10use crate::{rcc, Peri};
9 11
10pub const VDDA_CALIB_MV: u32 = 3300; 12pub const VDDA_CALIB_MV: u32 = 3300;
11pub const ADC_MAX: u32 = (1 << 12) - 1; 13pub const ADC_MAX: u32 = (1 << 12) - 1;
@@ -20,12 +22,9 @@ pub struct InterruptHandler<T: Instance> {
20impl<T: Instance> interrupt::typelevel::Handler<T::Interrupt> for InterruptHandler<T> { 22impl<T: Instance> interrupt::typelevel::Handler<T::Interrupt> for InterruptHandler<T> {
21 unsafe fn on_interrupt() { 23 unsafe fn on_interrupt() {
22 if T::regs().sr().read().eoc() { 24 if T::regs().sr().read().eoc() {
23 T::regs().cr1().modify(|w| w.set_eocie(false)); 25 T::regs().cr1().modify(|w| w.set_eocie(false)); // End of Convert interrupt disable
24 } else { 26 T::state().waker.wake();
25 return;
26 } 27 }
27
28 T::state().waker.wake();
29 } 28 }
30} 29}
31 30
@@ -69,6 +68,9 @@ impl<'d, T: Instance> Adc<'d, T> {
69 // One cycle after calibration 68 // One cycle after calibration
70 blocking_delay_us((1_000_000 * 1) / Self::freq().0 + 1); 69 blocking_delay_us((1_000_000 * 1) / Self::freq().0 + 1);
71 70
71 T::Interrupt::unpend();
72 unsafe { T::Interrupt::enable() };
73
72 Self { 74 Self {
73 adc, 75 adc,
74 sample_time: SampleTime::from_bits(0), 76 sample_time: SampleTime::from_bits(0),