tx stale nefunguje
This commit is contained in:
@@ -1,46 +0,0 @@
|
|||||||
[package]
|
|
||||||
authors = ["Priec <filippriec@gmail.com>"]
|
|
||||||
name = "dma_gpio"
|
|
||||||
edition = "2024"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
cortex-m = { version = "0.7.7", features = ["inline-asm", "critical-section-single-core"] }
|
|
||||||
cortex-m-rt = "0.7.5"
|
|
||||||
panic-halt = "1.0.0"
|
|
||||||
|
|
||||||
embassy-executor = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["arch-cortex-m", "executor-thread"] }
|
|
||||||
embassy-futures = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-sync = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-time = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["tick-hz-32_768"] }
|
|
||||||
embassy-hal-internal = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-usb = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-stm32 = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["unstable-pac", "stm32u575zi", "time-driver-tim2", "memory-x", "defmt"] }
|
|
||||||
|
|
||||||
embedded-hal = "1.0.0"
|
|
||||||
embedded-graphics = "0.8.1"
|
|
||||||
heapless = { version = "0.9.1", default-features = false }
|
|
||||||
micromath = "2.1.0"
|
|
||||||
tinybmp = "0.6.0"
|
|
||||||
panic-probe = { version = "1.0.0", features = ["defmt"] }
|
|
||||||
defmt-rtt = "1.1.0"
|
|
||||||
defmt = "1.0.1"
|
|
||||||
static_cell = "2.1.1"
|
|
||||||
embedded-io = "0.6.1"
|
|
||||||
embedded-io-async = "0.6.1"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
defmt-test = "0.4.0"
|
|
||||||
|
|
||||||
[[test]]
|
|
||||||
name = "uart_emulation"
|
|
||||||
harness = false
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
test = false
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "main"
|
|
||||||
path = "src/bin/main.rs"
|
|
||||||
test = false
|
|
||||||
45
semestralka_1b_rx/Cargo.toml
Normal file
45
semestralka_1b_rx/Cargo.toml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[package]
|
||||||
|
authors = ["Priec <filippriec@gmail.com>"]
|
||||||
|
name = "dma_gpio"
|
||||||
|
edition = "2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
cortex-m = { version = "0.7.7", features = ["inline-asm", "critical-section-single-core"] }
|
||||||
|
cortex-m-rt = "0.7.5"
|
||||||
|
panic-halt = "1.0.0"
|
||||||
|
embassy-executor = { path = "/home/filip/programs/embassy/embassy-executor", features = ["arch-cortex-m", "executor-thread"] }
|
||||||
|
embassy-futures = { path = "/home/filip/programs/embassy/embassy-futures" }
|
||||||
|
embassy-sync = { path = "/home/filip/programs/embassy/embassy-sync" }
|
||||||
|
embassy-time = { path = "/home/filip/programs/embassy/embassy-time", features = ["tick-hz-32_768"] }
|
||||||
|
embassy-hal-internal = { path = "/home/filip/programs/embassy/embassy-hal-internal" }
|
||||||
|
embassy-usb = { path = "/home/filip/programs/embassy/embassy-usb" }
|
||||||
|
embassy-stm32 = { path = "/home/filip/programs/embassy/embassy-stm32", features = ["unstable-pac", "stm32u575zi", "time-driver-tim2", "memory-x", "defmt"] }
|
||||||
|
|
||||||
|
embedded-hal = "1.0.0"
|
||||||
|
embedded-graphics = "0.8.1"
|
||||||
|
heapless = { version = "0.9.1", default-features = false }
|
||||||
|
micromath = "2.1.0"
|
||||||
|
tinybmp = "0.6.0"
|
||||||
|
panic-probe = { version = "1.0.0", features = ["defmt"] }
|
||||||
|
defmt-rtt = "1.1.0"
|
||||||
|
defmt = "1.0.1"
|
||||||
|
static_cell = "2.1.1"
|
||||||
|
embedded-io = "0.6.1"
|
||||||
|
embedded-io-async = "0.6.1"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
defmt-test = "0.4.0"
|
||||||
|
|
||||||
|
[[test]]
|
||||||
|
name = "uart_emulation"
|
||||||
|
harness = false
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
test = false
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "main"
|
||||||
|
path = "src/bin/main.rs"
|
||||||
|
test = false
|
||||||
@@ -27,6 +27,7 @@ use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, pipe::Pipe};
|
|||||||
use dma_gpio::hw_uart_internal::usart2;
|
use dma_gpio::hw_uart_internal::usart2;
|
||||||
use dma_gpio::hw_uart_internal::driver::uart_task as uart_task_internal;
|
use dma_gpio::hw_uart_internal::driver::uart_task as uart_task_internal;
|
||||||
use dma_gpio::config::{PIPE_INT_TX, PIPE_INT_RX};
|
use dma_gpio::config::{PIPE_INT_TX, PIPE_INT_RX};
|
||||||
|
use embassy_time::{Duration, Timer};
|
||||||
use {defmt_rtt as _, panic_probe as _};
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
bind_interrupts!(struct Irqs {
|
bind_interrupts!(struct Irqs {
|
||||||
@@ -79,12 +80,10 @@ async fn main(spawner: Spawner) {
|
|||||||
RX_BUF2.init([0; 256]),
|
RX_BUF2.init([0; 256]),
|
||||||
Irqs2,
|
Irqs2,
|
||||||
cfg2,
|
cfg2,
|
||||||
)
|
).unwrap();
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let _ = usart2::setup_and_spawn(BAUD);
|
let _ = usart2::setup_and_spawn(BAUD);
|
||||||
spawner
|
spawner.spawn(uart_task_internal(uart2, &PIPE_INT_TX, &PIPE_INT_RX).unwrap());
|
||||||
.spawn(uart_task_internal(uart2, &PIPE_INT_TX, &PIPE_INT_RX).unwrap());
|
|
||||||
info!("USART2 ready");
|
info!("USART2 ready");
|
||||||
// END OF INTERNAL HARDWARE UART (USART2)
|
// END OF INTERNAL HARDWARE UART (USART2)
|
||||||
|
|
||||||
@@ -95,7 +94,8 @@ async fn main(spawner: Spawner) {
|
|||||||
// END OF USART1 <-> USART2 bridge
|
// END OF USART1 <-> USART2 bridge
|
||||||
|
|
||||||
// SOFTWARE UART
|
// SOFTWARE UART
|
||||||
let _rx = Input::new(p.PC3, Pull::Up);
|
// let _rx = Input::new(p.PD6, Pull::Up);
|
||||||
|
let mut rx_pin = Input::new(p.PD6, Pull::Up);
|
||||||
let _tx = Output::new(p.PB0, Level::High, Speed::VeryHigh);
|
let _tx = Output::new(p.PB0, Level::High, Speed::VeryHigh);
|
||||||
init_tim6_for_uart(p.TIM6, BAUD, TX_OVERSAMPLE);
|
init_tim6_for_uart(p.TIM6, BAUD, TX_OVERSAMPLE);
|
||||||
init_tim7_for_uart(p.TIM7, BAUD, RX_OVERSAMPLE);
|
init_tim7_for_uart(p.TIM7, BAUD, RX_OVERSAMPLE);
|
||||||
@@ -105,8 +105,8 @@ async fn main(spawner: Spawner) {
|
|||||||
let sw_rx_ring: &mut [u8; RX_RING_BYTES] = SW_RX_RING.init([0; RX_RING_BYTES]);
|
let sw_rx_ring: &mut [u8; RX_RING_BYTES] = SW_RX_RING.init([0; RX_RING_BYTES]);
|
||||||
// let sw_tx_ring: &mut [u32; TX_RING_BYTES] = SW_TX_RING.init([0; TX_RING_BYTES]);
|
// let sw_tx_ring: &mut [u32; TX_RING_BYTES] = SW_TX_RING.init([0; TX_RING_BYTES]);
|
||||||
|
|
||||||
let gpioc_idr = embassy_stm32::pac::GPIOC.idr().as_ptr() as *mut u8; // POZOR C REGISTER
|
let gpio_idr = embassy_stm32::pac::GPIOD.idr().as_ptr() as *mut u8; // POZOR C REGISTER
|
||||||
spawner.spawn(rx_dma_task(p.GPDMA1_CH1, gpioc_idr, sw_rx_ring, &PIPE_SW_RX).unwrap());
|
spawner.spawn(rx_dma_task(p.GPDMA1_CH1, gpio_idr, sw_rx_ring, &PIPE_SW_RX).unwrap());
|
||||||
|
|
||||||
// Create and start the TX DMA ring in main.
|
// Create and start the TX DMA ring in main.
|
||||||
let bsrr_ptr = embassy_stm32::pac::GPIOB.bsrr().as_ptr() as *mut u32; // POZOR B REGISTER
|
let bsrr_ptr = embassy_stm32::pac::GPIOB.bsrr().as_ptr() as *mut u32; // POZOR B REGISTER
|
||||||
@@ -118,6 +118,7 @@ async fn main(spawner: Spawner) {
|
|||||||
let mut last_yield = Instant::now();
|
let mut last_yield = Instant::now();
|
||||||
let mut buf = [0u8; 32];
|
let mut buf = [0u8; 32];
|
||||||
|
|
||||||
|
let mut last_state: u8 = 0;
|
||||||
loop {
|
loop {
|
||||||
info!("tick start");
|
info!("tick start");
|
||||||
// Timer::after(Duration::from_millis(100)).await;
|
// Timer::after(Duration::from_millis(100)).await;
|
||||||
@@ -131,6 +132,16 @@ async fn main(spawner: Spawner) {
|
|||||||
// }
|
// }
|
||||||
// yield_now().await;
|
// yield_now().await;
|
||||||
|
|
||||||
|
let bit = rx_pin.is_high();
|
||||||
|
if bit as u8 != last_state {
|
||||||
|
info!(
|
||||||
|
"SW RX -> PD6 changed, new state = {}",
|
||||||
|
if bit { "HIGH" } else { "LOW" }
|
||||||
|
);
|
||||||
|
last_state = bit as u8;
|
||||||
|
}
|
||||||
|
Timer::after(Duration::from_millis(1)).await;
|
||||||
|
|
||||||
let n2 = PIPE_SW_RX.read(&mut buf).await;
|
let n2 = PIPE_SW_RX.read(&mut buf).await;
|
||||||
if n2 > 0 {
|
if n2 > 0 {
|
||||||
info!("SW UART RX pipe: {:a}", &buf[..n2]);
|
info!("SW UART RX pipe: {:a}", &buf[..n2]);
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
[package]
|
|
||||||
authors = ["Priec <filippriec@gmail.com>"]
|
|
||||||
name = "dma_gpio"
|
|
||||||
edition = "2024"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
cortex-m = { version = "0.7.7", features = ["inline-asm", "critical-section-single-core"] }
|
|
||||||
cortex-m-rt = "0.7.5"
|
|
||||||
panic-halt = "1.0.0"
|
|
||||||
|
|
||||||
embassy-executor = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["arch-cortex-m", "executor-thread"] }
|
|
||||||
embassy-futures = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-sync = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-time = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["tick-hz-32_768"] }
|
|
||||||
embassy-hal-internal = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-usb = { git = "https://github.com/embassy-rs/embassy.git", branch = "main" }
|
|
||||||
embassy-stm32 = { git = "https://github.com/embassy-rs/embassy.git", branch = "main", features = ["unstable-pac", "stm32u575zi", "time-driver-tim2", "memory-x", "defmt"] }
|
|
||||||
|
|
||||||
embedded-hal = "1.0.0"
|
|
||||||
embedded-graphics = "0.8.1"
|
|
||||||
heapless = { version = "0.9.1", default-features = false }
|
|
||||||
micromath = "2.1.0"
|
|
||||||
tinybmp = "0.6.0"
|
|
||||||
panic-probe = { version = "1.0.0", features = ["defmt"] }
|
|
||||||
defmt-rtt = "1.1.0"
|
|
||||||
defmt = "1.0.1"
|
|
||||||
static_cell = "2.1.1"
|
|
||||||
embedded-io = "0.6.1"
|
|
||||||
embedded-io-async = "0.6.1"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
defmt-test = "0.4.0"
|
|
||||||
|
|
||||||
[[test]]
|
|
||||||
name = "uart_emulation"
|
|
||||||
harness = false
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
test = false
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "main"
|
|
||||||
path = "src/bin/main.rs"
|
|
||||||
test = false
|
|
||||||
@@ -330,7 +330,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-embedded-hal"
|
name = "embassy-embedded-hal"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"defmt 1.0.1",
|
"defmt 1.0.1",
|
||||||
"embassy-futures",
|
"embassy-futures",
|
||||||
@@ -348,7 +347,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-executor"
|
name = "embassy-executor"
|
||||||
version = "0.9.1"
|
version = "0.9.1"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cordyceps",
|
"cordyceps",
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
@@ -361,7 +359,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-executor-macros"
|
name = "embassy-executor-macros"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -372,17 +369,14 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-executor-timer-queue"
|
name = "embassy-executor-timer-queue"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-futures"
|
name = "embassy-futures"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-hal-internal"
|
name = "embassy-hal-internal"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
"critical-section",
|
"critical-section",
|
||||||
@@ -393,7 +387,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-net-driver"
|
name = "embassy-net-driver"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"defmt 1.0.1",
|
"defmt 1.0.1",
|
||||||
]
|
]
|
||||||
@@ -401,7 +394,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-net-driver-channel"
|
name = "embassy-net-driver-channel"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embassy-futures",
|
"embassy-futures",
|
||||||
"embassy-net-driver",
|
"embassy-net-driver",
|
||||||
@@ -411,7 +403,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-stm32"
|
name = "embassy-stm32"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aligned",
|
"aligned",
|
||||||
"bit_field",
|
"bit_field",
|
||||||
@@ -460,7 +451,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-sync"
|
name = "embassy-sync"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"critical-section",
|
"critical-section",
|
||||||
@@ -474,7 +464,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-time"
|
name = "embassy-time"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"critical-section",
|
"critical-section",
|
||||||
@@ -490,7 +479,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-time-driver"
|
name = "embassy-time-driver"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"document-features",
|
"document-features",
|
||||||
]
|
]
|
||||||
@@ -498,7 +486,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-time-queue-utils"
|
name = "embassy-time-queue-utils"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embassy-executor-timer-queue",
|
"embassy-executor-timer-queue",
|
||||||
"heapless 0.8.0",
|
"heapless 0.8.0",
|
||||||
@@ -507,7 +494,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-usb"
|
name = "embassy-usb"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embassy-futures",
|
"embassy-futures",
|
||||||
"embassy-net-driver-channel",
|
"embassy-net-driver-channel",
|
||||||
@@ -522,7 +508,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-usb-driver"
|
name = "embassy-usb-driver"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"defmt 1.0.1",
|
"defmt 1.0.1",
|
||||||
"embedded-io-async",
|
"embedded-io-async",
|
||||||
@@ -531,7 +516,6 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "embassy-usb-synopsys-otg"
|
name = "embassy-usb-synopsys-otg"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/embassy-rs/embassy.git?branch=main#9b1add3d83e98c6c9ae9230bf35cd89bba530a20"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"critical-section",
|
"critical-section",
|
||||||
"defmt 1.0.1",
|
"defmt 1.0.1",
|
||||||
45
semestralka_1c_tx/Cargo.toml
Normal file
45
semestralka_1c_tx/Cargo.toml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[package]
|
||||||
|
authors = ["Priec <filippriec@gmail.com>"]
|
||||||
|
name = "dma_gpio"
|
||||||
|
edition = "2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
cortex-m = { version = "0.7.7", features = ["inline-asm", "critical-section-single-core"] }
|
||||||
|
cortex-m-rt = "0.7.5"
|
||||||
|
panic-halt = "1.0.0"
|
||||||
|
embassy-executor = { path = "/home/filip/programs/embassy/embassy-executor", features = ["arch-cortex-m", "executor-thread"] }
|
||||||
|
embassy-futures = { path = "/home/filip/programs/embassy/embassy-futures" }
|
||||||
|
embassy-sync = { path = "/home/filip/programs/embassy/embassy-sync" }
|
||||||
|
embassy-time = { path = "/home/filip/programs/embassy/embassy-time", features = ["tick-hz-32_768"] }
|
||||||
|
embassy-hal-internal = { path = "/home/filip/programs/embassy/embassy-hal-internal" }
|
||||||
|
embassy-usb = { path = "/home/filip/programs/embassy/embassy-usb" }
|
||||||
|
embassy-stm32 = { path = "/home/filip/programs/embassy/embassy-stm32", features = ["unstable-pac", "stm32u575zi", "time-driver-tim2", "memory-x", "defmt"] }
|
||||||
|
|
||||||
|
embedded-hal = "1.0.0"
|
||||||
|
embedded-graphics = "0.8.1"
|
||||||
|
heapless = { version = "0.9.1", default-features = false }
|
||||||
|
micromath = "2.1.0"
|
||||||
|
tinybmp = "0.6.0"
|
||||||
|
panic-probe = { version = "1.0.0", features = ["defmt"] }
|
||||||
|
defmt-rtt = "1.1.0"
|
||||||
|
defmt = "1.0.1"
|
||||||
|
static_cell = "2.1.1"
|
||||||
|
embedded-io = "0.6.1"
|
||||||
|
embedded-io-async = "0.6.1"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
defmt-test = "0.4.0"
|
||||||
|
|
||||||
|
[[test]]
|
||||||
|
name = "uart_emulation"
|
||||||
|
harness = false
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
test = false
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "main"
|
||||||
|
path = "src/bin/main.rs"
|
||||||
|
test = false
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use defmt::*;
|
use defmt::*;
|
||||||
use embassy_executor::Spawner;
|
use embassy_executor::Spawner;
|
||||||
use embassy_time::Instant;
|
use embassy_time::{Instant, Timer, Duration};
|
||||||
use embassy_stm32::dma::Request;
|
use embassy_stm32::dma::Request;
|
||||||
use embassy_stm32::gpio::{Input, Output, Level, Pull, Speed};
|
use embassy_stm32::gpio::{Input, Output, Level, Pull, Speed};
|
||||||
use dma_gpio::software_uart::{
|
use dma_gpio::software_uart::{
|
||||||
@@ -73,18 +73,16 @@ async fn main(spawner: Spawner) {
|
|||||||
|
|
||||||
let uart2 = BufferedUart::new(
|
let uart2 = BufferedUart::new(
|
||||||
p.USART2,
|
p.USART2,
|
||||||
p.PA3, // RX
|
p.PD6, // RX
|
||||||
p.PA2, // TX
|
p.PA2, // TX
|
||||||
TX_BUF2.init([0; 256]),
|
TX_BUF2.init([0; 256]),
|
||||||
RX_BUF2.init([0; 256]),
|
RX_BUF2.init([0; 256]),
|
||||||
Irqs2,
|
Irqs2,
|
||||||
cfg2,
|
cfg2,
|
||||||
)
|
).unwrap();
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let _ = usart2::setup_and_spawn(BAUD);
|
let _ = usart2::setup_and_spawn(BAUD);
|
||||||
spawner
|
spawner.spawn(uart_task_internal(uart2, &PIPE_INT_TX, &PIPE_INT_RX).unwrap());
|
||||||
.spawn(uart_task_internal(uart2, &PIPE_INT_TX, &PIPE_INT_RX).unwrap());
|
|
||||||
info!("USART2 ready");
|
info!("USART2 ready");
|
||||||
// END OF INTERNAL HARDWARE UART (USART2)
|
// END OF INTERNAL HARDWARE UART (USART2)
|
||||||
|
|
||||||
@@ -95,53 +93,45 @@ async fn main(spawner: Spawner) {
|
|||||||
// END OF USART1 <-> USART2 bridge
|
// END OF USART1 <-> USART2 bridge
|
||||||
|
|
||||||
// SOFTWARE UART
|
// SOFTWARE UART
|
||||||
let _rx = Input::new(p.PC3, Pull::Up);
|
let tx = Output::new(p.PB0, Level::High, Speed::VeryHigh);
|
||||||
let _tx = Output::new(p.PB0, Level::High, Speed::VeryHigh);
|
|
||||||
init_tim6_for_uart(p.TIM6, BAUD, TX_OVERSAMPLE);
|
init_tim6_for_uart(p.TIM6, BAUD, TX_OVERSAMPLE);
|
||||||
init_tim7_for_uart(p.TIM7, BAUD, RX_OVERSAMPLE);
|
|
||||||
dump_tim6_regs();
|
dump_tim6_regs();
|
||||||
|
|
||||||
// Safe one-time init from StaticCell
|
// Safe one-time init from StaticCell
|
||||||
let sw_rx_ring: &mut [u8; RX_RING_BYTES] = SW_RX_RING.init([0; RX_RING_BYTES]);
|
let sw_tx_ring: &mut [u32; TX_RING_BYTES] = SW_TX_RING.init([0; TX_RING_BYTES]);
|
||||||
// let sw_tx_ring: &mut [u32; TX_RING_BYTES] = SW_TX_RING.init([0; TX_RING_BYTES]);
|
|
||||||
|
|
||||||
let gpioc_idr = embassy_stm32::pac::GPIOC.idr().as_ptr() as *mut u8; // POZOR C REGISTER
|
|
||||||
spawner.spawn(rx_dma_task(p.GPDMA1_CH1, gpioc_idr, sw_rx_ring, &PIPE_SW_RX).unwrap());
|
|
||||||
|
|
||||||
// Create and start the TX DMA ring in main.
|
|
||||||
let bsrr_ptr = embassy_stm32::pac::GPIOB.bsrr().as_ptr() as *mut u32; // POZOR B REGISTER
|
let bsrr_ptr = embassy_stm32::pac::GPIOB.bsrr().as_ptr() as *mut u32; // POZOR B REGISTER
|
||||||
// let odr_ptr = embassy_stm32::pac::GPIOA.odr().as_ptr() as *mut u32; // NEEDS DECODE CHANGE
|
// let odr_ptr = embassy_stm32::pac::GPIOA.odr().as_ptr() as *mut u32; // NEEDS DECODE CHANGE
|
||||||
// spawner.spawn(tx_dma_task(p.GPDMA1_CH0, bsrr_ptr, sw_tx_ring, &PIPE_SW_TX).unwrap());
|
spawner.spawn(tx_dma_task(p.GPDMA1_CH0, bsrr_ptr, sw_tx_ring, &PIPE_SW_TX).unwrap());
|
||||||
// EDN OF SOFTWARE UART
|
// EDN OF SOFTWARE UART
|
||||||
|
|
||||||
|
|
||||||
let mut last_yield = Instant::now();
|
let mut last_yield = Instant::now();
|
||||||
let mut buf = [0u8; 32];
|
let mut buf = [0u8; 32];
|
||||||
|
let mut counter: u32 = 0;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
info!("tick start");
|
info!("tick start");
|
||||||
// Timer::after(Duration::from_millis(100)).await;
|
// Timer::after(Duration::from_millis(100)).await;
|
||||||
// info!("tick end");
|
// info!("tick end");
|
||||||
|
|
||||||
// let n1 = PIPE_HW_RX.read(&mut buf).await;
|
counter += 1;
|
||||||
// if n1 > 0 {
|
let msg = if counter % 2 == 0 {
|
||||||
// info!("PC received: {:a}", &buf[..n1]);
|
b"AAAAA\n"
|
||||||
// let _ = PIPE_SW_TX.write(&buf[..n1]).await;
|
} else {
|
||||||
// info!("SW UART TX sent echo: {:a}", &buf[..n1]);
|
b"Hello\n"
|
||||||
// }
|
};
|
||||||
// yield_now().await;
|
PIPE_SW_TX.write(msg).await;
|
||||||
|
info!("Sent: {:a}", msg);
|
||||||
|
|
||||||
let n2 = PIPE_SW_RX.read(&mut buf).await;
|
Timer::after(Duration::from_secs(3)).await;
|
||||||
|
// Also read any incoming data from SW RX pipe
|
||||||
|
let n2 = PIPE_INT_RX.read(&mut buf).await;
|
||||||
if n2 > 0 {
|
if n2 > 0 {
|
||||||
info!("SW UART RX pipe: {:a}", &buf[..n2]);
|
info!("HW INT UART RX pipe: {:a}", &buf[..n2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
yield_now().await;
|
yield_now().await;
|
||||||
|
|
||||||
// if Instant::now().duration_since(last_yield) >= yield_period {
|
|
||||||
// yield_now().await;
|
|
||||||
// last_yield = Instant::now();
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3,13 +3,13 @@ use crate::software_uart::uart_emulation::{Parity, StopBits, UartConfig};
|
|||||||
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
|
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
|
||||||
use embassy_sync::pipe::Pipe;
|
use embassy_sync::pipe::Pipe;
|
||||||
|
|
||||||
pub const BAUD: u32 = 9_600;
|
pub const BAUD: u32 = 115_200;
|
||||||
// pub const TX_PIN_BIT: u8 = 2; // PA2
|
// pub const TX_PIN_BIT: u8 = 2; // PA2
|
||||||
// pub const RX_PIN_BIT: u8 = 3; // PA3
|
// pub const RX_PIN_BIT: u8 = 3; // PA3
|
||||||
pub const TX_PIN_BIT: u8 = 0; // PB2
|
pub const TX_PIN_BIT: u8 = 0; // PB2
|
||||||
pub const RX_PIN_BIT: u8 = 3; // PC3
|
pub const RX_PIN_BIT: u8 = 3; // PC3
|
||||||
pub const TX_OVERSAMPLE: u16 = 1;
|
pub const TX_OVERSAMPLE: u16 = 1;
|
||||||
pub const RX_OVERSAMPLE: u16 = 16;
|
pub const RX_OVERSAMPLE: u16 = 13;
|
||||||
|
|
||||||
pub const RX_RING_BYTES: usize = 4096;
|
pub const RX_RING_BYTES: usize = 4096;
|
||||||
pub const TX_RING_BYTES: usize = 4096;
|
pub const TX_RING_BYTES: usize = 4096;
|
||||||
@@ -44,7 +44,7 @@ pub async fn tx_dma_task(
|
|||||||
ch: Peri<'static, GPDMA1_CH0>,
|
ch: Peri<'static, GPDMA1_CH0>,
|
||||||
register: *mut u32, // Either odr or bsrr
|
register: *mut u32, // Either odr or bsrr
|
||||||
tx_ring_mem: &'static mut [u32],
|
tx_ring_mem: &'static mut [u32],
|
||||||
pipe_rx: &'static Pipe<CriticalSectionRawMutex, 1024>,
|
pipe_tx: &'static Pipe<CriticalSectionRawMutex, 1024>,
|
||||||
) {
|
) {
|
||||||
let mut tx_opts = TransferOptions::default();
|
let mut tx_opts = TransferOptions::default();
|
||||||
tx_opts.half_transfer_ir = true;
|
tx_opts.half_transfer_ir = true;
|
||||||
@@ -68,7 +68,7 @@ pub async fn tx_dma_task(
|
|||||||
let mut rx_buf = [0u8; 256];
|
let mut rx_buf = [0u8; 256];
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let n = pipe_rx.read(&mut rx_buf).await;
|
let n = pipe_tx.read(&mut rx_buf).await;
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
yield_now().await;
|
yield_now().await;
|
||||||
continue;
|
continue;
|
||||||
Reference in New Issue
Block a user