diff options
| -rw-r--r-- | embassy-nrf/src/temp.rs | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/embassy-nrf/src/temp.rs b/embassy-nrf/src/temp.rs index bd8fa75a7..f7c6e6609 100644 --- a/embassy-nrf/src/temp.rs +++ b/embassy-nrf/src/temp.rs | |||
| @@ -4,7 +4,6 @@ use crate::interrupt; | |||
| 4 | use crate::pac; | 4 | use crate::pac; |
| 5 | use crate::peripherals::TEMP; | 5 | use crate::peripherals::TEMP; |
| 6 | 6 | ||
| 7 | use core::future::Future; | ||
| 8 | use core::marker::PhantomData; | 7 | use core::marker::PhantomData; |
| 9 | use core::task::Poll; | 8 | use core::task::Poll; |
| 10 | use embassy::interrupt::InterruptExt; | 9 | use embassy::interrupt::InterruptExt; |
| @@ -54,7 +53,7 @@ impl<'d> Temp<'d> { | |||
| 54 | /// let mut t = Temp::new(p.TEMP, interrupt::take!(TEMP)); | 53 | /// let mut t = Temp::new(p.TEMP, interrupt::take!(TEMP)); |
| 55 | /// let v: u16 = t.read().await.to_num::<u16>(); | 54 | /// let v: u16 = t.read().await.to_num::<u16>(); |
| 56 | /// ``` | 55 | /// ``` |
| 57 | pub fn read(&mut self) -> impl Future<Output = I30F2> { | 56 | pub async fn read(&mut self) -> I30F2 { |
| 58 | // In case the future is dropped, stop the task and reset events. | 57 | // In case the future is dropped, stop the task and reset events. |
| 59 | let on_drop = OnDrop::new(|| { | 58 | let on_drop = OnDrop::new(|| { |
| 60 | let t = Self::regs(); | 59 | let t = Self::regs(); |
| @@ -66,21 +65,19 @@ impl<'d> Temp<'d> { | |||
| 66 | t.intenset.write(|w| w.datardy().set()); | 65 | t.intenset.write(|w| w.datardy().set()); |
| 67 | unsafe { t.tasks_start.write(|w| w.bits(1)) }; | 66 | unsafe { t.tasks_start.write(|w| w.bits(1)) }; |
| 68 | 67 | ||
| 69 | async move { | 68 | let value = poll_fn(|cx| { |
| 70 | let value = poll_fn(|cx| { | 69 | WAKER.register(cx.waker()); |
| 71 | WAKER.register(cx.waker()); | 70 | if t.events_datardy.read().bits() == 0 { |
| 72 | if t.events_datardy.read().bits() == 0 { | 71 | return Poll::Pending; |
| 73 | return Poll::Pending; | 72 | } else { |
| 74 | } else { | 73 | t.events_datardy.reset(); |
| 75 | t.events_datardy.reset(); | 74 | let raw = t.temp.read().bits(); |
| 76 | let raw = t.temp.read().bits(); | 75 | Poll::Ready(I30F2::from_bits(raw as i32)) |
| 77 | Poll::Ready(I30F2::from_bits(raw as i32)) | 76 | } |
| 78 | } | 77 | }) |
| 79 | }) | 78 | .await; |
| 80 | .await; | 79 | on_drop.defuse(); |
| 81 | on_drop.defuse(); | 80 | value |
| 82 | value | ||
| 83 | } | ||
| 84 | } | 81 | } |
| 85 | 82 | ||
| 86 | fn regs() -> &'static pac::temp::RegisterBlock { | 83 | fn regs() -> &'static pac::temp::RegisterBlock { |
