forked from espressif/esp-idf
dedic_gpio: support on esp32s3
This commit is contained in:
@@ -64,7 +64,7 @@ struct dedic_gpio_bundle_t {
|
|||||||
uint32_t out_offset; // offset in the bank (seen from output channel)
|
uint32_t out_offset; // offset in the bank (seen from output channel)
|
||||||
uint32_t in_offset; // offset in the bank (seen from input channel)
|
uint32_t in_offset; // offset in the bank (seen from input channel)
|
||||||
size_t nr_gpio; // number of GPIOs in the gpio_array
|
size_t nr_gpio; // number of GPIOs in the gpio_array
|
||||||
int gpio_array[0]; // array of GPIO numbers (configured by user)
|
int gpio_array[]; // array of GPIO numbers (configured by user)
|
||||||
};
|
};
|
||||||
|
|
||||||
static esp_err_t dedic_gpio_build_platform(uint32_t core_id)
|
static esp_err_t dedic_gpio_build_platform(uint32_t core_id)
|
||||||
|
@@ -30,10 +30,10 @@ typedef struct {
|
|||||||
const int *gpio_array; /*!< Array of GPIO numbers, gpio_array[0] ~ gpio_array[size-1] <=> low_dedic_channel_num ~ high_dedic_channel_num */
|
const int *gpio_array; /*!< Array of GPIO numbers, gpio_array[0] ~ gpio_array[size-1] <=> low_dedic_channel_num ~ high_dedic_channel_num */
|
||||||
size_t array_size; /*!< Number of GPIOs in gpio_array */
|
size_t array_size; /*!< Number of GPIOs in gpio_array */
|
||||||
struct {
|
struct {
|
||||||
int in_en: 1; /*!< Enable input */
|
unsigned int in_en: 1; /*!< Enable input */
|
||||||
int in_invert: 1; /*!< Invert input signal */
|
unsigned int in_invert: 1; /*!< Invert input signal */
|
||||||
int out_en: 1; /*!< Enable output */
|
unsigned int out_en: 1; /*!< Enable output */
|
||||||
int out_invert: 1; /*!< Invert output signal */
|
unsigned int out_invert: 1; /*!< Invert output signal */
|
||||||
} flags; /*!< Flags to control specific behaviour of GPIO bundle */
|
} flags; /*!< Flags to control specific behaviour of GPIO bundle */
|
||||||
} dedic_gpio_bundle_config_t;
|
} dedic_gpio_bundle_config_t;
|
||||||
|
|
||||||
|
@@ -58,8 +58,6 @@ TEST_CASE("Dedicated GPIO bundle install/uninstall", "[dedic_gpio]")
|
|||||||
|
|
||||||
#define TEST_GPIO_GROUP_SIZE (4)
|
#define TEST_GPIO_GROUP_SIZE (4)
|
||||||
|
|
||||||
#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S3)
|
|
||||||
// TODO ESP32-S3 IDF-3387
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SemaphoreHandle_t sem;
|
SemaphoreHandle_t sem;
|
||||||
const int gpios[TEST_GPIO_GROUP_SIZE];
|
const int gpios[TEST_GPIO_GROUP_SIZE];
|
||||||
@@ -161,8 +159,6 @@ TEST_CASE("Dedicated GPIO run on multiple CPU core", "[dedic_gpio]")
|
|||||||
vSemaphoreDelete(sem);
|
vSemaphoreDelete(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S3)
|
|
||||||
|
|
||||||
IRAM_ATTR static void test_dedic_gpio_isr_callback(void *args)
|
IRAM_ATTR static void test_dedic_gpio_isr_callback(void *args)
|
||||||
{
|
{
|
||||||
SemaphoreHandle_t sem = (SemaphoreHandle_t)args;
|
SemaphoreHandle_t sem = (SemaphoreHandle_t)args;
|
||||||
|
@@ -203,12 +203,7 @@ static inline void cpu_ll_write_dedic_gpio_all(uint32_t value)
|
|||||||
|
|
||||||
static inline void cpu_ll_write_dedic_gpio_mask(uint32_t mask, uint32_t value)
|
static inline void cpu_ll_write_dedic_gpio_mask(uint32_t mask, uint32_t value)
|
||||||
{
|
{
|
||||||
// ToDo: check if ESP32-S3 supports mask write instruction
|
asm volatile("ee.wr_mask_gpio_out %0, %1" : : "r"(value), "r"(mask):);
|
||||||
uint32_t orig = 0;
|
|
||||||
asm volatile("rur.gpio_out %0" : "=r"(orig) : :);
|
|
||||||
orig &= ~mask;
|
|
||||||
orig |= value & mask;
|
|
||||||
asm volatile("wur.gpio_out %0"::"r"(orig):);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -25,26 +25,42 @@ const dedic_gpio_signal_conn_t dedic_gpio_periph_signals = {
|
|||||||
[1] = PRO_ALONEGPIO_IN1_IDX,
|
[1] = PRO_ALONEGPIO_IN1_IDX,
|
||||||
[2] = PRO_ALONEGPIO_IN2_IDX,
|
[2] = PRO_ALONEGPIO_IN2_IDX,
|
||||||
[3] = PRO_ALONEGPIO_IN3_IDX,
|
[3] = PRO_ALONEGPIO_IN3_IDX,
|
||||||
|
[4] = PRO_ALONEGPIO_IN4_IDX,
|
||||||
|
[5] = PRO_ALONEGPIO_IN5_IDX,
|
||||||
|
[6] = PRO_ALONEGPIO_IN6_IDX,
|
||||||
|
[7] = PRO_ALONEGPIO_IN7_IDX,
|
||||||
},
|
},
|
||||||
.out_sig_per_channel = {
|
.out_sig_per_channel = {
|
||||||
[0] = PRO_ALONEGPIO_OUT0_IDX,
|
[0] = PRO_ALONEGPIO_OUT0_IDX,
|
||||||
[1] = PRO_ALONEGPIO_OUT1_IDX,
|
[1] = PRO_ALONEGPIO_OUT1_IDX,
|
||||||
[2] = PRO_ALONEGPIO_OUT2_IDX,
|
[2] = PRO_ALONEGPIO_OUT2_IDX,
|
||||||
[3] = PRO_ALONEGPIO_OUT3_IDX,
|
[3] = PRO_ALONEGPIO_OUT3_IDX,
|
||||||
|
[4] = PRO_ALONEGPIO_OUT4_IDX,
|
||||||
|
[5] = PRO_ALONEGPIO_OUT5_IDX,
|
||||||
|
[6] = PRO_ALONEGPIO_OUT6_IDX,
|
||||||
|
[7] = PRO_ALONEGPIO_OUT7_IDX,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
.in_sig_per_channel = {
|
.in_sig_per_channel = {
|
||||||
[0] = PRO_ALONEGPIO_IN4_IDX,
|
[0] = CORE1_GPIO_IN0_IDX,
|
||||||
[1] = PRO_ALONEGPIO_IN5_IDX,
|
[1] = CORE1_GPIO_IN1_IDX,
|
||||||
[2] = PRO_ALONEGPIO_IN6_IDX,
|
[2] = CORE1_GPIO_IN2_IDX,
|
||||||
[3] = PRO_ALONEGPIO_IN7_IDX,
|
[3] = CORE1_GPIO_IN3_IDX,
|
||||||
|
[4] = CORE1_GPIO_IN4_IDX,
|
||||||
|
[5] = CORE1_GPIO_IN5_IDX,
|
||||||
|
[6] = CORE1_GPIO_IN6_IDX,
|
||||||
|
[7] = CORE1_GPIO_IN7_IDX,
|
||||||
},
|
},
|
||||||
.out_sig_per_channel = {
|
.out_sig_per_channel = {
|
||||||
[0] = PRO_ALONEGPIO_OUT4_IDX,
|
[0] = CORE1_GPIO_OUT0_IDX,
|
||||||
[1] = PRO_ALONEGPIO_OUT5_IDX,
|
[1] = CORE1_GPIO_OUT1_IDX,
|
||||||
[2] = PRO_ALONEGPIO_OUT6_IDX,
|
[2] = CORE1_GPIO_OUT2_IDX,
|
||||||
[3] = PRO_ALONEGPIO_OUT7_IDX,
|
[3] = CORE1_GPIO_OUT3_IDX,
|
||||||
|
[4] = CORE1_GPIO_OUT4_IDX,
|
||||||
|
[5] = CORE1_GPIO_OUT5_IDX,
|
||||||
|
[6] = CORE1_GPIO_OUT6_IDX,
|
||||||
|
[7] = CORE1_GPIO_OUT7_IDX,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@@ -44,8 +44,8 @@
|
|||||||
#include "gpio_caps.h"
|
#include "gpio_caps.h"
|
||||||
|
|
||||||
/*-------------------------- Dedicated GPIO CAPS -----------------------------*/
|
/*-------------------------- Dedicated GPIO CAPS -----------------------------*/
|
||||||
#define SOC_DEDIC_GPIO_OUT_CHANNELS_NUM (4) /*!< 4 outward channels on each CPU core */
|
#define SOC_DEDIC_GPIO_OUT_CHANNELS_NUM (8) /*!< 8 outward channels on each CPU core */
|
||||||
#define SOC_DEDIC_GPIO_IN_CHANNELS_NUM (4) /*!< 4 inward channels on each CPU core */
|
#define SOC_DEDIC_GPIO_IN_CHANNELS_NUM (8) /*!< 8 inward channels on each CPU core */
|
||||||
|
|
||||||
/*-------------------------- I2C CAPS ----------------------------------------*/
|
/*-------------------------- I2C CAPS ----------------------------------------*/
|
||||||
#include "i2c_caps.h"
|
#include "i2c_caps.h"
|
||||||
|
Reference in New Issue
Block a user