23#include <idfxx/intr_alloc>
24#include <idfxx/intr_types>
26#include <driver/spi_master.h>
43#if SOC_SPI_PERIPH_NUM > 2
54#if CONFIG_IDF_TARGET_ESP32
71 slave = SPICOMMON_BUSFLAG_SLAVE,
72 master = SPICOMMON_BUSFLAG_MASTER,
74 sclk = SPICOMMON_BUSFLAG_SCLK,
75 miso = SPICOMMON_BUSFLAG_MISO,
76 mosi = SPICOMMON_BUSFLAG_MOSI,
78 SPICOMMON_BUSFLAG_DUAL,
79 wphd = SPICOMMON_BUSFLAG_WPHD,
80 quad = SPICOMMON_BUSFLAG_QUAD,
82 io4_io7 = SPICOMMON_BUSFLAG_IO4_IO7,
83 octal = SPICOMMON_BUSFLAG_OCTAL,
93inline constexpr bool idfxx::enable_flags_operators<idfxx::spi::bus_flags> =
true;
171#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
220#if SOC_SPI_PERIPH_NUM > 2
225 return "unknown(" + std::to_string(
static_cast<int>(h)) +
")";
231#include "sdkconfig.h"
232#ifdef CONFIG_IDFXX_STD_FORMAT
238struct formatter<
idfxx::spi::host_device> {
239 constexpr auto parse(format_parse_context& ctx) {
return ctx.begin(); }
241 template<
typename FormatContext>
244 return std::copy(s.begin(), s.end(), ctx.out());
Type-safe set of flags from a scoped enum.
static constexpr gpio nc()
Returns a GPIO representing "not connected".
master_bus & operator=(master_bus &&)=delete
master_bus(master_bus &&)=delete
static result< std::unique_ptr< master_bus > > make(enum host_device host, enum dma_chan dma_chan, struct bus_config config)
Creates a new SPI master bus.
master_bus(const master_bus &)=delete
master_bus(enum host_device host, enum dma_chan dma_chan, struct bus_config config)
Constructs a new SPI master bus.
enum host_device host() const
Returns the host device ID the bus is using.
master_bus & operator=(const master_bus &)=delete
std::string to_string(core_id c)
Returns a string representation of a CPU core identifier.
dma_chan
SPI DMA channel selection.
bus_flags
SPI bus capability and configuration flags.
host_device
General purpose SPI Host Controller ID.
@ ch_auto
Auto select DMA channel.
@ slp_allow_pd
Allow to power down the peripheral during light sleep, and auto recover then.
@ slave
Bus supports slave mode.
@ iomux_pins
Bus uses IOMUX pins.
@ octal
Check existing of MOSI/MISO/WP/HD/SPIIO4/SPIIO5/SPIIO6/SPIIO7 pins as output.
@ dual
Check MOSI and MISO pins can output. Or indicates bus able to work under DIO mode.
@ quad
Check existing of MOSI/MISO/WP/HD pins as output.
@ io4_io7
Check existing of IO4~IO7 pins. Or indicates IO4~IO7 pins initialized.
@ wphd
Check existing of WP and HD pins. Or indicates WP & HD pins initialized.
@ native_pins
Bus uses native pins.
@ mosi
Check existing of MOSI pin. Or indicates MOSI line initialized.
@ miso
Check existing of MISO pin. Or indicates MISO line initialized.
@ master
Bus supports master mode.
@ sclk
Check existing of SCLK pin. Or indicates CLK line initialized.
std::expected< T, std::error_code > result
result type wrapping a value or error code.
intr_cpu_affinity_t
Interrupt CPU core affinity.
@ automatic
Install the peripheral interrupt to ANY CPU core, decided by on which CPU the interrupt allocator is ...
idfxx::flags< idfxx::intr_flag > intr_flags
Interrupt flags to set priority and IRAM attribute.
int max_transfer_sz
Maximum transfer size, in bytes.
idfxx::gpio data4_io_num
GPIO pin for spi data4 signal in octal mode, or gpio::nc() if not used.
idfxx::gpio data6_io_num
GPIO pin for spi data6 signal in octal mode, or gpio::nc() if not used.
idfxx::gpio data2_io_num
GPIO pin for spi data2 signal in quad/octal mode, or gpio::nc() if not used.
idfxx::gpio mosi_io_num
GPIO pin for Master Out Slave In (=spi_d) signal.
idfxx::gpio data1_io_num
GPIO pin for spi data1 signal in quad/octal mode.
idfxx::gpio quadhd_io_num
GPIO pin for HD (Hold) signal, or gpio::nc() if not used.
idfxx::gpio data0_io_num
GPIO pin for spi data0 signal in quad/octal mode.
idfxx::gpio data5_io_num
GPIO pin for spi data5 signal in octal mode, or gpio::nc() if not used.
idfxx::gpio quadwp_io_num
GPIO pin for WP (Write Protect) signal, or gpio::nc() if not used.
idfxx::gpio data3_io_num
GPIO pin for spi data3 signal in quad/octal mode, or gpio::nc() if not used.
idfxx::intr_cpu_affinity_t isr_cpu_id
Select cpu core to register SPI ISR.
idfxx::gpio miso_io_num
GPIO pin for Master In Slave Out (=spi_q) signal.
idfxx::gpio sclk_io_num
GPIO pin for SPI Clock signal.
idfxx::gpio data7_io_num
GPIO pin for spi data7 signal in octal mode, or gpio::nc() if not used.
bool data_io_default_level
Output data IO default level when no transaction.