fix cancellation hanging on event never occuring

- The end event is not triggered by stop and might therefor never occur
- Clear the end_event after operation is done instead of disabled
This commit is contained in:
Ulf Lilleengen 2024-07-03 09:03:25 +02:00
parent 3c6bf3a31a
commit a07702ba7b

View File

@ -347,12 +347,10 @@ impl<'d, T: Instance> Radio<'d, T> {
trace!("radio drop: stopping");
r.intenclr.write(|w| w.end().clear());
r.events_end.reset();
r.tasks_stop.write(|w| unsafe { w.bits(1) });
// The docs don't explicitly mention any event to acknowledge the stop task
while r.events_end.read().bits() == 0 {}
r.events_end.reset();
trace!("radio drop: stopped");
});
@ -382,7 +380,7 @@ impl<'d, T: Instance> Radio<'d, T> {
.await;
compiler_fence(Ordering::SeqCst);
r.events_disabled.reset(); // ACK
r.events_end.reset(); // ACK
// Everthing ends fine, so it disable the drop
drop.defuse();