diff --git a/components/bt/lib b/components/bt/lib index cbdf2b94b..3d6345f07 160000 --- a/components/bt/lib +++ b/components/bt/lib @@ -1 +1 @@ -Subproject commit cbdf2b94b13a9e7df47c83a45fb82c71ba718f7c +Subproject commit 3d6345f075e3dc4a192d1b8e61ee6e94391f19b0 diff --git a/components/esp32/dport_access.c b/components/esp32/dport_access.c index ff4c8b79c..65b68f6e6 100644 --- a/components/esp32/dport_access.c +++ b/components/esp32/dport_access.c @@ -131,6 +131,16 @@ void IRAM_ATTR esp_dport_access_stall_other_cpu_end(void) #endif /* CONFIG_FREERTOS_UNICORE */ } +void IRAM_ATTR esp_dport_access_stall_other_cpu_start_wrap(void) +{ + DPORT_STALL_OTHER_CPU_START(); +} + +void IRAM_ATTR esp_dport_access_stall_other_cpu_end_wrap(void) +{ + DPORT_STALL_OTHER_CPU_END(); +} + static void dport_access_init_core0(void *arg) { int core_id = xPortGetCoreID(); diff --git a/components/esp32/include/esp_dport_access.h b/components/esp32/include/esp_dport_access.h index 14b589aa4..1dbdb0826 100644 --- a/components/esp32/include/esp_dport_access.h +++ b/components/esp32/include/esp_dport_access.h @@ -19,4 +19,12 @@ void esp_dport_access_stall_other_cpu_start(void); void esp_dport_access_stall_other_cpu_end(void); void esp_dport_access_int_init(void); +#if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !defined(ESP_PLATFORM) +#define DPORT_STALL_OTHER_CPU_START() +#define DPORT_STALL_OTHER_CPU_END() +#else +#define DPORT_STALL_OTHER_CPU_START() esp_dport_access_stall_other_cpu_start() +#define DPORT_STALL_OTHER_CPU_END() esp_dport_access_stall_other_cpu_end() +#endif + #endif /* _ESP_DPORT_ACCESS_H_ */ diff --git a/components/esp32/lib b/components/esp32/lib index 0c6d1e05a..a197e872e 160000 --- a/components/esp32/lib +++ b/components/esp32/lib @@ -1 +1 @@ -Subproject commit 0c6d1e05a127dc1fef7c7b66d5ebf7c14111a77a +Subproject commit a197e872e0d96a0f5f57c7d4babefe2c77db4cf4 diff --git a/components/soc/esp32/include/soc/dport_access.h b/components/soc/esp32/include/soc/dport_access.h index 3371b71eb..6d3b6efc2 100644 --- a/components/soc/esp32/include/soc/dport_access.h +++ b/components/soc/esp32/include/soc/dport_access.h @@ -17,20 +17,11 @@ #include #include "esp_attr.h" - -void esp_dport_access_stall_other_cpu_start(void); -void esp_dport_access_stall_other_cpu_end(void); - -#if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !defined(ESP_PLATFORM) -#define DPORT_STALL_OTHER_CPU_START() -#define DPORT_STALL_OTHER_CPU_END() -#else -#define DPORT_STALL_OTHER_CPU_START() esp_dport_access_stall_other_cpu_start() -#define DPORT_STALL_OTHER_CPU_END() esp_dport_access_stall_other_cpu_end() -#endif +#include "esp_dport_access.h" //Registers Operation {{ -//Origin access operation for the base and some special scene + +//Register read macros with an underscore prefix access DPORT memory directly. In IDF apps, use the non-underscore versions to be SMP-safe. #define _DPORT_REG_READ(_r) (*(volatile uint32_t *)(_r)) #define _DPORT_REG_WRITE(_r, _v) (*(volatile uint32_t *)(_r)) = (_v) @@ -65,7 +56,7 @@ static inline uint32_t IRAM_ATTR DPORT_REG_READ(uint32_t reg) #define DPORT_REG_GET_FIELD(_r, _f) ((DPORT_REG_READ(_r) >> (_f##_S)) & (_f##_V)) //set field to register, used when _f is not left shifted by _f##_S -#define DPORT_REG_SET_FIELD(_r, _f, _v) DPORT_REG_WRITE((_r), ((DPORT_REG_READ(_r) & (~((_f) << (_f##_S))))|(((_v) & (_f))<<(_f##_S)))) +#define DPORT_REG_SET_FIELD(_r, _f, _v) DPORT_REG_WRITE((_r), ((DPORT_REG_READ(_r) & (~((_f##_V) << (_f##_S))))|(((_v) & (_f##_V))<<(_f##_S)))) //get field value from a variable, used when _f is not left shifted by _f##_S #define DPORT_VALUE_GET_FIELD(_r, _f) (((_r) >> (_f##_S)) & (_f)) @@ -85,8 +76,9 @@ static inline uint32_t IRAM_ATTR DPORT_REG_READ(uint32_t reg) //generate a value from a field value, used when _f is left shifted by _f##_S #define DPORT_FIELD_TO_VALUE2(_f, _v) (((_v)<<_f##_S) & (_f)) -#define _READ_PERI_REG(addr) (*((volatile uint32_t *)(addr))) -#define _WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) +//Register read macros with an underscore prefix access DPORT memory directly. In IDF apps, use the non-underscore versions to be SMP-safe. +#define _DPORT_READ_PERI_REG(addr) (*((volatile uint32_t *)(addr))) +#define _DPORT_WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) //read value from register static inline uint32_t IRAM_ATTR DPORT_READ_PERI_REG(uint32_t addr) @@ -94,14 +86,14 @@ static inline uint32_t IRAM_ATTR DPORT_READ_PERI_REG(uint32_t addr) uint32_t val; DPORT_STALL_OTHER_CPU_START(); - val = _READ_PERI_REG(addr); + val = _DPORT_READ_PERI_REG(addr); DPORT_STALL_OTHER_CPU_END(); return val; } //write value to register -#define DPORT_WRITE_PERI_REG(addr, val) _WRITE_PERI_REG(addr, val) +#define DPORT_WRITE_PERI_REG(addr, val) _DPORT_WRITE_PERI_REG(addr, val) //clear bits of register controlled by mask #define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask))))