#display-interface #spi-interface #dma #esp32 #bare-metal #chips #esp

esp-display-interface-spi-dma

为 ESP32 芯片提供 DMA 支持的 Rust 硬件裸机 SPI 显示接口

1 个不稳定版本

0.1.0 2024年1月30日

#958嵌入式开发

MIT/Apache

14KB
244

带有 SPI 和 DMA 的 ESP 显示接口

Rust 硬件裸机对 ESP32 的 SPI 接口进行 DMA 实现。

使用方法

将依赖项添加到项目中

cargo add esp-display-interface-spi-dma
cargo add static_cell
cargo add esp-bsp

代码

ESP32-S3-BOX 示例

use static_cell::make_static;
use esp_display_interface_spi_dma::display_interface_spi_dma;
...

let dma = Gdma::new(peripherals.DMA);
let dma_channel = dma.channel0;
let descriptors = make_static!([0u32; 8 * 3]);
let rx_descriptors = make_static!([0u32; 8 * 3]);
let (lcd_sclk, lcd_mosi, lcd_cs, lcd_miso, lcd_dc, mut lcd_backlight, lcd_reset) = lcd_gpios!(BoardType::ESP32S3Box, io);

let spi = Spi::new(
    peripherals.SPI2,
    40u32.MHz(),
    SpiMode::Mode0,
    &clocks
).with_pins(
    Some(lcd_sclk),
    Some(lcd_mosi),
    Some(lcd_miso),
    Some(lcd_cs),
).with_dma(
    dma_channel.configure(
        false,
        &mut *descriptors,
        &mut *rx_descriptors,
        DmaPriority::Priority0,
    )
);


let di = display_interface_spi_dma::new_no_cs(2 * 256 * 192, spi, lcd_dc);

let display_config = DisplayConfig::for_board(BoardType::ESP32S3Box);
let mut display = match mipidsi::Builder::ili9342c_rgb565(di)
    .with_display_size(display_config.h_res, display_config.v_res)
    .with_orientation(mipidsi::Orientation::PortraitInverted(false))
    .with_color_order(mipidsi::ColorOrder::Bgr)
    .init(&mut delay, Some(lcd_reset))
{
    Ok(display) => display,
    Err(_e) => {
        // Handle the error and possibly exit the application
        panic!("Display initialization failed");
    }
};

依赖项

~3–11MB
~177K SLoC