aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Alsér <[email protected]>2022-05-12 15:35:32 +0200
committerHenrik Alsér <[email protected]>2022-05-12 15:35:32 +0200
commit93cbd079ec1f5b8371fb4d52b00e0a404403f73d (patch)
tree312d4acf488d7715850fac52323ec3b34968c0ab
parent0be9184efc8f814a19081c2176b8317bd5217f0f (diff)
Remove OnDrop handler, start sampling in new
-rw-r--r--embassy-nrf/src/qdec.rs14
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;
11use embassy::interrupt::InterruptExt; 11use embassy::interrupt::InterruptExt;
12use embassy::util::Unborrow; 12use embassy::util::Unborrow;
13use embassy::waitqueue::AtomicWaker; 13use embassy::waitqueue::AtomicWaker;
14use embassy_hal_common::{drop::OnDrop, unborrow}; 14use embassy_hal_common::unborrow;
15use futures::future::poll_fn; 15use 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