diff options
| author | Ulf Lilleengen <[email protected]> | 2024-07-03 07:45:14 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-07-03 07:45:14 +0000 |
| commit | 8c54df10422e2bbcd1bae1f2cd0f282d31ef1851 (patch) | |
| tree | 01ab92d391af5af44d2ad07d3c5ff0143c4e4a21 | |
| parent | ef78e3283b4a4efe213681351a8345b7439425a4 (diff) | |
| parent | b07570fce5341b2b16aaa77ab1b1043362ed2e2c (diff) | |
Merge pull request #3145 from embassy-rs/nrf-radio-fixes
fix cancellation hanging on event never occuring
| -rw-r--r-- | embassy-nrf/src/radio/ble.rs | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/embassy-nrf/src/radio/ble.rs b/embassy-nrf/src/radio/ble.rs index 93003fb19..4f0b0641f 100644 --- a/embassy-nrf/src/radio/ble.rs +++ b/embassy-nrf/src/radio/ble.rs | |||
| @@ -335,8 +335,6 @@ impl<'d, T: Instance> Radio<'d, T> { | |||
| 335 | } | 335 | } |
| 336 | 336 | ||
| 337 | async fn trigger_and_wait_end(&mut self, trigger: impl FnOnce()) { | 337 | async fn trigger_and_wait_end(&mut self, trigger: impl FnOnce()) { |
| 338 | //self.trace_state(); | ||
| 339 | |||
| 340 | let r = T::regs(); | 338 | let r = T::regs(); |
| 341 | let s = T::state(); | 339 | let s = T::state(); |
| 342 | 340 | ||
| @@ -347,12 +345,10 @@ impl<'d, T: Instance> Radio<'d, T> { | |||
| 347 | trace!("radio drop: stopping"); | 345 | trace!("radio drop: stopping"); |
| 348 | 346 | ||
| 349 | r.intenclr.write(|w| w.end().clear()); | 347 | r.intenclr.write(|w| w.end().clear()); |
| 350 | r.events_end.reset(); | ||
| 351 | 348 | ||
| 352 | r.tasks_stop.write(|w| unsafe { w.bits(1) }); | 349 | r.tasks_stop.write(|w| unsafe { w.bits(1) }); |
| 353 | 350 | ||
| 354 | // The docs don't explicitly mention any event to acknowledge the stop task | 351 | r.events_end.reset(); |
| 355 | while r.events_end.read().bits() == 0 {} | ||
| 356 | 352 | ||
| 357 | trace!("radio drop: stopped"); | 353 | trace!("radio drop: stopped"); |
| 358 | }); | 354 | }); |
| @@ -368,7 +364,6 @@ impl<'d, T: Instance> Radio<'d, T> { | |||
| 368 | 364 | ||
| 369 | // Trigger the transmission | 365 | // Trigger the transmission |
| 370 | trigger(); | 366 | trigger(); |
| 371 | // self.trace_state(); | ||
| 372 | 367 | ||
| 373 | // On poll check if interrupt happen | 368 | // On poll check if interrupt happen |
| 374 | poll_fn(|cx| { | 369 | poll_fn(|cx| { |
| @@ -382,7 +377,7 @@ impl<'d, T: Instance> Radio<'d, T> { | |||
| 382 | .await; | 377 | .await; |
| 383 | 378 | ||
| 384 | compiler_fence(Ordering::SeqCst); | 379 | compiler_fence(Ordering::SeqCst); |
| 385 | r.events_disabled.reset(); // ACK | 380 | r.events_end.reset(); // ACK |
| 386 | 381 | ||
| 387 | // Everthing ends fine, so it disable the drop | 382 | // Everthing ends fine, so it disable the drop |
| 388 | drop.defuse(); | 383 | drop.defuse(); |
