made spi interface async

This commit is contained in:
2026-05-21 13:48:25 +02:00
parent 92c7504946
commit 6b290d6754
2 changed files with 8 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ use embassy_rp::{
Peri,
gpio::{Level, Output},
peripherals::SPI0,
spi::{self, Blocking, Spi},
spi::{self, Async, Spi},
};
use embassy_time::Timer;
use embedded_hal_bus::spi::{ExclusiveDevice, NoDelay};
@@ -17,7 +17,7 @@ use static_cell::StaticCell;
pub type SPIDisplay = Display<
SpiInterface<
'static,
ExclusiveDevice<Spi<'static, SPI0, Blocking>, Output<'static>, NoDelay>,
ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static>, NoDelay>,
Output<'static>,
>,
ST7789,
@@ -26,6 +26,7 @@ pub type SPIDisplay = Display<
pub async fn init_display(
inner: Peri<'static, embassy_rp::peripherals::SPI0>,
dma: Peri<'static, embassy_rp::peripherals::DMA_CH0>,
clk: Peri<'static, embassy_rp::peripherals::PIN_6>,
mosi: Peri<'static, embassy_rp::peripherals::PIN_7>,
cs: Peri<'static, embassy_rp::peripherals::PIN_5>,
@@ -35,7 +36,7 @@ pub async fn init_display(
let mut spi_cfg = spi::Config::default();
spi_cfg.frequency = 62_500_000;
let spi = Spi::new_blocking_txonly(inner, clk, mosi, spi_cfg);
let spi = Spi::new_txonly(inner, clk, mosi, dma, spi_cfg);
let cs_display = Output::new(cs, Level::Low);
let dc_display = Output::new(dc, Level::Low);

View File

@@ -32,8 +32,10 @@ async fn main(spawner: Spawner) {
return;
};
let Ok(display) =
init::spi_display::init_display(p.SPI0, p.PIN_6, p.PIN_7, p.PIN_5, p.PIN_9, p.PIN_10).await
let Ok(display) = init::spi_display::init_display(
p.SPI0, p.DMA_CH0, p.PIN_6, p.PIN_7, p.PIN_5, p.PIN_9, p.PIN_10,
)
.await
else {
error!("Failed to init display");