From 46486a6e74c9931926c500f4cc83a32bbbc07259 Mon Sep 17 00:00:00 2001 From: Priec Date: Wed, 19 Nov 2025 14:51:42 +0100 Subject: [PATCH] working data catch --- semestralka_1d_rx_bez_dma/src/bin/main.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/semestralka_1d_rx_bez_dma/src/bin/main.rs b/semestralka_1d_rx_bez_dma/src/bin/main.rs index e37b0d9..640a105 100644 --- a/semestralka_1d_rx_bez_dma/src/bin/main.rs +++ b/semestralka_1d_rx_bez_dma/src/bin/main.rs @@ -37,7 +37,7 @@ use core::cell::RefCell; use embassy_sync::channel::Channel; static RX_PIN_GLOBAL: Mutex>>> = Mutex::new(RefCell::new(None)); -static PD6_BITS: Channel = Channel::new(); +static PD6_BITS: Channel = Channel::new(); bind_interrupts!(struct Irqs { USART1 => BufferedInterruptHandler; @@ -120,10 +120,14 @@ async fn main(spawner: Spawner) { // EDN OF SOFTWARE UART unsafe { cortex_m::peripheral::NVIC::unmask(pac::Interrupt::TIM7); } + let mut last_bit: Option = None; loop { - if let Ok(bit) = PD6_BITS.try_receive() { - // only called when ISR pushed something - info!("c"); + while let Ok(bit) = PD6_BITS.try_receive() { + if Some(bit) != last_bit { + // PD6 level changed since the last sample → print one 'c' + info!("c"); + last_bit = Some(bit); + } } yield_now().await; } @@ -133,11 +137,9 @@ async fn main(spawner: Spawner) { fn TIM7() { let tim = unsafe { pac::TIM7 }; - // acknowledge update if tim.sr().read().uif() { tim.sr().modify(|w| w.set_uif(false)); - // quick PD6 read let bit = cortex_m::interrupt::free(|cs| { RX_PIN_GLOBAL .borrow(cs) @@ -145,14 +147,9 @@ fn TIM7() { .as_ref() .map(|pin| pin.is_high()) .unwrap_or(false) - }); + }) as u8; - // track state change; push if different - static mut LAST: bool = false; - if bit != unsafe { LAST } { - unsafe { LAST = bit; } - let _ = PD6_BITS.try_send(bit as u8); - } + let _ = PD6_BITS.try_send(bit); } }