diff options
Diffstat (limited to 'embassy-stm32/src/adc/ringbuffered.rs')
| -rw-r--r-- | embassy-stm32/src/adc/ringbuffered.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/embassy-stm32/src/adc/ringbuffered.rs b/embassy-stm32/src/adc/ringbuffered.rs index 5437866d3..242a1a89c 100644 --- a/embassy-stm32/src/adc/ringbuffered.rs +++ b/embassy-stm32/src/adc/ringbuffered.rs | |||
| @@ -4,7 +4,7 @@ use core::sync::atomic::{Ordering, compiler_fence}; | |||
| 4 | #[allow(unused_imports)] | 4 | #[allow(unused_imports)] |
| 5 | use embassy_hal_internal::Peri; | 5 | use embassy_hal_internal::Peri; |
| 6 | 6 | ||
| 7 | use crate::adc::AnyInstance; | 7 | use super::AdcRegs; |
| 8 | #[allow(unused_imports)] | 8 | #[allow(unused_imports)] |
| 9 | use crate::adc::{Instance, RxDma}; | 9 | use crate::adc::{Instance, RxDma}; |
| 10 | #[allow(unused_imports)] | 10 | #[allow(unused_imports)] |
| @@ -19,7 +19,7 @@ pub struct RingBufferedAdc<'d, T: Instance> { | |||
| 19 | ring_buf: ReadableRingBuffer<'d, u16>, | 19 | ring_buf: ReadableRingBuffer<'d, u16>, |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | 22 | impl<'d, T: Instance> RingBufferedAdc<'d, T> { |
| 23 | pub(crate) fn new(dma: Peri<'d, impl RxDma<T>>, dma_buf: &'d mut [u16]) -> Self { | 23 | pub(crate) fn new(dma: Peri<'d, impl RxDma<T>>, dma_buf: &'d mut [u16]) -> Self { |
| 24 | //dma side setup | 24 | //dma side setup |
| 25 | let opts = TransferOptions { | 25 | let opts = TransferOptions { |
| @@ -31,8 +31,7 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | |||
| 31 | // Safety: we forget the struct before this function returns. | 31 | // Safety: we forget the struct before this function returns. |
| 32 | let request = dma.request(); | 32 | let request = dma.request(); |
| 33 | 33 | ||
| 34 | let ring_buf = | 34 | let ring_buf = unsafe { ReadableRingBuffer::new(dma, request, T::regs().data(), dma_buf, opts) }; |
| 35 | unsafe { ReadableRingBuffer::new(dma, request, T::regs().dr().as_ptr() as *mut u16, dma_buf, opts) }; | ||
| 36 | 35 | ||
| 37 | Self { | 36 | Self { |
| 38 | _phantom: PhantomData, | 37 | _phantom: PhantomData, |
| @@ -45,7 +44,7 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | |||
| 45 | compiler_fence(Ordering::SeqCst); | 44 | compiler_fence(Ordering::SeqCst); |
| 46 | self.ring_buf.start(); | 45 | self.ring_buf.start(); |
| 47 | 46 | ||
| 48 | T::start(); | 47 | T::regs().start(); |
| 49 | } | 48 | } |
| 50 | 49 | ||
| 51 | pub fn stop(&mut self) { | 50 | pub fn stop(&mut self) { |
| @@ -117,15 +116,15 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | |||
| 117 | self.start(); | 116 | self.start(); |
| 118 | } | 117 | } |
| 119 | 118 | ||
| 120 | #[cfg(adc_v2)] | 119 | // #[cfg(adc_v2)] |
| 121 | { | 120 | // { |
| 122 | // Clear overrun flag if set. | 121 | // // Clear overrun flag if set. |
| 123 | if T::regs().sr().read().ovr() { | 122 | // if T::regs().sr().read().ovr() { |
| 124 | self.stop(); | 123 | // self.stop(); |
| 125 | 124 | // | |
| 126 | return Err(OverrunError); | 125 | // return Err(OverrunError); |
| 127 | } | 126 | // } |
| 128 | } | 127 | // } |
| 129 | 128 | ||
| 130 | self.ring_buf.read_exact(measurements).await.map_err(|_| OverrunError) | 129 | self.ring_buf.read_exact(measurements).await.map_err(|_| OverrunError) |
| 131 | } | 130 | } |
| @@ -143,15 +142,16 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | |||
| 143 | self.start(); | 142 | self.start(); |
| 144 | } | 143 | } |
| 145 | 144 | ||
| 146 | #[cfg(adc_v2)] | 145 | // #[cfg(adc_v2)] |
| 147 | { | 146 | // { |
| 148 | // Clear overrun flag if set. | 147 | // // Clear overrun flag if set. |
| 149 | if T::regs().sr().read().ovr() { | 148 | // if T::regs().sr().read().ovr() { |
| 150 | self.stop(); | 149 | // self.stop(); |
| 150 | // | ||
| 151 | // return Err(OverrunError); | ||
| 152 | // } | ||
| 153 | // } | ||
| 151 | 154 | ||
| 152 | return Err(OverrunError); | ||
| 153 | } | ||
| 154 | } | ||
| 155 | loop { | 155 | loop { |
| 156 | match self.ring_buf.read(buf) { | 156 | match self.ring_buf.read(buf) { |
| 157 | Ok((0, _)) => {} | 157 | Ok((0, _)) => {} |
| @@ -168,9 +168,9 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> { | |||
| 168 | } | 168 | } |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | impl<T: Instance + AnyInstance> Drop for RingBufferedAdc<'_, T> { | 171 | impl<T: Instance> Drop for RingBufferedAdc<'_, T> { |
| 172 | fn drop(&mut self) { | 172 | fn drop(&mut self) { |
| 173 | T::stop(); | 173 | T::regs().stop(); |
| 174 | 174 | ||
| 175 | compiler_fence(Ordering::SeqCst); | 175 | compiler_fence(Ordering::SeqCst); |
| 176 | 176 | ||
