41
41
#include "esp_intr_alloc.h"
42
42
#include "soc/i2c_reg.h"
43
43
#include "soc/i2c_struct.h"
44
+ #include "soc/periph_defs.h"
44
45
#include "hal/i2c_ll.h"
45
46
#include "hal/clk_gate_ll.h"
46
47
#include "esp32-hal-log.h"
49
50
50
51
#define I2C_SLAVE_USE_RX_QUEUE 0 // 1: Queue, 0: RingBuffer
51
52
53
+ #if !defined(CONFIG_IDF_TARGET_ESP32P4 )
52
54
#if SOC_HP_I2C_NUM > 1
53
55
#define I2C_SCL_IDX (p ) ((p == 0) ? I2CEXT0_SCL_OUT_IDX : ((p == 1) ? I2CEXT1_SCL_OUT_IDX : 0))
54
56
#define I2C_SDA_IDX (p ) ((p == 0) ? I2CEXT0_SDA_OUT_IDX : ((p == 1) ? I2CEXT1_SDA_OUT_IDX : 0))
55
57
#else
56
58
#define I2C_SCL_IDX (p ) I2CEXT0_SCL_OUT_IDX
57
59
#define I2C_SDA_IDX (p ) I2CEXT0_SDA_OUT_IDX
58
60
#endif
61
+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
62
+
63
+ #ifdef CONFIG_IDF_TARGET_ESP32P4
64
+ #define I2C_SCL_IDX (p ) ((p == 0) ? I2C0_SCL_PAD_OUT_IDX : ((p == 1) ? I2C1_SCL_PAD_OUT_IDX : 0))
65
+ #define I2C_SDA_IDX (p ) ((p == 0) ? I2C0_SDA_PAD_OUT_IDX : ((p == 1) ? I2C1_SDA_PAD_OUT_IDX : 0))
66
+ #endif // ifdef CONFIG_IDF_TARGET_ESP32P4
59
67
60
68
#if CONFIG_IDF_TARGET_ESP32
61
69
#define I2C_TXFIFO_WM_INT_ENA I2C_TXFIFO_EMPTY_INT_ENA
@@ -173,7 +181,7 @@ static inline void i2c_ll_stretch_clr(i2c_dev_t *hw) {
173
181
}
174
182
175
183
static inline bool i2c_ll_slave_addressed (i2c_dev_t * hw ) {
176
- #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2
184
+ #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4
177
185
return hw -> sr .slave_addressed ;
178
186
#else
179
187
return hw -> status_reg .slave_addressed ;
@@ -182,7 +190,7 @@ static inline bool i2c_ll_slave_addressed(i2c_dev_t *hw) {
182
190
183
191
static inline bool i2c_ll_slave_rw (i2c_dev_t * hw ) //not exposed by hal_ll
184
192
{
185
- #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2
193
+ #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4
186
194
return hw -> sr .slave_rw ;
187
195
#else
188
196
return hw -> status_reg .slave_rw ;
@@ -306,14 +314,15 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
306
314
frequency = 100000L ;
307
315
}
308
316
frequency = (frequency * 5 ) / 4 ;
309
-
317
+ #if !defined( CONFIG_IDF_TARGET_ESP32P4 )
310
318
if (i2c -> num == 0 ) {
311
319
periph_ll_enable_clk_clear_rst (PERIPH_I2C0_MODULE );
312
320
#if SOC_HP_I2C_NUM > 1
313
321
} else {
314
322
periph_ll_enable_clk_clear_rst (PERIPH_I2C1_MODULE );
315
323
#endif
316
324
}
325
+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
317
326
318
327
i2c_ll_slave_init (i2c -> dev );
319
328
i2c_ll_slave_set_fifo_mode (i2c -> dev , true);
@@ -341,12 +350,22 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
341
350
342
351
if (!i2c -> intr_handle ) {
343
352
uint32_t flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED ;
353
+ #if !defined(CONFIG_IDF_TARGET_ESP32P4 )
344
354
if (i2c -> num == 0 ) {
345
355
ret = esp_intr_alloc (ETS_I2C_EXT0_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
346
356
#if SOC_HP_I2C_NUM > 1
347
357
} else {
348
358
ret = esp_intr_alloc (ETS_I2C_EXT1_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
349
359
#endif
360
+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
361
+ #ifdef CONFIG_IDF_TARGET_ESP32P4
362
+ if (i2c -> num == 0 ) {
363
+ ret = esp_intr_alloc (ETS_I2C0_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
364
+ #if SOC_I2C_NUM > 1
365
+ } else {
366
+ ret = esp_intr_alloc (ETS_I2C1_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
367
+ #endif
368
+ #endif // #ifdef CONFIG_IDF_TARGET_ESP32P4
350
369
}
351
370
352
371
if (ret != ESP_OK ) {
0 commit comments