summaryrefslogtreecommitdiff
path: root/src/drivers/spi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/spi.cpp')
-rw-r--r--src/drivers/spi.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/drivers/spi.cpp b/src/drivers/spi.cpp
new file mode 100644
index 00000000..66c78e8a
--- /dev/null
+++ b/src/drivers/spi.cpp
@@ -0,0 +1,48 @@
+#include "spi.hpp"
+
+#include "driver/sdspi_host.h"
+#include "driver/spi_common.h"
+#include "driver/spi_master.h"
+#include "esp_err.h"
+#include "hal/spi_types.h"
+
+namespace drivers {
+
+static const spi_host_device_t kSpiHost = VSPI_HOST;
+static const gpio_num_t kSpiSdoPin = GPIO_NUM_23;
+static const gpio_num_t kSpiSdiPin = GPIO_NUM_19;
+static const gpio_num_t kSpiSclkPin = GPIO_NUM_18;
+
+esp_err_t init_spi(void) {
+ spi_bus_config_t config = {
+ .mosi_io_num = kSpiSdoPin,
+ .miso_io_num = kSpiSdiPin,
+ .sclk_io_num = kSpiSclkPin,
+ .quadwp_io_num = -1, // SPI_QUADWP_IO,
+ .quadhd_io_num = -1, // SPI_QUADHD_IO,
+
+ // Unused
+ .data4_io_num = -1,
+ .data5_io_num = -1,
+ .data6_io_num = -1,
+ .data7_io_num = -1,
+
+ // Use the DMA default size. The display requires larger buffers, but it
+ // manages its down use of DMA-capable memory.
+ .max_transfer_sz = 128 * 16 * 2, // TODO: hmm
+ .flags = SPICOMMON_BUSFLAG_MASTER | SPICOMMON_BUSFLAG_IOMUX_PINS,
+ .intr_flags = 0,
+ };
+
+ if (esp_err_t err = spi_bus_initialize(kSpiHost, &config, SPI_DMA_CH_AUTO)) {
+ return err;
+ }
+
+ return ESP_OK;
+}
+
+esp_err_t deinit_spi(void) {
+ return spi_bus_free(kSpiHost);
+}
+
+} // namespace drivers