Sfoglia il codice sorgente

spi_master: move the spi_bus_init function into common header

Michael (XIAO Xufeng) 6 anni fa
parent
commit
28b2e113ca

+ 42 - 0
components/driver/include/driver/spi_common.h

@@ -87,6 +87,48 @@ typedef struct {
 } spi_bus_config_t;
 
 
+/**
+ * @brief Initialize a SPI bus
+ *
+ * @warning For now, only supports HSPI and VSPI.
+ *
+ * @param host SPI peripheral that controls this bus
+ * @param bus_config Pointer to a spi_bus_config_t struct specifying how the host should be initialized
+ * @param dma_chan Either channel 1 or 2, or 0 in the case when no DMA is required. Selecting a DMA channel
+ *                 for a SPI bus allows transfers on the bus to have sizes only limited by the amount of
+ *                 internal memory. Selecting no DMA channel (by passing the value 0) limits the amount of
+ *                 bytes transfered to a maximum of 64. Set to 0 if only the SPI flash uses
+ *                 this bus.
+ *
+ * @warning If a DMA channel is selected, any transmit and receive buffer used should be allocated in
+ *          DMA-capable memory.
+ *
+ * @warning The ISR of SPI is always executed on the core which calls this
+ *          function. Never starve the ISR on this core or the SPI transactions will not
+ *          be handled.
+ *
+ * @return
+ *         - ESP_ERR_INVALID_ARG   if configuration is invalid
+ *         - ESP_ERR_INVALID_STATE if host already is in use
+ *         - ESP_ERR_NO_MEM        if out of memory
+ *         - ESP_OK                on success
+ */
+esp_err_t spi_bus_initialize(spi_host_device_t host, const spi_bus_config_t *bus_config, int dma_chan);
+
+/**
+ * @brief Free a SPI bus
+ *
+ * @warning In order for this to succeed, all devices have to be removed first.
+ *
+ * @param host SPI peripheral to free
+ * @return
+ *         - ESP_ERR_INVALID_ARG   if parameter is invalid
+ *         - ESP_ERR_INVALID_STATE if not all devices on the bus are freed
+ *         - ESP_OK                on success
+ */
+esp_err_t spi_bus_free(spi_host_device_t host);
+
+
 /**
  * @brief Try to claim a SPI peripheral
  *

+ 4 - 49
components/driver/include/driver/spi_master.h

@@ -1,9 +1,9 @@
-// Copyright 2010-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2010-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
-
+//
 //     http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
@@ -12,14 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-
-#ifndef _DRIVER_SPI_MASTER_H_
-#define _DRIVER_SPI_MASTER_H_
+#pragma once
 
 #include "esp_err.h"
 #include "freertos/FreeRTOS.h"
-#include "freertos/semphr.h"
-
+//for spi_bus_initialization funcions. to be back-compatible
 #include "driver/spi_common.h"
 
 /** SPI master clock is divided by 80MHz apb clock. Below defines are example frequencies, and are accurate. Be free to specify a random frequency, it will be rounded to closest frequency (to macros below if above 8MHz).
@@ -154,47 +151,6 @@ typedef struct {
 
 
 typedef struct spi_device_t* spi_device_handle_t;  ///< Handle for a device on a SPI bus
-
-/**
- * @brief Initialize a SPI bus
- *
- * @warning For now, only supports HSPI and VSPI.
- *
- * @param host SPI peripheral that controls this bus
- * @param bus_config Pointer to a spi_bus_config_t struct specifying how the host should be initialized
- * @param dma_chan Either channel 1 or 2, or 0 in the case when no DMA is required. Selecting a DMA channel
- *                 for a SPI bus allows transfers on the bus to have sizes only limited by the amount of
- *                 internal memory. Selecting no DMA channel (by passing the value 0) limits the amount of
- *                 bytes transfered to a maximum of 32.
- *
- * @warning If a DMA channel is selected, any transmit and receive buffer used should be allocated in
- *          DMA-capable memory.
- *
- * @warning The ISR of SPI is always executed on the core which calls this
- *          function. Never starve the ISR on this core or the SPI transactions will not
- *          be handled.
- *
- * @return
- *         - ESP_ERR_INVALID_ARG   if configuration is invalid
- *         - ESP_ERR_INVALID_STATE if host already is in use
- *         - ESP_ERR_NO_MEM        if out of memory
- *         - ESP_OK                on success
- */
-esp_err_t spi_bus_initialize(spi_host_device_t host, const spi_bus_config_t *bus_config, int dma_chan);
-
-/**
- * @brief Free a SPI bus
- *
- * @warning In order for this to succeed, all devices have to be removed first.
- *
- * @param host SPI peripheral to free
- * @return
- *         - ESP_ERR_INVALID_ARG   if parameter is invalid
- *         - ESP_ERR_INVALID_STATE if not all devices on the bus are freed
- *         - ESP_OK                on success
- */
-esp_err_t spi_bus_free(spi_host_device_t host);
-
 /**
  * @brief Allocate a device on a SPI bus
  *
@@ -429,4 +385,3 @@ int spi_get_freq_limit(bool gpio_is_used, int input_delay_ns);
 }
 #endif
 
-#endif

+ 2 - 0
components/driver/sdspi_host.c

@@ -26,6 +26,8 @@
 #include "sdspi_private.h"
 #include "sdspi_crc.h"
 #include "esp_timer.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/semphr.h"
 
 
 /// Max number of transactions in flight (used in start_command_write_blocks)

+ 1 - 1
components/driver/spi_master.c

@@ -313,7 +313,7 @@ cleanup:
     free(spihost[host]);
     spihost[host] = NULL;
     spicommon_periph_free(host);
-    spicommon_dma_chan_free(dma_chan);
+    if (dma_chan != 0) spicommon_dma_chan_free(dma_chan);
     return ret;
 }