From 9b1f7b8a17bd1ebd61e68c5d2a2116794d31cfa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Kr=C3=B6ger?= Date: Sun, 3 Jan 2021 13:31:33 +0100 Subject: [PATCH] uarte: Enable peripheral with first poll This fixes a lockup when a future is dropped before it was polled. --- embassy-nrf/src/uarte.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs index 156dbbef..aee91f80 100644 --- a/embassy-nrf/src/uarte.rs +++ b/embassy-nrf/src/uarte.rs @@ -219,7 +219,6 @@ impl embassy::uart::Uart for Uarte { assert!(!self.tx_started()); T::state().tx_done.reset(); - self.enable(); SendFuture { uarte: self, @@ -243,7 +242,6 @@ impl embassy::uart::Uart for Uarte { assert!(!self.rx_started()); T::state().rx_done.reset(); - self.enable(); ReceiveFuture { uarte: self, @@ -257,7 +255,7 @@ pub struct SendFuture<'a, T> where T: Instance, { - uarte: &'a Uarte, + uarte: &'a mut Uarte, buf: &'a [u8], } @@ -295,6 +293,8 @@ where assert!(len <= EASY_DMA_SIZE); // TODO: panic if buffer is not in SRAM + uarte.enable(); + compiler_fence(Ordering::SeqCst); uarte .instance @@ -323,7 +323,7 @@ pub struct ReceiveFuture<'a, T> where T: Instance, { - uarte: &'a Uarte, + uarte: &'a mut Uarte, buf: &'a mut [u8], } @@ -359,6 +359,8 @@ where let ptr = buf.as_ptr(); let len = buf.len(); assert!(len <= EASY_DMA_SIZE); + + uarte.enable(); compiler_fence(Ordering::SeqCst); uarte