diff options
| author | Henrik Alsér <[email protected]> | 2022-05-12 15:35:32 +0200 |
|---|---|---|
| committer | Henrik Alsér <[email protected]> | 2022-05-12 15:35:32 +0200 |
| commit | 93cbd079ec1f5b8371fb4d52b00e0a404403f73d (patch) | |
| tree | 312d4acf488d7715850fac52323ec3b34968c0ab | |
| parent | 0be9184efc8f814a19081c2176b8317bd5217f0f (diff) | |
Remove OnDrop handler, start sampling in new
| -rw-r--r-- | embassy-nrf/src/qdec.rs | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/embassy-nrf/src/qdec.rs b/embassy-nrf/src/qdec.rs index c124ba35e..c26815389 100644 --- a/embassy-nrf/src/qdec.rs +++ b/embassy-nrf/src/qdec.rs | |||
| @@ -11,7 +11,7 @@ use core::task::Poll; | |||
| 11 | use embassy::interrupt::InterruptExt; | 11 | use embassy::interrupt::InterruptExt; |
| 12 | use embassy::util::Unborrow; | 12 | use embassy::util::Unborrow; |
| 13 | use embassy::waitqueue::AtomicWaker; | 13 | use embassy::waitqueue::AtomicWaker; |
| 14 | use embassy_hal_common::{drop::OnDrop, unborrow}; | 14 | use embassy_hal_common::unborrow; |
| 15 | use futures::future::poll_fn; | 15 | use futures::future::poll_fn; |
| 16 | 16 | ||
| 17 | /// Quadrature decoder | 17 | /// Quadrature decoder |
| @@ -128,6 +128,9 @@ impl<'d> Qdec<'d> { | |||
| 128 | // Enable peripheral | 128 | // Enable peripheral |
| 129 | r.enable.write(|w| w.enable().set_bit()); | 129 | r.enable.write(|w| w.enable().set_bit()); |
| 130 | 130 | ||
| 131 | // Start sampling | ||
| 132 | unsafe { r.tasks_start.write(|w| w.bits(1)) }; | ||
| 133 | |||
| 131 | irq.disable(); | 134 | irq.disable(); |
| 132 | irq.set_handler(|_| { | 135 | irq.set_handler(|_| { |
| 133 | let r = Self::regs(); | 136 | let r = Self::regs(); |
| @@ -155,16 +158,8 @@ impl<'d> Qdec<'d> { | |||
| 155 | /// let delta = q.read().await; | 158 | /// let delta = q.read().await; |
| 156 | /// ``` | 159 | /// ``` |
| 157 | pub async fn read(&mut self) -> i16 { | 160 | pub async fn read(&mut self) -> i16 { |
| 158 | // In case the future is dropped, stop the task and reset events. | ||
| 159 | let on_drop = OnDrop::new(|| { | ||
| 160 | let t = Self::regs(); | ||
| 161 | t.tasks_stop.write(|w| unsafe { w.bits(1) }); | ||
| 162 | t.events_reportrdy.reset(); | ||
| 163 | }); | ||
| 164 | |||
| 165 | let t = Self::regs(); | 161 | let t = Self::regs(); |
| 166 | t.intenset.write(|w| w.reportrdy().set()); | 162 | t.intenset.write(|w| w.reportrdy().set()); |
| 167 | unsafe { t.tasks_start.write(|w| w.bits(1)) }; | ||
| 168 | unsafe { t.tasks_readclracc.write(|w| w.bits(1)) }; | 163 | unsafe { t.tasks_readclracc.write(|w| w.bits(1)) }; |
| 169 | 164 | ||
| 170 | let value = poll_fn(|cx| { | 165 | let value = poll_fn(|cx| { |
| @@ -178,7 +173,6 @@ impl<'d> Qdec<'d> { | |||
| 178 | } | 173 | } |
| 179 | }) | 174 | }) |
| 180 | .await; | 175 | .await; |
| 181 | on_drop.defuse(); | ||
| 182 | value | 176 | value |
| 183 | } | 177 | } |
| 184 | 178 | ||
