You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							1.5 KiB
						
					
					
				| /*
 | |
|  * Copyright 2023 jacqueline <me@jacqueline.id.au>
 | |
|  *
 | |
|  * SPDX-License-Identifier: GPL-3.0-only
 | |
|  */
 | |
| 
 | |
| #include "spi.hpp"
 | |
| 
 | |
| #include "driver/sdspi_host.h"
 | |
| #include "driver/spi_common.h"
 | |
| #include "driver/spi_master.h"
 | |
| #include "esp_err.h"
 | |
| #include "esp_intr_alloc.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;
 | |
| 
 | |
| static std::mutex sSpiMutex{};
 | |
| 
 | |
| 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 own use of DMA-capable memory.
 | |
|       .max_transfer_sz = 4096,
 | |
|       .flags = SPICOMMON_BUSFLAG_MASTER | SPICOMMON_BUSFLAG_IOMUX_PINS,
 | |
|       .intr_flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM,
 | |
|   };
 | |
| 
 | |
|   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);
 | |
| }
 | |
| 
 | |
| std::lock_guard<std::mutex> acquire_spi(void) {
 | |
|   return std::lock_guard<std::mutex>{sSpiMutex};
 | |
| }
 | |
| 
 | |
| }  // namespace drivers
 | |
| 
 |