nrf/uarte: do not use WFE on drop.
- It disturbs other stuff that uses WFE/SEV in the system. I ran into issues with this. - It needs the irq handler to check for RXTO/TXSTOPPED errors, which makes it slower.
This commit is contained in:
parent
05bc4d198e
commit
66d70cd146
@ -187,13 +187,6 @@ impl<'d, T: Instance> Uarte<'d, T> {
|
|||||||
s.endtx_waker.wake();
|
s.endtx_waker.wake();
|
||||||
r.intenclr.write(|w| w.endtx().clear());
|
r.intenclr.write(|w| w.endtx().clear());
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.events_rxto.read().bits() != 0 {
|
|
||||||
r.intenclr.write(|w| w.rxto().clear());
|
|
||||||
}
|
|
||||||
if r.events_txstopped.read().bits() != 0 {
|
|
||||||
r.intenclr.write(|w| w.txstopped().clear());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,15 +201,9 @@ impl<'a, T: Instance> Drop for Uarte<'a, T> {
|
|||||||
info!("did_stoprx {} did_stoptx {}", did_stoprx, did_stoptx);
|
info!("did_stoprx {} did_stoptx {}", did_stoprx, did_stoptx);
|
||||||
|
|
||||||
// Wait for rxto or txstopped, if needed.
|
// Wait for rxto or txstopped, if needed.
|
||||||
r.intenset.write(|w| w.rxto().set().txstopped().set());
|
|
||||||
while (did_stoprx && r.events_rxto.read().bits() == 0)
|
while (did_stoprx && r.events_rxto.read().bits() == 0)
|
||||||
|| (did_stoptx && r.events_txstopped.read().bits() == 0)
|
|| (did_stoptx && r.events_txstopped.read().bits() == 0)
|
||||||
{
|
{}
|
||||||
info!("uarte drop: wfe");
|
|
||||||
cortex_m::asm::wfe();
|
|
||||||
}
|
|
||||||
|
|
||||||
cortex_m::asm::sev();
|
|
||||||
|
|
||||||
// Finally we can disable!
|
// Finally we can disable!
|
||||||
r.enable.write(|w| w.enable().disabled());
|
r.enable.write(|w| w.enable().disabled());
|
||||||
|
Loading…
Reference in New Issue
Block a user