uarte: Enable peripheral with first poll
This fixes a lockup when a future is dropped before it was polled.
This commit is contained in:
parent
85ec9dd16f
commit
9b1f7b8a17
@ -219,7 +219,6 @@ impl<T: Instance> embassy::uart::Uart for Uarte<T> {
|
||||
assert!(!self.tx_started());
|
||||
|
||||
T::state().tx_done.reset();
|
||||
self.enable();
|
||||
|
||||
SendFuture {
|
||||
uarte: self,
|
||||
@ -243,7 +242,6 @@ impl<T: Instance> embassy::uart::Uart for Uarte<T> {
|
||||
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<T>,
|
||||
uarte: &'a mut Uarte<T>,
|
||||
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<T>,
|
||||
uarte: &'a mut Uarte<T>,
|
||||
buf: &'a mut [u8],
|
||||
}
|
||||
|
||||
@ -360,6 +360,8 @@ where
|
||||
let len = buf.len();
|
||||
assert!(len <= EASY_DMA_SIZE);
|
||||
|
||||
uarte.enable();
|
||||
|
||||
compiler_fence(Ordering::SeqCst);
|
||||
uarte
|
||||
.instance
|
||||
|
Loading…
Reference in New Issue
Block a user