esp32: Use capability defines to configure features.
This updates esp32 code where appropriate to replace ifdef's based on a list of specific chips with a feature SOC_* definition. This should simplify adding new esp32-* chips in future, deferring chip feature support to the IDF. Signed-off-by: Andrew Leech <andrew@alelec.net>
This commit is contained in:
committed by
Damien George
parent
fdd606dd53
commit
9441ce6e3c
@@ -33,28 +33,26 @@
|
|||||||
#define DEFAULT_VREF 1100
|
#define DEFAULT_VREF 1100
|
||||||
|
|
||||||
void madcblock_bits_helper(machine_adc_block_obj_t *self, mp_int_t bits) {
|
void madcblock_bits_helper(machine_adc_block_obj_t *self, mp_int_t bits) {
|
||||||
|
if (bits < SOC_ADC_RTC_MIN_BITWIDTH && bits > SOC_ADC_RTC_MAX_BITWIDTH) {
|
||||||
|
// Invalid value for the current chip, raise exception in the switch below.
|
||||||
|
bits = -1;
|
||||||
|
}
|
||||||
switch (bits) {
|
switch (bits) {
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
|
||||||
case 9:
|
case 9:
|
||||||
self->width = ADC_WIDTH_BIT_9;
|
self->width = ADC_BITWIDTH_9;
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
self->width = ADC_WIDTH_BIT_10;
|
self->width = ADC_BITWIDTH_10;
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
self->width = ADC_WIDTH_BIT_11;
|
self->width = ADC_BITWIDTH_11;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3
|
|
||||||
case 12:
|
case 12:
|
||||||
self->width = ADC_WIDTH_BIT_12;
|
self->width = ADC_BITWIDTH_12;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32S2
|
|
||||||
case 13:
|
case 13:
|
||||||
self->width = ADC_WIDTH_BIT_13;
|
self->width = ADC_BITWIDTH_13;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
mp_raise_ValueError(MP_ERROR_TEXT("invalid bits"));
|
mp_raise_ValueError(MP_ERROR_TEXT("invalid bits"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#define ADCBLOCK1 (&madcblock_obj[0])
|
#define ADCBLOCK1 (&madcblock_obj[0])
|
||||||
#define ADCBLOCK2 (&madcblock_obj[1])
|
#define ADCBLOCK2 (&madcblock_obj[1])
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
#if SOC_ADC_RTC_MIN_BITWIDTH <= 9 && SOC_ADC_RTC_MAX_BITWIDTH >= 11
|
||||||
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_9_10_11 \
|
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_9_10_11 \
|
||||||
{ MP_ROM_QSTR(MP_QSTR_WIDTH_9BIT), MP_ROM_INT(9) }, \
|
{ MP_ROM_QSTR(MP_QSTR_WIDTH_9BIT), MP_ROM_INT(9) }, \
|
||||||
{ MP_ROM_QSTR(MP_QSTR_WIDTH_10BIT), MP_ROM_INT(10) }, \
|
{ MP_ROM_QSTR(MP_QSTR_WIDTH_10BIT), MP_ROM_INT(10) }, \
|
||||||
@@ -44,14 +44,14 @@
|
|||||||
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_9_10_11
|
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_9_10_11
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3
|
#if SOC_ADC_RTC_MIN_BITWIDTH <= 12 && SOC_ADC_RTC_MAX_BITWIDTH >= 12
|
||||||
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_12 \
|
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_12 \
|
||||||
{ MP_ROM_QSTR(MP_QSTR_WIDTH_12BIT), MP_ROM_INT(12) },
|
{ MP_ROM_QSTR(MP_QSTR_WIDTH_12BIT), MP_ROM_INT(12) },
|
||||||
#else
|
#else
|
||||||
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_12
|
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_12
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32S2
|
#if SOC_ADC_RTC_MIN_BITWIDTH <= 13 && SOC_ADC_RTC_MAX_BITWIDTH >= 13
|
||||||
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_13 \
|
#define MICROPY_PY_MACHINE_ADC_CLASS_CONSTANTS_WIDTH_13 \
|
||||||
{ MP_ROM_QSTR(MP_QSTR_WIDTH_13BIT), MP_ROM_INT(13) },
|
{ MP_ROM_QSTR(MP_QSTR_WIDTH_13BIT), MP_ROM_INT(13) },
|
||||||
#else
|
#else
|
||||||
@@ -87,13 +87,21 @@ static const machine_adc_obj_t madc_obj[] = {
|
|||||||
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_7, GPIO_NUM_27},
|
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_7, GPIO_NUM_27},
|
||||||
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_8, GPIO_NUM_25},
|
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_8, GPIO_NUM_25},
|
||||||
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_9, GPIO_NUM_26},
|
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_9, GPIO_NUM_26},
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#elif CONFIG_IDF_TARGET_ESP32C3
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_0, GPIO_NUM_0},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_0, GPIO_NUM_0},
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_1, GPIO_NUM_1},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_1, GPIO_NUM_1},
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_2, GPIO_NUM_2},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_2, GPIO_NUM_2},
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_3, GPIO_NUM_3},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_3, GPIO_NUM_3},
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_4, GPIO_NUM_4},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_4, GPIO_NUM_4},
|
||||||
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_0, GPIO_NUM_5},
|
{{&machine_adc_type}, ADCBLOCK2, ADC_CHANNEL_0, GPIO_NUM_5},
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32C6
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_0, GPIO_NUM_0},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_1, GPIO_NUM_1},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_2, GPIO_NUM_2},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_3, GPIO_NUM_3},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_4, GPIO_NUM_4},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_5, GPIO_NUM_5},
|
||||||
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_6, GPIO_NUM_6},
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_0, GPIO_NUM_1},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_0, GPIO_NUM_1},
|
||||||
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_1, GPIO_NUM_2},
|
{{&machine_adc_type}, ADCBLOCK1, ADC_CHANNEL_1, GPIO_NUM_2},
|
||||||
|
|||||||
@@ -32,12 +32,9 @@
|
|||||||
#include "driver/adc.h"
|
#include "driver/adc.h"
|
||||||
|
|
||||||
machine_adc_block_obj_t madcblock_obj[] = {
|
machine_adc_block_obj_t madcblock_obj[] = {
|
||||||
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3
|
{{&machine_adc_block_type}, ADC_UNIT_1, SOC_ADC_RTC_MAX_BITWIDTH, -1, {0}},
|
||||||
{{&machine_adc_block_type}, ADC_UNIT_1, 12, -1, {0}},
|
#if SOC_ADC_PERIPH_NUM > 1
|
||||||
{{&machine_adc_block_type}, ADC_UNIT_2, 12, -1, {0}},
|
{{&machine_adc_block_type}, ADC_UNIT_2, SOC_ADC_RTC_MAX_BITWIDTH, -1, {0}},
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2
|
|
||||||
{{&machine_adc_block_type}, ADC_UNIT_1, 13, -1, {0}},
|
|
||||||
{{&machine_adc_block_type}, ADC_UNIT_2, 13, -1, {0}},
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
// This is a translation of the cycle counter implementation in ports/stm32/machine_bitstream.c.
|
// This is a translation of the cycle counter implementation in ports/stm32/machine_bitstream.c.
|
||||||
static void IRAM_ATTR machine_bitstream_high_low_bitbang(mp_hal_pin_obj_t pin, uint32_t *timing_ns, const uint8_t *buf, size_t len) {
|
static void IRAM_ATTR machine_bitstream_high_low_bitbang(mp_hal_pin_obj_t pin, uint32_t *timing_ns, const uint8_t *buf, size_t len) {
|
||||||
uint32_t pin_mask, gpio_reg_set, gpio_reg_clear;
|
uint32_t pin_mask, gpio_reg_set, gpio_reg_clear;
|
||||||
#if !CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if SOC_GPIO_PIN_COUNT > 32
|
||||||
if (pin >= 32) {
|
if (pin >= 32) {
|
||||||
pin_mask = 1 << (pin - 32);
|
pin_mask = 1 << (pin - 32);
|
||||||
gpio_reg_set = GPIO_OUT1_W1TS_REG;
|
gpio_reg_set = GPIO_OUT1_W1TS_REG;
|
||||||
|
|||||||
@@ -49,9 +49,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3
|
#if SOC_I2C_SUPPORT_XTAL
|
||||||
#define I2C_SCLK_FREQ XTAL_CLK_FREQ
|
#define I2C_SCLK_FREQ XTAL_CLK_FREQ
|
||||||
#elif CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2
|
#elif SOC_I2C_SUPPORT_APB
|
||||||
#define I2C_SCLK_FREQ APB_CLK_FREQ
|
#define I2C_SCLK_FREQ APB_CLK_FREQ
|
||||||
#else
|
#else
|
||||||
#error "unsupported I2C for ESP32 SoC variant"
|
#error "unsupported I2C for ESP32 SoC variant"
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
#include "modesp32.h"
|
#include "modesp32.h"
|
||||||
#include "genhdr/pins.h"
|
#include "genhdr/pins.h"
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if SOC_USB_SERIAL_JTAG_SUPPORTED
|
||||||
#include "soc/usb_serial_jtag_reg.h"
|
#include "soc/usb_serial_jtag_reg.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
#define MICROPY_PY_MACHINE_SDCARD_ENTRY
|
#define MICROPY_PY_MACHINE_SDCARD_ENTRY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#if SOC_TOUCH_SENSOR_SUPPORTED
|
||||||
#define MICROPY_PY_MACHINE_TOUCH_PAD_ENTRY { MP_ROM_QSTR(MP_QSTR_TouchPad), MP_ROM_PTR(&machine_touchpad_type) },
|
#define MICROPY_PY_MACHINE_TOUCH_PAD_ENTRY { MP_ROM_QSTR(MP_QSTR_TouchPad), MP_ROM_PTR(&machine_touchpad_type) },
|
||||||
#else
|
#else
|
||||||
#define MICROPY_PY_MACHINE_TOUCH_PAD_ENTRY
|
#define MICROPY_PY_MACHINE_TOUCH_PAD_ENTRY
|
||||||
@@ -147,30 +147,34 @@ static void machine_sleep_helper(wake_type_t wake_type, size_t n_args, const mp_
|
|||||||
esp_sleep_enable_timer_wakeup(((uint64_t)expiry) * 1000);
|
esp_sleep_enable_timer_wakeup(((uint64_t)expiry) * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !(CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6)
|
#if SOC_PM_SUPPORT_EXT0_WAKEUP
|
||||||
|
|
||||||
if (machine_rtc_config.ext0_pin != -1 && (machine_rtc_config.ext0_wake_types & wake_type)) {
|
if (machine_rtc_config.ext0_pin != -1 && (machine_rtc_config.ext0_wake_types & wake_type)) {
|
||||||
esp_sleep_enable_ext0_wakeup(machine_rtc_config.ext0_pin, machine_rtc_config.ext0_level ? 1 : 0);
|
esp_sleep_enable_ext0_wakeup(machine_rtc_config.ext0_pin, machine_rtc_config.ext0_level ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SOC_PM_SUPPORT_EXT1_WAKEUP
|
||||||
if (machine_rtc_config.ext1_pins != 0) {
|
if (machine_rtc_config.ext1_pins != 0) {
|
||||||
esp_sleep_enable_ext1_wakeup(
|
esp_sleep_enable_ext1_wakeup(
|
||||||
machine_rtc_config.ext1_pins,
|
machine_rtc_config.ext1_pins,
|
||||||
machine_rtc_config.ext1_level ? ESP_EXT1_WAKEUP_ANY_HIGH : ESP_EXT1_WAKEUP_ALL_LOW);
|
machine_rtc_config.ext1_level ? ESP_EXT1_WAKEUP_ANY_HIGH : ESP_EXT1_WAKEUP_ALL_LOW);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SOC_TOUCH_SENSOR_SUPPORTED
|
||||||
if (machine_rtc_config.wake_on_touch) {
|
if (machine_rtc_config.wake_on_touch) {
|
||||||
if (esp_sleep_enable_touchpad_wakeup() != ESP_OK) {
|
if (esp_sleep_enable_touchpad_wakeup() != ESP_OK) {
|
||||||
mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("esp_sleep_enable_touchpad_wakeup() failed"));
|
mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("esp_sleep_enable_touchpad_wakeup() failed"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SOC_ULP_SUPPORTED
|
||||||
if (machine_rtc_config.wake_on_ulp) {
|
if (machine_rtc_config.wake_on_ulp) {
|
||||||
if (esp_sleep_enable_ulp_wakeup() != ESP_OK) {
|
if (esp_sleep_enable_ulp_wakeup() != ESP_OK) {
|
||||||
mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("esp_sleep_enable_ulp_wakeup() failed"));
|
mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("esp_sleep_enable_ulp_wakeup() failed"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (wake_type) {
|
switch (wake_type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user