Put the GUI drawing into task
This commit is contained in:
parent
083263e19e
commit
ff8483dbaa
125
src/main.rs
125
src/main.rs
@ -2,6 +2,7 @@
|
|||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use core::cell::RefCell;
|
use core::cell::RefCell;
|
||||||
|
use defmt::info;
|
||||||
use display_interface_spi::SPIInterface;
|
use display_interface_spi::SPIInterface;
|
||||||
use embassy_embedded_hal::shared_bus::blocking::spi::SpiDevice;
|
use embassy_embedded_hal::shared_bus::blocking::spi::SpiDevice;
|
||||||
use embassy_executor::Spawner;
|
use embassy_executor::Spawner;
|
||||||
@ -50,6 +51,70 @@ async fn blink(pin: AnyPin, blink_delay: Duration) -> ! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[embassy_executor::task]
|
||||||
|
async fn gui_task(
|
||||||
|
peripheral: embassy_nrf::peripherals::SERIAL3,
|
||||||
|
sck: AnyPin,
|
||||||
|
miso: AnyPin,
|
||||||
|
mosi: AnyPin,
|
||||||
|
display_reset_pin: AnyPin,
|
||||||
|
cs_pin: AnyPin,
|
||||||
|
dc_pin: AnyPin,
|
||||||
|
) -> ! {
|
||||||
|
///////////////
|
||||||
|
// Setup SPI //
|
||||||
|
///////////////
|
||||||
|
|
||||||
|
// Create an SPI config with the SPI frequency at 8MHz
|
||||||
|
let mut spim_config = spim::Config::default();
|
||||||
|
spim_config.frequency = spim::Frequency::M8;
|
||||||
|
|
||||||
|
// Grab the SPI Master peripheral form the nRF60
|
||||||
|
let spim = embassy_nrf::spim::Spim::new(peripheral, Irqs, sck, miso, mosi, spim_config);
|
||||||
|
// Use the SPI peripheral to create a shared SPI bus
|
||||||
|
let spi_bus: Mutex<embassy_sync::blocking_mutex::raw::NoopRawMutex, _> =
|
||||||
|
Mutex::new(RefCell::new(spim));
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Setup pins //
|
||||||
|
////////////////
|
||||||
|
|
||||||
|
// Initialize the CS, DC, and display reset pins as outputs
|
||||||
|
let chip_select = Output::new(cs_pin, Level::High, OutputDrive::Standard);
|
||||||
|
let direction_control = Output::new(dc_pin, Level::High, OutputDrive::Standard);
|
||||||
|
let display_reset = Output::new(display_reset_pin, Level::High, OutputDrive::Standard);
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
|
// Create the display //
|
||||||
|
////////////////////////
|
||||||
|
|
||||||
|
// Use the shared bus to create a SPI Device to use for the display
|
||||||
|
let spi_display = SpiDevice::new(&spi_bus, chip_select);
|
||||||
|
// Create a new SPI display interface
|
||||||
|
let iface = SPIInterface::new(spi_display, direction_control);
|
||||||
|
|
||||||
|
// Some options for the display
|
||||||
|
let display_orientation = ili9341::Orientation::PortraitFlipped;
|
||||||
|
let display_size = ili9341::DisplaySize240x320;
|
||||||
|
|
||||||
|
// Create the display
|
||||||
|
let display = Ili9341::new(
|
||||||
|
iface,
|
||||||
|
display_reset,
|
||||||
|
&mut embassy_time::Delay,
|
||||||
|
display_orientation,
|
||||||
|
display_size,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut gui = Gui::new(display);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
gui.draw().expect("Failed to draw GUI");
|
||||||
|
info!("Finished drawing GUI");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[embassy_executor::main]
|
#[embassy_executor::main]
|
||||||
async fn main(spawner: Spawner) {
|
async fn main(spawner: Spawner) {
|
||||||
// Initialize the nRF
|
// Initialize the nRF
|
||||||
@ -65,10 +130,6 @@ async fn main(spawner: Spawner) {
|
|||||||
)
|
)
|
||||||
.expect("Failed to start blink task");
|
.expect("Failed to start blink task");
|
||||||
|
|
||||||
////////////////
|
|
||||||
// Setup pins //
|
|
||||||
////////////////
|
|
||||||
|
|
||||||
let mosi = p.P0_13;
|
let mosi = p.P0_13;
|
||||||
let miso = p.P0_12;
|
let miso = p.P0_12;
|
||||||
let sck = p.P0_30;
|
let sck = p.P0_30;
|
||||||
@ -76,54 +137,22 @@ async fn main(spawner: Spawner) {
|
|||||||
let dc_pin = p.P0_20; // Data / Command pin for the display
|
let dc_pin = p.P0_20; // Data / Command pin for the display
|
||||||
let disp_rst_pin = p.P0_11;
|
let disp_rst_pin = p.P0_11;
|
||||||
|
|
||||||
// Initialize the CS, DC, and display reset pins as outputs
|
|
||||||
let chip_select = Output::new(cs_pin, Level::High, OutputDrive::Standard);
|
|
||||||
let direction_control = Output::new(dc_pin, Level::High, OutputDrive::Standard);
|
|
||||||
let display_reset = Output::new(disp_rst_pin, Level::High, OutputDrive::Standard);
|
|
||||||
|
|
||||||
///////////////
|
|
||||||
// Setup SPI //
|
|
||||||
///////////////
|
|
||||||
|
|
||||||
// Create an SPI config with the SPI frequency at 8MHz
|
|
||||||
let mut spim_config = spim::Config::default();
|
|
||||||
spim_config.frequency = spim::Frequency::M8;
|
|
||||||
|
|
||||||
// Grab the SPI Master peripheral form the nRF60
|
|
||||||
let spim = embassy_nrf::spim::Spim::new(p.SERIAL3, Irqs, sck, miso, mosi, spim_config);
|
|
||||||
// Use the SPI peripheral to create a shared SPI bus
|
|
||||||
let spi_bus: Mutex<embassy_sync::blocking_mutex::raw::NoopRawMutex, _> =
|
|
||||||
Mutex::new(RefCell::new(spim));
|
|
||||||
|
|
||||||
// Use the shared bus to create a SPI Device to use for the display
|
|
||||||
let spi_display = SpiDevice::new(&spi_bus, chip_select);
|
|
||||||
// Create a new SPI display interface
|
|
||||||
let iface = SPIInterface::new(spi_display, direction_control);
|
|
||||||
|
|
||||||
////////////////////////
|
|
||||||
// Create the display //
|
|
||||||
////////////////////////
|
|
||||||
|
|
||||||
// Some options for the display
|
|
||||||
let display_orientation = ili9341::Orientation::PortraitFlipped;
|
|
||||||
let display_size = ili9341::DisplaySize240x320;
|
|
||||||
|
|
||||||
// Create the display
|
|
||||||
let mut display = Ili9341::new(
|
|
||||||
iface,
|
|
||||||
display_reset,
|
|
||||||
&mut embassy_time::Delay,
|
|
||||||
display_orientation,
|
|
||||||
display_size,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// Create the GUI
|
// Create the GUI
|
||||||
let mut gui = Gui::new(display);
|
spawner
|
||||||
gui.draw().unwrap();
|
.spawn(gui_task(
|
||||||
|
p.SERIAL3,
|
||||||
|
sck.degrade(),
|
||||||
|
miso.degrade(),
|
||||||
|
mosi.degrade(),
|
||||||
|
disp_rst_pin.degrade(),
|
||||||
|
cs_pin.degrade(),
|
||||||
|
dc_pin.degrade(),
|
||||||
|
))
|
||||||
|
.expect("Failed to spawn GUI task");
|
||||||
|
|
||||||
// Now loop, re-running the demo every second
|
// Now loop, re-running the demo every second
|
||||||
loop {
|
loop {
|
||||||
|
info!("Hello, world!");
|
||||||
Timer::after_secs(1).await;
|
Timer::after_secs(1).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user