diff options
| author | Timo Kröger <[email protected]> | 2021-01-03 13:31:33 +0100 |
|---|---|---|
| committer | Timo Kröger <[email protected]> | 2021-01-04 22:55:40 +0100 |
| commit | 9b1f7b8a17bd1ebd61e68c5d2a2116794d31cfa7 (patch) | |
| tree | 5292b97b7859dee653219b45380c31dd370d8c2c | |
| parent | 85ec9dd16fb5649900722228e46e9c68370901a6 (diff) | |
uarte: Enable peripheral with first poll
This fixes a lockup when a future is dropped before it was polled.
| -rw-r--r-- | embassy-nrf/src/uarte.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs index 156dbbefd..aee91f803 100644 --- a/embassy-nrf/src/uarte.rs +++ b/embassy-nrf/src/uarte.rs | |||
| @@ -219,7 +219,6 @@ impl<T: Instance> embassy::uart::Uart for Uarte<T> { | |||
| 219 | assert!(!self.tx_started()); | 219 | assert!(!self.tx_started()); |
| 220 | 220 | ||
| 221 | T::state().tx_done.reset(); | 221 | T::state().tx_done.reset(); |
| 222 | self.enable(); | ||
| 223 | 222 | ||
| 224 | SendFuture { | 223 | SendFuture { |
| 225 | uarte: self, | 224 | uarte: self, |
| @@ -243,7 +242,6 @@ impl<T: Instance> embassy::uart::Uart for Uarte<T> { | |||
| 243 | assert!(!self.rx_started()); | 242 | assert!(!self.rx_started()); |
| 244 | 243 | ||
| 245 | T::state().rx_done.reset(); | 244 | T::state().rx_done.reset(); |
| 246 | self.enable(); | ||
| 247 | 245 | ||
| 248 | ReceiveFuture { | 246 | ReceiveFuture { |
| 249 | uarte: self, | 247 | uarte: self, |
| @@ -257,7 +255,7 @@ pub struct SendFuture<'a, T> | |||
| 257 | where | 255 | where |
| 258 | T: Instance, | 256 | T: Instance, |
| 259 | { | 257 | { |
| 260 | uarte: &'a Uarte<T>, | 258 | uarte: &'a mut Uarte<T>, |
| 261 | buf: &'a [u8], | 259 | buf: &'a [u8], |
| 262 | } | 260 | } |
| 263 | 261 | ||
| @@ -295,6 +293,8 @@ where | |||
| 295 | assert!(len <= EASY_DMA_SIZE); | 293 | assert!(len <= EASY_DMA_SIZE); |
| 296 | // TODO: panic if buffer is not in SRAM | 294 | // TODO: panic if buffer is not in SRAM |
| 297 | 295 | ||
| 296 | uarte.enable(); | ||
| 297 | |||
| 298 | compiler_fence(Ordering::SeqCst); | 298 | compiler_fence(Ordering::SeqCst); |
| 299 | uarte | 299 | uarte |
| 300 | .instance | 300 | .instance |
| @@ -323,7 +323,7 @@ pub struct ReceiveFuture<'a, T> | |||
| 323 | where | 323 | where |
| 324 | T: Instance, | 324 | T: Instance, |
| 325 | { | 325 | { |
| 326 | uarte: &'a Uarte<T>, | 326 | uarte: &'a mut Uarte<T>, |
| 327 | buf: &'a mut [u8], | 327 | buf: &'a mut [u8], |
| 328 | } | 328 | } |
| 329 | 329 | ||
| @@ -359,6 +359,8 @@ where | |||
| 359 | let ptr = buf.as_ptr(); | 359 | let ptr = buf.as_ptr(); |
| 360 | let len = buf.len(); | 360 | let len = buf.len(); |
| 361 | assert!(len <= EASY_DMA_SIZE); | 361 | assert!(len <= EASY_DMA_SIZE); |
| 362 | |||
| 363 | uarte.enable(); | ||
| 362 | 364 | ||
| 363 | compiler_fence(Ordering::SeqCst); | 365 | compiler_fence(Ordering::SeqCst); |
| 364 | uarte | 366 | uarte |
