From dabfc7fc4b06eb3d2907ae45eff8bc66619d1ad6 Mon Sep 17 00:00:00 2001 From: morris Date: Fri, 18 Sep 2026 14:10:30 +0800 Subject: [PATCH] fix(ana_cmpr): correct swapped POS/NEG interrupt masks on ESP32-H21 Align H21 pos/neg cross interrupt bits with other targets and skip the driver on the Linux simulator. --- components/esp_driver_ana_cmpr/CMakeLists.txt | 15 ++++++--------- .../esp32c5/include/hal/ana_cmpr_ll.h | 2 +- .../esp32c61/include/hal/ana_cmpr_ll.h | 2 +- .../esp32h21/include/hal/ana_cmpr_ll.h | 4 ++-- .../esp32p4/include/hal/ana_cmpr_ll.h | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/components/esp_driver_ana_cmpr/CMakeLists.txt b/components/esp_driver_ana_cmpr/CMakeLists.txt index 497d646786a..8d4020e014d 100644 --- a/components/esp_driver_ana_cmpr/CMakeLists.txt +++ b/components/esp_driver_ana_cmpr/CMakeLists.txt @@ -1,4 +1,7 @@ idf_build_get_property(target IDF_TARGET) +if(${target} STREQUAL "linux") + return() # This component is not supported by the POSIX/Linux simulator +endif() set(srcs) @@ -10,17 +13,11 @@ if(CONFIG_SOC_ANA_CMPR_SUPPORTED) endif() endif() -if(${target} STREQUAL "linux") - set(priv_requires "") - set(requires "") -else() - set(priv_requires esp_pm esp_driver_gpio) - set(requires esp_hal_ana_cmpr) -endif() +set(priv_requires esp_pm esp_driver_gpio) idf_component_register(SRCS ${srcs} INCLUDE_DIRS "include" - PRIV_REQUIRES "${priv_requires}" - REQUIRES "${requires}" + PRIV_REQUIRES ${priv_requires} + REQUIRES esp_hal_ana_cmpr LDFRAGMENTS "linker.lf" ) diff --git a/components/esp_hal_ana_cmpr/esp32c5/include/hal/ana_cmpr_ll.h b/components/esp_hal_ana_cmpr/esp32c5/include/hal/ana_cmpr_ll.h index 7553db94eb3..2382dbaf18e 100644 --- a/components/esp_hal_ana_cmpr/esp32c5/include/hal/ana_cmpr_ll.h +++ b/components/esp_hal_ana_cmpr/esp32c5/include/hal/ana_cmpr_ll.h @@ -37,8 +37,8 @@ extern "C" { #define ANALOG_CMPR_LL_GET_HW(unit) (&ANALOG_CMPR[unit]) -#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x02 #define ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan) 0x01 +#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x02 #define ANALOG_CMPR_LL_ANY_CROSS_INTR_MASK(unit, src_chan) (ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) | ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan)) #define ANALOG_CMPR_LL_ALL_INTR_MASK(unit) 0x07 diff --git a/components/esp_hal_ana_cmpr/esp32c61/include/hal/ana_cmpr_ll.h b/components/esp_hal_ana_cmpr/esp32c61/include/hal/ana_cmpr_ll.h index b952bcd0890..a2cd6253094 100644 --- a/components/esp_hal_ana_cmpr/esp32c61/include/hal/ana_cmpr_ll.h +++ b/components/esp_hal_ana_cmpr/esp32c61/include/hal/ana_cmpr_ll.h @@ -37,8 +37,8 @@ extern "C" { #define ANALOG_CMPR_LL_GET_HW(unit) (&ANALOG_CMPR[unit]) -#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x02 #define ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan) 0x01 +#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x02 #define ANALOG_CMPR_LL_ANY_CROSS_INTR_MASK(unit, src_chan) (ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) | ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan)) #define ANALOG_CMPR_LL_ALL_INTR_MASK(unit) 0x07 diff --git a/components/esp_hal_ana_cmpr/esp32h21/include/hal/ana_cmpr_ll.h b/components/esp_hal_ana_cmpr/esp32h21/include/hal/ana_cmpr_ll.h index ec4c47a9e22..bc4f67762f9 100644 --- a/components/esp_hal_ana_cmpr/esp32h21/include/hal/ana_cmpr_ll.h +++ b/components/esp_hal_ana_cmpr/esp32h21/include/hal/ana_cmpr_ll.h @@ -36,8 +36,8 @@ extern "C" { #define ANALOG_CMPR_LL_GET_HW(unit) (&ANALOG_CMPR[unit]) -#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x01 -#define ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan) 0x02 +#define ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan) 0x01 +#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) 0x02 #define ANALOG_CMPR_LL_ANY_CROSS_INTR_MASK(unit, src_chan) (ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) | ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan)) #define ANALOG_CMPR_LL_ALL_INTR_MASK(unit) 0x07 diff --git a/components/esp_hal_ana_cmpr/esp32p4/include/hal/ana_cmpr_ll.h b/components/esp_hal_ana_cmpr/esp32p4/include/hal/ana_cmpr_ll.h index 138ba8ac0d8..a2d3b5238c9 100644 --- a/components/esp_hal_ana_cmpr/esp32p4/include/hal/ana_cmpr_ll.h +++ b/components/esp_hal_ana_cmpr/esp32p4/include/hal/ana_cmpr_ll.h @@ -38,8 +38,8 @@ extern "C" { #define ANALOG_CMPR_LL_GET_HW(unit) (&ANALOG_CMPR[unit]) #define ANALOG_CMPR_LL_GET_UNIT(hw) ((hw) == (&ANALOG_CMPR[0]) ? 0 : 1) -#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) (1UL << ((unit) * 3 + 1)) #define ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan) (1UL << ((unit) * 3 + 0)) +#define ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) (1UL << ((unit) * 3 + 1)) #define ANALOG_CMPR_LL_ANY_CROSS_INTR_MASK(unit, src_chan) (ANALOG_CMPR_LL_NEG_CROSS_INTR_MASK(unit, src_chan) | ANALOG_CMPR_LL_POS_CROSS_INTR_MASK(unit, src_chan)) #define ANALOG_CMPR_LL_ALL_INTR_MASK(unit) (0x07 << ((unit) * 3))