4
4
*/
5
5
#include " Arduino_ESP32SPI.h"
6
6
7
- #if defined(ESP32)
7
+ #if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)
8
8
9
9
struct spi_struct_t
10
10
{
@@ -13,6 +13,10 @@ struct spi_struct_t
13
13
SemaphoreHandle_t lock;
14
14
#endif
15
15
uint8_t num;
16
+ int8_t sck;
17
+ int8_t miso;
18
+ int8_t mosi;
19
+ int8_t ss;
16
20
};
17
21
18
22
#if CONFIG_DISABLE_HAL_LOCKS
@@ -21,20 +25,26 @@ struct spi_struct_t
21
25
22
26
static spi_t _spi_bus_array[] = {
23
27
#if CONFIG_IDF_TARGET_ESP32S2
24
- {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 0 },
25
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 1 },
26
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 2 }
28
+ {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 0 , - 1 , - 1 , - 1 , - 1 },
29
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 1 , - 1 , - 1 , - 1 , - 1 },
30
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 2 , - 1 , - 1 , - 1 , - 1 }
27
31
#elif CONFIG_IDF_TARGET_ESP32S3
28
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0 },
29
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1 }
32
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0 , -1 , -1 , -1 , -1 },
33
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1 , -1 , -1 , -1 , -1 }
34
+ #elif CONFIG_IDF_TARGET_ESP32C2
35
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0 , -1 , -1 , -1 , -1 }
36
+ #elif CONFIG_IDF_TARGET_ESP32C3
37
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0 , -1 , -1 , -1 , -1 }
38
+ #elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2
39
+ {(spi_dev_t *)(DR_REG_SPI2_BASE), 0 , -1 , -1 , -1 , -1 }
30
40
#else
31
- {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), 0 },
32
- {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 1 },
33
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 2 },
34
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 3 }
41
+ {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), 0 , - 1 , - 1 , - 1 , - 1 },
42
+ {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 1 , - 1 , - 1 , - 1 , - 1 },
43
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 2 , - 1 , - 1 , - 1 , - 1 },
44
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 3 , - 1 , - 1 , - 1 , - 1 }
35
45
#endif
36
46
};
37
- #else // !CONFIG_DISABLE_HAL_LOCKS
47
+ #else
38
48
#define SPI_MUTEX_LOCK () \
39
49
do \
40
50
{ \
@@ -43,30 +53,34 @@ static spi_t _spi_bus_array[] = {
43
53
44
54
static spi_t _spi_bus_array[] = {
45
55
#if CONFIG_IDF_TARGET_ESP32S2
46
- {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL , 0 },
47
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 1 },
48
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 2 }
56
+ {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL , 0 , - 1 , - 1 , - 1 , - 1 },
57
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 1 , - 1 , - 1 , - 1 , - 1 },
58
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 2 , - 1 , - 1 , - 1 , - 1 }
49
59
#elif CONFIG_IDF_TARGET_ESP32S3
50
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 0 },
51
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 1 }
60
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 0 , -1 , -1 , -1 , -1 },
61
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 1 , -1 , -1 , -1 , -1 }
62
+ #elif CONFIG_IDF_TARGET_ESP32C2
63
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 0 , -1 , -1 , -1 , -1 }
52
64
#elif CONFIG_IDF_TARGET_ESP32C3
53
- {(volatile spi_dev_t *)(&GPSPI2), NULL , FSPI}
65
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 0 , -1 , -1 , -1 , -1 }
66
+ #elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2
67
+ {(spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 0 , -1 , -1 , -1 , -1 }
54
68
#else
55
- {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), NULL , 0 },
56
- {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL , 1 },
57
- {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 2 },
58
- {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 3 }
69
+ {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), NULL , 0 , - 1 , - 1 , - 1 , - 1 },
70
+ {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL , 1 , - 1 , - 1 , - 1 , - 1 },
71
+ {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL , 2 , - 1 , - 1 , - 1 , - 1 },
72
+ {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL , 3 , - 1 , - 1 , - 1 , - 1 }
59
73
#endif
60
74
};
61
- #endif // CONFIG_DISABLE_HAL_LOCKS
75
+ #endif
62
76
63
77
/* *
64
78
* @brief Arduino_ESP32SPI
65
79
*
66
80
*/
67
81
Arduino_ESP32SPI::Arduino_ESP32SPI (
68
- int8_t dc /* = GFX_NOT_DEFINED */ , int8_t cs /* = GFX_NOT_DEFINED */ , int8_t sck /* = GFX_NOT_DEFINED */ , int8_t mosi /* = GFX_NOT_DEFINED */ , int8_t miso /* = GFX_NOT_DEFINED */ , uint8_t spi_num /* = VSPI for ESP32, HSPI for S2 & S3, FSPI for C3 */ , bool is_shared_interface /* = true */ )
69
- : _dc(dc), _spi_num(spi_num ), _is_shared_interface(is_shared_interface)
82
+ int8_t dc /* = GFX_NOT_DEFINED */ , int8_t cs /* = GFX_NOT_DEFINED */ , int8_t sck /* = GFX_NOT_DEFINED */ , int8_t mosi /* = GFX_NOT_DEFINED */ , int8_t miso /* = GFX_NOT_DEFINED */ , uint8_t _spi_num /* = VSPI for ESP32, HSPI for S2 & S3, FSPI for C3 */ , bool is_shared_interface /* = true */ )
83
+ : _dc(dc), _spi_num(_spi_num ), _is_shared_interface(is_shared_interface)
70
84
{
71
85
#if CONFIG_IDF_TARGET_ESP32
72
86
if (
@@ -238,13 +252,13 @@ bool Arduino_ESP32SPI::begin(int32_t speed, int8_t dataMode)
238
252
#elif CONFIG_IDF_TARGET_ESP32S3
239
253
if (_spi_num == FSPI)
240
254
{
241
- periph_module_reset (PERIPH_SPI2_MODULE);
242
- periph_module_enable (PERIPH_SPI2_MODULE);
255
+ periph_ll_reset (PERIPH_SPI2_MODULE);
256
+ periph_ll_enable_clk_clear_rst (PERIPH_SPI2_MODULE);
243
257
}
244
258
else if (_spi_num == HSPI)
245
259
{
246
- periph_module_reset (PERIPH_SPI3_MODULE);
247
- periph_module_enable (PERIPH_SPI3_MODULE);
260
+ periph_ll_reset (PERIPH_SPI3_MODULE);
261
+ periph_ll_enable_clk_clear_rst (PERIPH_SPI3_MODULE);
248
262
}
249
263
#elif CONFIG_IDF_TARGET_ESP32
250
264
if (_spi_num == HSPI)
@@ -262,9 +276,9 @@ bool Arduino_ESP32SPI::begin(int32_t speed, int8_t dataMode)
262
276
DPORT_SET_PERI_REG_MASK (DPORT_PERIP_CLK_EN_REG, DPORT_SPI01_CLK_EN);
263
277
DPORT_CLEAR_PERI_REG_MASK (DPORT_PERIP_RST_EN_REG, DPORT_SPI01_RST);
264
278
}
265
- #elif CONFIG_IDF_TARGET_ESP32C3
266
- periph_module_reset (PERIPH_SPI2_MODULE);
267
- periph_module_enable (PERIPH_SPI2_MODULE);
279
+ #elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2
280
+ periph_ll_reset (PERIPH_SPI2_MODULE);
281
+ periph_ll_enable_clk_clear_rst (PERIPH_SPI2_MODULE);
268
282
#endif
269
283
270
284
SPI_MUTEX_LOCK ();
@@ -1027,4 +1041,4 @@ GFX_INLINE void Arduino_ESP32SPI::POLL(uint32_t len)
1027
1041
;
1028
1042
}
1029
1043
1030
- #endif // #if defined(ESP32)
1044
+ #endif // #if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)
0 commit comments