Skip to content

Commit 736d0e0

Browse files
1 parent 15c3fc0 commit 736d0e0

File tree

3 files changed

+73
-48
lines changed

3 files changed

+73
-48
lines changed

src/Arduino_GFX_Library.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Arduino_DataBus *create_default_Arduino_DataBus()
66
return new Arduino_NRFXSPI(DF_GFX_DC, DF_GFX_CS, DF_GFX_SCK, DF_GFX_MOSI, DF_GFX_MISO);
77
#elif defined(TARGET_RP2040)
88
return new Arduino_RPiPicoSPI(DF_GFX_DC, DF_GFX_CS, DF_GFX_SCK, DF_GFX_MOSI, DF_GFX_MISO, DF_GFX_SPI);
9-
#elif defined(ESP32)
9+
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)
1010
return new Arduino_ESP32SPI(DF_GFX_DC, DF_GFX_CS, DF_GFX_SCK, DF_GFX_MOSI, DF_GFX_MISO);
1111
#elif defined(ESP8266)
1212
return new Arduino_ESP8266SPI(DF_GFX_DC, DF_GFX_CS);

src/databus/Arduino_ESP32SPI.cpp

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
#include "Arduino_ESP32SPI.h"
66

7-
#if defined(ESP32)
7+
#if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)
88

99
struct spi_struct_t
1010
{
@@ -13,6 +13,10 @@ struct spi_struct_t
1313
SemaphoreHandle_t lock;
1414
#endif
1515
uint8_t num;
16+
int8_t sck;
17+
int8_t miso;
18+
int8_t mosi;
19+
int8_t ss;
1620
};
1721

1822
#if CONFIG_DISABLE_HAL_LOCKS
@@ -21,20 +25,26 @@ struct spi_struct_t
2125

2226
static spi_t _spi_bus_array[] = {
2327
#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}
2731
#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}
3040
#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}
3545
#endif
3646
};
37-
#else // !CONFIG_DISABLE_HAL_LOCKS
47+
#else
3848
#define SPI_MUTEX_LOCK() \
3949
do \
4050
{ \
@@ -43,30 +53,34 @@ static spi_t _spi_bus_array[] = {
4353

4454
static spi_t _spi_bus_array[] = {
4555
#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}
4959
#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}
5264
#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}
5468
#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}
5973
#endif
6074
};
61-
#endif // CONFIG_DISABLE_HAL_LOCKS
75+
#endif
6276

6377
/**
6478
* @brief Arduino_ESP32SPI
6579
*
6680
*/
6781
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)
7084
{
7185
#if CONFIG_IDF_TARGET_ESP32
7286
if (
@@ -238,13 +252,13 @@ bool Arduino_ESP32SPI::begin(int32_t speed, int8_t dataMode)
238252
#elif CONFIG_IDF_TARGET_ESP32S3
239253
if (_spi_num == FSPI)
240254
{
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);
243257
}
244258
else if (_spi_num == HSPI)
245259
{
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);
248262
}
249263
#elif CONFIG_IDF_TARGET_ESP32
250264
if (_spi_num == HSPI)
@@ -262,9 +276,9 @@ bool Arduino_ESP32SPI::begin(int32_t speed, int8_t dataMode)
262276
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI01_CLK_EN);
263277
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI01_RST);
264278
}
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);
268282
#endif
269283

270284
SPI_MUTEX_LOCK();
@@ -1027,4 +1041,4 @@ GFX_INLINE void Arduino_ESP32SPI::POLL(uint32_t len)
10271041
;
10281042
}
10291043

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)

src/databus/Arduino_ESP32SPI.h

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,35 @@
22

33
#include "Arduino_DataBus.h"
44

5-
#if defined(ESP32)
5+
#if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)
6+
67
#include "soc/spi_struct.h"
7-
#if CONFIG_IDF_TARGET_ESP32S3
8-
#if (!defined(ESP_ARDUINO_VERSION_MAJOR)) || (ESP_ARDUINO_VERSION_MAJOR < 3)
9-
#include "driver/periph_ctrl.h"
10-
#else
11-
#include "esp_private/periph_ctrl.h"
12-
#endif
8+
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
9+
#include "soc/dport_reg.h"
10+
#include "esp32/rom/ets_sys.h"
11+
#include "esp32/rom/gpio.h"
12+
#elif CONFIG_IDF_TARGET_ESP32S2
13+
#include "soc/dport_reg.h"
14+
#include "esp32s2/rom/ets_sys.h"
15+
#include "esp32s2/rom/gpio.h"
16+
#elif CONFIG_IDF_TARGET_ESP32S3
17+
#include "soc/dport_reg.h"
18+
#include "esp32s3/rom/ets_sys.h"
19+
#include "esp32s3/rom/gpio.h"
20+
#elif CONFIG_IDF_TARGET_ESP32C2
21+
#include "esp32c2/rom/ets_sys.h"
22+
#include "esp32c2/rom/gpio.h"
1323
#elif CONFIG_IDF_TARGET_ESP32C3
14-
#if (!defined(ESP_ARDUINO_VERSION_MAJOR)) || (ESP_ARDUINO_VERSION_MAJOR < 3)
15-
#include "driver/periph_ctrl.h"
16-
#else
17-
#include "esp_private/periph_ctrl.h"
18-
#endif
24+
#include "esp32c3/rom/ets_sys.h"
1925
#include "esp32c3/rom/gpio.h"
20-
#include "soc/periph_defs.h"
26+
#elif CONFIG_IDF_TARGET_ESP32C6
27+
#include "esp32c6/rom/ets_sys.h"
28+
#include "esp32c6/rom/gpio.h"
29+
#elif CONFIG_IDF_TARGET_ESP32H2
30+
#include "esp32h2/rom/ets_sys.h"
31+
#include "esp32h2/rom/gpio.h"
2132
#else
22-
#include "soc/dport_reg.h"
33+
#error Target CONFIG_IDF_TARGET is not supported
2334
#endif
2435

2536
#ifndef ESP32SPI_MAX_PIXELS_AT_ONCE
@@ -95,4 +106,4 @@ class Arduino_ESP32SPI : public Arduino_DataBus
95106
uint16_t _data_buf_bit_idx = 0;
96107
};
97108

98-
#endif // #if defined(ESP32)
109+
#endif // #if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3)

0 commit comments

Comments
 (0)