aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRogan Morrow <[email protected]>2025-02-28 12:30:23 +1100
committerRogan Morrow <[email protected]>2025-02-28 12:30:23 +1100
commit065071b4672e1223be22c5c746b5d97856ba8079 (patch)
tree380a3dc4bd9e5420d15bbe21e78b0bddb232625a
parent3b37c79331c191a5153bbe4ac7e464150c714f13 (diff)
add separate tx waker
-rw-r--r--embassy-stm32/src/usart/mod.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index de7b3c8df..568067360 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -85,6 +85,7 @@ unsafe fn on_interrupt(r: Regs, s: &'static State) {
85 85
86 compiler_fence(Ordering::SeqCst); 86 compiler_fence(Ordering::SeqCst);
87 s.rx_waker.wake(); 87 s.rx_waker.wake();
88 s.tx_waker.wake();
88} 89}
89 90
90#[derive(Clone, Copy, PartialEq, Eq, Debug)] 91#[derive(Clone, Copy, PartialEq, Eq, Debug)]
@@ -592,7 +593,7 @@ async fn flush(info: &Info, state: &State) -> Result<(), Error> {
592 593
593 // future which completes when Transmission complete is detected 594 // future which completes when Transmission complete is detected
594 let abort = poll_fn(move |cx| { 595 let abort = poll_fn(move |cx| {
595 state.rx_waker.register(cx.waker()); 596 state.tx_waker.register(cx.waker());
596 597
597 let sr = sr(r).read(); 598 let sr = sr(r).read();
598 if sr.tc() { 599 if sr.tc() {
@@ -2019,6 +2020,7 @@ enum Kind {
2019 2020
2020struct State { 2021struct State {
2021 rx_waker: AtomicWaker, 2022 rx_waker: AtomicWaker,
2023 tx_waker: AtomicWaker,
2022 tx_rx_refcount: AtomicU8, 2024 tx_rx_refcount: AtomicU8,
2023} 2025}
2024 2026
@@ -2026,6 +2028,7 @@ impl State {
2026 const fn new() -> Self { 2028 const fn new() -> Self {
2027 Self { 2029 Self {
2028 rx_waker: AtomicWaker::new(), 2030 rx_waker: AtomicWaker::new(),
2031 tx_waker: AtomicWaker::new(),
2029 tx_rx_refcount: AtomicU8::new(0), 2032 tx_rx_refcount: AtomicU8::new(0),
2030 } 2033 }
2031 } 2034 }