mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
cpu/esp32: fix compilation with gcc 12.2
This commit is contained in:
parent
3d1f3fea46
commit
0de2570802
@ -207,6 +207,13 @@ CFLAGS += -D_CONST=const
|
|||||||
# TODO no relaxation yet
|
# TODO no relaxation yet
|
||||||
ifneq (,$(filter riscv%,$(TARGET_ARCH)))
|
ifneq (,$(filter riscv%,$(TARGET_ARCH)))
|
||||||
CFLAGS += -mno-relax -march=rv32imc -mabi=ilp32 -DRISCV_NO_RELAX
|
CFLAGS += -mno-relax -march=rv32imc -mabi=ilp32 -DRISCV_NO_RELAX
|
||||||
|
GCC_NEW_RISCV_ISA ?= $(shell echo "typedef int dont_be_pedantic;" | \
|
||||||
|
$(TARGET_ARCH)-gcc -march=rv32imac -mabi=ilp32 \
|
||||||
|
-misa-spec=2.2 -E - > /dev/null 2>&1 && \
|
||||||
|
echo 1 || echo 0)
|
||||||
|
ifeq (1,$(GCC_NEW_RISCV_ISA))
|
||||||
|
CFLAGS += -misa-spec=2.2
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter xtensa%,$(TARGET_ARCH)))
|
ifneq (,$(filter xtensa%,$(TARGET_ARCH)))
|
||||||
@ -243,6 +250,12 @@ endif
|
|||||||
|
|
||||||
LINKFLAGS += -nostdlib -lgcc -Wl,-gc-sections
|
LINKFLAGS += -nostdlib -lgcc -Wl,-gc-sections
|
||||||
|
|
||||||
|
# all ESP32x SoCs have to load executable code into IRAM
|
||||||
|
# warning 'LOAD segment with RWX permissions' has to be disabled therefore
|
||||||
|
ifeq (1,$(GCC_NEW_RISCV_ISA))
|
||||||
|
LINKFLAGS += -Wl,--no-warn-rwx-segments
|
||||||
|
endif
|
||||||
|
|
||||||
# Libraries needed when using esp_wifi_any pseudomodule
|
# Libraries needed when using esp_wifi_any pseudomodule
|
||||||
ifneq (,$(filter esp_wifi_any,$(USEMODULE)))
|
ifneq (,$(filter esp_wifi_any,$(USEMODULE)))
|
||||||
LINKFLAGS += -L$(ESP32_SDK_LIB_WIFI_DIR)/$(CPU_FAM)
|
LINKFLAGS += -L$(ESP32_SDK_LIB_WIFI_DIR)/$(CPU_FAM)
|
||||||
|
@ -171,6 +171,13 @@ ifneq (,$(filter riscv32%,$(TARGET_ARCH)))
|
|||||||
CFLAGS += -Wno-error=format=
|
CFLAGS += -Wno-error=format=
|
||||||
CFLAGS += -nostartfiles
|
CFLAGS += -nostartfiles
|
||||||
CFLAGS += -Wno-format
|
CFLAGS += -Wno-format
|
||||||
|
GCC_NEW_RISCV_ISA ?= $(shell echo "typedef int dont_be_pedantic;" | \
|
||||||
|
$(TARGET_ARCH)-gcc -march=rv32imac -mabi=ilp32 \
|
||||||
|
-misa-spec=2.2 -E - > /dev/null 2>&1 && \
|
||||||
|
echo 1 || echo 0)
|
||||||
|
ifeq (1,$(GCC_NEW_RISCV_ISA))
|
||||||
|
CFLAGS += -misa-spec=2.2
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter xtensa%,$(TARGET_ARCH)))
|
ifneq (,$(filter xtensa%,$(TARGET_ARCH)))
|
||||||
|
@ -42,4 +42,11 @@ ifneq (,$(filter riscv32%,$(TARGET_ARCH)))
|
|||||||
CFLAGS += -Wno-error=format=
|
CFLAGS += -Wno-error=format=
|
||||||
CFLAGS += -nostartfiles
|
CFLAGS += -nostartfiles
|
||||||
CFLAGS += -Wno-format
|
CFLAGS += -Wno-format
|
||||||
|
GCC_NEW_RISCV_ISA ?= $(shell echo "typedef int dont_be_pedantic;" | \
|
||||||
|
$(TARGET_ARCH)-gcc -march=rv32imac -mabi=ilp32 \
|
||||||
|
-misa-spec=2.2 -E - > /dev/null 2>&1 && \
|
||||||
|
echo 1 || echo 0)
|
||||||
|
ifeq (1,$(GCC_NEW_RISCV_ISA))
|
||||||
|
CFLAGS += -misa-spec=2.2
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -111,7 +111,7 @@ void IRAM_ATTR esp_log_writev(esp_log_level_t level,
|
|||||||
* We use the log level set for the given tag instead of using
|
* We use the log level set for the given tag instead of using
|
||||||
* the given log level.
|
* the given log level.
|
||||||
*/
|
*/
|
||||||
esp_log_level_t act_level = LOG_DEBUG;
|
esp_log_level_t act_level = (esp_log_level_t)LOG_DEBUG;
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < ARRAY_SIZE(_log_levels); i++) {
|
for (i = 0; i < ARRAY_SIZE(_log_levels); i++) {
|
||||||
if (strcmp(tag, _log_levels[i].tag) == 0) {
|
if (strcmp(tag, _log_levels[i].tag) == 0) {
|
||||||
|
@ -212,16 +212,6 @@ typedef enum {
|
|||||||
#define GPIO_DRIVE_20 GPIO_DRIVE_STRONG /**< 20 mA (default) */
|
#define GPIO_DRIVE_20 GPIO_DRIVE_STRONG /**< 20 mA (default) */
|
||||||
#define GPIO_DRIVE_30 GPIO_DRIVE_STRONGEST /**< 30 mA */
|
#define GPIO_DRIVE_30 GPIO_DRIVE_STRONGEST /**< 30 mA */
|
||||||
|
|
||||||
#define HAVE_GPIO_IRQ_TRIG_T
|
|
||||||
typedef enum {
|
|
||||||
GPIO_TRIGGER_NONE = 0,
|
|
||||||
GPIO_TRIGGER_EDGE_RISING = 1,
|
|
||||||
GPIO_TRIGGER_EDGE_FALLING = 2,
|
|
||||||
GPIO_TRIGGER_EDGE_BOTH = 3,
|
|
||||||
GPIO_TRIGGER_LEVEL_LOW = 4,
|
|
||||||
GPIO_TRIGGER_LEVEL_HIGH = 5
|
|
||||||
} gpio_irq_trig_t;
|
|
||||||
|
|
||||||
/* END: GPIO LL overwrites */
|
/* END: GPIO LL overwrites */
|
||||||
|
|
||||||
#endif /* ndef DOXYGEN */
|
#endif /* ndef DOXYGEN */
|
||||||
|
@ -131,16 +131,22 @@ int adc_init(adc_t line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
||||||
|
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
|
||||||
/* initialize the ADC1 unit if needed */
|
/* initialize the ADC1 unit if needed */
|
||||||
_adc1_ctrl_init();
|
_adc1_ctrl_init();
|
||||||
/* set the attenuation and configure its associated GPIO pin mux */
|
/* set the attenuation and configure its associated GPIO pin mux */
|
||||||
adc1_config_channel_atten(_adc_hw[rtcio].adc_channel, ADC_ATTEN_DB_11);
|
adc1_config_channel_atten((adc1_channel_t)_adc_hw[rtcio].adc_channel,
|
||||||
|
ADC_ATTEN_DB_11);
|
||||||
}
|
}
|
||||||
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
||||||
|
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
|
||||||
/* initialize the ADC2 unit if needed */
|
/* initialize the ADC2 unit if needed */
|
||||||
_adc2_ctrl_init();
|
_adc2_ctrl_init();
|
||||||
/* set the attenuation and configure its associated GPIO pin mux */
|
/* set the attenuation and configure its associated GPIO pin mux */
|
||||||
adc2_config_channel_atten(_adc_hw[rtcio].adc_channel, ADC_ATTEN_DB_11);
|
adc2_config_channel_atten((adc2_channel_t)_adc_hw[rtcio].adc_channel,
|
||||||
|
ADC_ATTEN_DB_11);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -165,13 +171,17 @@ int32_t adc_sample(adc_t line, adc_res_t res)
|
|||||||
|
|
||||||
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
||||||
adc1_config_width(_adc_esp_res_map[res].res);
|
adc1_config_width(_adc_esp_res_map[res].res);
|
||||||
raw = adc1_get_raw(_adc_hw[rtcio].adc_channel);
|
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
|
||||||
|
raw = adc1_get_raw((adc1_channel_t)_adc_hw[rtcio].adc_channel);
|
||||||
if (raw < 0) {
|
if (raw < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
||||||
if (adc2_get_raw(_adc_hw[rtcio].adc_channel,
|
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
|
||||||
|
if (adc2_get_raw((adc2_channel_t)_adc_hw[rtcio].adc_channel,
|
||||||
_adc_esp_res_map[res].res, &raw) < 0) {
|
_adc_esp_res_map[res].res, &raw) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -189,10 +199,14 @@ int adc_set_attenuation(adc_t line, adc_atten_t atten)
|
|||||||
assert(rtcio != RTCIO_NA);
|
assert(rtcio != RTCIO_NA);
|
||||||
|
|
||||||
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
|
||||||
return adc1_config_channel_atten(_adc_hw[rtcio].adc_channel, atten);
|
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
|
||||||
|
return adc1_config_channel_atten((adc1_channel_t)_adc_hw[rtcio].adc_channel, atten);
|
||||||
}
|
}
|
||||||
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
|
||||||
return adc2_config_channel_atten(_adc_hw[rtcio].adc_channel, atten);
|
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
|
||||||
|
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
|
||||||
|
return adc2_config_channel_atten((adc2_channel_t)_adc_hw[rtcio].adc_channel, atten);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -76,8 +76,8 @@ void IRAM_ATTR esp_flashpage_init(void)
|
|||||||
p_addr, 64, p_numof, 0);
|
p_addr, 64, p_numof, 0);
|
||||||
Cache_Resume_ICache(autoload);
|
Cache_Resume_ICache(autoload);
|
||||||
|
|
||||||
DEBUG("%s DCache MMU set paddr=%08x vaddr=%08x size=%d n=%u\n", __func__,
|
DEBUG("%s DCache MMU set paddr=%08"PRIx32" vaddr=%08"PRIx32" size=%d n=%"PRIu32"\n",
|
||||||
p_addr, (uint32_t)&_fp_mem_start, CONFIG_ESP_FLASHPAGE_CAPACITY,
|
__func__, p_addr, (uint32_t)&_fp_mem_start, CONFIG_ESP_FLASHPAGE_CAPACITY,
|
||||||
p_numof);
|
p_numof);
|
||||||
|
|
||||||
if (res != ESP_OK) {
|
if (res != ESP_OK) {
|
||||||
|
@ -229,8 +229,8 @@ int gpio_init(gpio_t pin, gpio_mode_t mode)
|
|||||||
(mode == GPIO_OD_PU) ||
|
(mode == GPIO_OD_PU) ||
|
||||||
(mode == GPIO_IN_OD_PU)) ? GPIO_PULLUP_ENABLE
|
(mode == GPIO_IN_OD_PU)) ? GPIO_PULLUP_ENABLE
|
||||||
: GPIO_PULLUP_DISABLE;
|
: GPIO_PULLUP_DISABLE;
|
||||||
cfg.pull_down_en = (mode == GPIO_IN_PD) ? GPIO_PULLUP_ENABLE
|
cfg.pull_down_en = (mode == GPIO_IN_PD) ? GPIO_PULLDOWN_ENABLE
|
||||||
: GPIO_PULLUP_DISABLE;
|
: GPIO_PULLDOWN_DISABLE;
|
||||||
cfg.intr_type = GPIO_INTR_DISABLE;
|
cfg.intr_type = GPIO_INTR_DISABLE;
|
||||||
|
|
||||||
#ifdef ESP_PM_WUP_PINS
|
#ifdef ESP_PM_WUP_PINS
|
||||||
|
@ -149,9 +149,25 @@ int gpio_ll_init(gpio_port_t port, uint8_t pin, const gpio_conf_t *conf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* if output pin, try to set drive strength */
|
/* if output pin, try to set drive strength */
|
||||||
|
gpio_drive_cap_t strength;
|
||||||
|
switch (conf->drive_strength) {
|
||||||
|
case GPIO_DRIVE_WEAKEST:
|
||||||
|
strength = GPIO_DRIVE_CAP_0;
|
||||||
|
break;
|
||||||
|
case GPIO_DRIVE_WEAK:
|
||||||
|
strength = GPIO_DRIVE_CAP_1;
|
||||||
|
break;
|
||||||
|
case GPIO_DRIVE_STRONG:
|
||||||
|
strength = GPIO_DRIVE_CAP_2;
|
||||||
|
break;
|
||||||
|
case GPIO_DRIVE_STRONGEST:
|
||||||
|
strength = GPIO_DRIVE_CAP_3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
strength = GPIO_DRIVE_CAP_DEFAULT;
|
||||||
|
}
|
||||||
if ((cfg.pin_bit_mask & SOC_GPIO_VALID_OUTPUT_GPIO_MASK) &&
|
if ((cfg.pin_bit_mask & SOC_GPIO_VALID_OUTPUT_GPIO_MASK) &&
|
||||||
(esp_idf_gpio_set_drive_capability(gpio,
|
(esp_idf_gpio_set_drive_capability(gpio, strength) != ESP_OK)) {
|
||||||
conf->drive_strength) != ESP_OK)) {
|
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,27 @@ int gpio_ll_irq(gpio_port_t port, uint8_t pin, gpio_irq_trig_t trig,
|
|||||||
gpio_isr_service_installed = true;
|
gpio_isr_service_installed = true;
|
||||||
|
|
||||||
/* set the interrupt type for the pin */
|
/* set the interrupt type for the pin */
|
||||||
if (esp_idf_gpio_set_intr_type(gpio, trig) != ESP_OK) {
|
gpio_int_type_t type;
|
||||||
|
switch (trig) {
|
||||||
|
case GPIO_TRIGGER_EDGE_FALLING:
|
||||||
|
type = GPIO_INTR_NEGEDGE;
|
||||||
|
break;
|
||||||
|
case GPIO_TRIGGER_EDGE_RISING:
|
||||||
|
type = GPIO_INTR_POSEDGE;
|
||||||
|
break;
|
||||||
|
case GPIO_TRIGGER_EDGE_BOTH:
|
||||||
|
type = GPIO_INTR_ANYEDGE;
|
||||||
|
break;
|
||||||
|
case GPIO_TRIGGER_LEVEL_HIGH:
|
||||||
|
type = GPIO_INTR_HIGH_LEVEL;
|
||||||
|
break;
|
||||||
|
case GPIO_TRIGGER_LEVEL_LOW:
|
||||||
|
type = GPIO_INTR_LOW_LEVEL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
type = GPIO_INTR_DISABLE;
|
||||||
|
}
|
||||||
|
if (esp_idf_gpio_set_intr_type(gpio, type) != ESP_OK) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ extern uint32_t rtc_clk_slow_freq_get_hz(void);
|
|||||||
/* forward declaration of functions */
|
/* forward declaration of functions */
|
||||||
void rtt_restore_counter(bool sys_time);
|
void rtt_restore_counter(bool sys_time);
|
||||||
static void _rtt_update_hw_alarm(void);
|
static void _rtt_update_hw_alarm(void);
|
||||||
static void IRAM_ATTR _rtt_isr(void *arg);
|
static void _rtt_isr(void *arg);
|
||||||
|
|
||||||
/* forward declarations of driver functions */
|
/* forward declarations of driver functions */
|
||||||
uint64_t _rtc_get_counter(void);
|
uint64_t _rtc_get_counter(void);
|
||||||
|
@ -135,13 +135,8 @@ static void _rtc_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg)
|
|||||||
RTCCNTL.slp_timer0 = rtc_alarm & 0xffffffff;
|
RTCCNTL.slp_timer0 = rtc_alarm & 0xffffffff;
|
||||||
RTCCNTL.slp_timer1.slp_val_hi = rtc_alarm >> 32;
|
RTCCNTL.slp_timer1.slp_val_hi = rtc_alarm >> 32;
|
||||||
|
|
||||||
#if __xtensa__
|
|
||||||
DEBUG("%s %08x%08x \n", __func__,
|
|
||||||
RTCCNTL.slp_timer1.slp_val_hi, RTCCNTL.slp_timer0);
|
|
||||||
#else
|
|
||||||
DEBUG("%s %08x%08x \n", __func__,
|
DEBUG("%s %08x%08x \n", __func__,
|
||||||
(unsigned)RTCCNTL.slp_timer1.slp_val_hi, (unsigned)RTCCNTL.slp_timer0);
|
(unsigned)RTCCNTL.slp_timer1.slp_val_hi, (unsigned)RTCCNTL.slp_timer0);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* enable RTC timer alarm */
|
/* enable RTC timer alarm */
|
||||||
RTCCNTL.slp_timer1.main_timer_alarm_en = 1;
|
RTCCNTL.slp_timer1.main_timer_alarm_en = 1;
|
||||||
|
@ -240,8 +240,8 @@ static NORETURN void IRAM system_init (void)
|
|||||||
|
|
||||||
/* set log levels for SDK library outputs */
|
/* set log levels for SDK library outputs */
|
||||||
extern void esp_log_level_set(const char* tag, esp_log_level_t level);
|
extern void esp_log_level_set(const char* tag, esp_log_level_t level);
|
||||||
esp_log_level_set("wifi", LOG_DEBUG);
|
esp_log_level_set("wifi", (esp_log_level_t)LOG_DEBUG);
|
||||||
esp_log_level_set("gpio", LOG_DEBUG);
|
esp_log_level_set("gpio", (esp_log_level_t)LOG_DEBUG);
|
||||||
|
|
||||||
/* init watchdogs */
|
/* init watchdogs */
|
||||||
system_wdt_init();
|
system_wdt_init();
|
||||||
|
@ -382,8 +382,9 @@ void system_wdt_init(void)
|
|||||||
wdt_hal_write_protect_enable(&rwdt);
|
wdt_hal_write_protect_enable(&rwdt);
|
||||||
|
|
||||||
#if defined(CPU_FAM_ESP32)
|
#if defined(CPU_FAM_ESP32)
|
||||||
DEBUG("%s TIMERG0 wdtconfig0=%08x wdtconfig1=%08x wdtconfig2=%08x "
|
DEBUG("%s TIMERG0 wdtconfig0=%08"PRIx32" wdtconfig1=%08"PRIx32
|
||||||
"wdtconfig3=%08x wdtconfig4=%08x regclk=%08x\n", __func__,
|
" wdtconfig2=%08"PRIx32" wdtconfig3=%08"PRIx32
|
||||||
|
" wdtconfig4=%08"PRIx32" regclk=%08"PRIx32"\n", __func__,
|
||||||
TIMERG0.wdt_config0.val, TIMERG0.wdt_config1.val,
|
TIMERG0.wdt_config0.val, TIMERG0.wdt_config1.val,
|
||||||
TIMERG0.wdt_config2, TIMERG0.wdt_config3,
|
TIMERG0.wdt_config2, TIMERG0.wdt_config3,
|
||||||
TIMERG0.wdt_config4, TIMERG0.clk.val);
|
TIMERG0.wdt_config4, TIMERG0.clk.val);
|
||||||
|
Loading…
Reference in New Issue
Block a user