diff --git a/semestralka_1_final_crate/software_uart/.gitignore b/semestralka_1_final_crate/software_uart/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/semestralka_1_final_crate/software_uart/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/semestralka_1_final_crate/software_uart/src/gpio_dma_uart_rx.rs b/semestralka_1_final_crate/software_uart/src/gpio_dma_uart_rx.rs index 60a9bb1..52536a2 100644 --- a/semestralka_1_final_crate/software_uart/src/gpio_dma_uart_rx.rs +++ b/semestralka_1_final_crate/software_uart/src/gpio_dma_uart_rx.rs @@ -5,15 +5,14 @@ use embassy_stm32::{ peripherals::GPDMA1_CH1, Peri, }; -use crate::config::RX_PIN_BIT; use embassy_stm32::dma::{ ReadableRingBuffer, TransferOptions, }; -use crate::config::{RX_OVERSAMPLE, UART_CFG}; use crate::decode_uart_samples; use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe}; use embassy_futures::yield_now; +use crate::UartConfig; use defmt::info; // datasheet tabulka 137 @@ -26,6 +25,9 @@ pub async fn rx_dma_task( register: *mut u8, ring: &'static mut [u8], pipe_rx: &'static Pipe, + rx_pin_bit: u8, + rx_oversample: u16, + uart_cfg: &'static UartConfig, ) { let mut opts = TransferOptions::default(); opts.half_transfer_ir = true; @@ -50,14 +52,14 @@ pub async fn rx_dma_task( let _ = rx.read_exact(&mut raw_chunk).await; for (i, b) in raw_chunk.iter().enumerate() { - level_buf[valid_len + i] = ((*b >> RX_PIN_BIT) & 1) as u8; + level_buf[valid_len + i] = ((*b >> rx_pin_bit) & 1) as u8; } let current_end = valid_len + CHUNK_SIZE; let (decoded, consumed) = decode_uart_samples( &level_buf[..current_end], - RX_OVERSAMPLE, - &UART_CFG + rx_oversample, + uart_cfg ); if !decoded.is_empty() {