From 482a26e284a40464fbed6c7635e76dcfba34fb69 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Mon, 9 Jan 2023 16:31:54 +0800 Subject: [PATCH] sdm: support sdm on esp32h2 --- components/driver/sdm.c | 12 +++- .../gpio_extensions/pytest_gpio_extensions.py | 3 +- components/hal/esp32h2/include/hal/sdm_ll.h | 58 ++++++++++++++++++ .../esp32h2/include/soc/Kconfig.soc_caps.in | 6 +- .../soc/esp32h2/include/soc/clk_tree_defs.h | 10 ++- .../soc/esp32h2/include/soc/gpio_ext_struct.h | 8 +-- components/soc/esp32h2/include/soc/soc_caps.h | 5 +- docs/en/api-reference/peripherals/sdm.rst | 3 +- .../peripherals/sigma_delta/sdm_dac/README.md | 14 ++--- .../sigma_delta/sdm_dac/example_figure.png | Bin 0 -> 10173 bytes .../sdm_dac/filtered_sine_wave.png | Bin 8984 -> 0 bytes .../sdm_dac/main/sdm_dac_example_main.c | 17 ++--- .../sdm_dac/pytest_sdm_dac_example.py | 1 + .../sigma_delta/sdm_dac/raw_sdm_output.png | Bin 9520 -> 0 bytes .../sdm_led/pytest_sdm_led_example.py | 1 + 15 files changed, 107 insertions(+), 31 deletions(-) create mode 100644 components/hal/esp32h2/include/hal/sdm_ll.h create mode 100644 examples/peripherals/sigma_delta/sdm_dac/example_figure.png delete mode 100644 examples/peripherals/sigma_delta/sdm_dac/filtered_sine_wave.png delete mode 100644 examples/peripherals/sigma_delta/sdm_dac/raw_sdm_output.png diff --git a/components/driver/sdm.c b/components/driver/sdm.c index 361e02574b..5609554fdf 100644 --- a/components/driver/sdm.c +++ b/components/driver/sdm.c @@ -232,9 +232,19 @@ esp_err_t sdm_new_channel(const sdm_config_t *config, sdm_channel_handle_t *ret_ sprintf(chan->pm_lock_name, "sdm_%d_%d", group->group_id, chan_id); // e.g. sdm_0_0 ret = esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, chan->pm_lock_name, &chan->pm_lock); ESP_RETURN_ON_ERROR(ret, TAG, "create NO_LIGHT_SLEEP lock failed"); -#endif +#endif // CONFIG_PM_ENABLE break; #endif // SOC_SDM_CLK_SUPPORT_PLL_F80M +#if SOC_SDM_CLK_SUPPORT_PLL_F48M + case SDM_CLK_SRC_PLL_F48M: + src_clk_hz = 48 * 1000 * 1000; +#if CONFIG_PM_ENABLE + sprintf(chan->pm_lock_name, "sdm_%d_%d", group->group_id, chan_id); // e.g. sdm_0_0 + ret = esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, chan->pm_lock_name, &chan->pm_lock); + ESP_RETURN_ON_ERROR(ret, TAG, "create NO_LIGHT_SLEEP lock failed"); +#endif // CONFIG_PM_ENABLE + break; +#endif // SOC_SDM_CLK_SUPPORT_PLL_F48M default: ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "clock source %d is not support", config->clk_src); break; diff --git a/components/driver/test_apps/gpio_extensions/pytest_gpio_extensions.py b/components/driver/test_apps/gpio_extensions/pytest_gpio_extensions.py index e245bb1993..b3e6d43994 100644 --- a/components/driver/test_apps/gpio_extensions/pytest_gpio_extensions.py +++ b/components/driver/test_apps/gpio_extensions/pytest_gpio_extensions.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest @@ -15,6 +15,7 @@ CONFIGS = [ @pytest.mark.esp32c6 @pytest.mark.esp32s2 @pytest.mark.esp32s3 +# @pytest.mark.esp32h2 // TODO: IDF-6263 @pytest.mark.generic @pytest.mark.parametrize('config', CONFIGS, indirect=True) def test_sdm(dut: IdfDut) -> None: diff --git a/components/hal/esp32h2/include/hal/sdm_ll.h b/components/hal/esp32h2/include/hal/sdm_ll.h new file mode 100644 index 0000000000..7bdad37119 --- /dev/null +++ b/components/hal/esp32h2/include/hal/sdm_ll.h @@ -0,0 +1,58 @@ +/* + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include "hal/misc.h" +#include "hal/assert.h" +#include "soc/gpio_ext_struct.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Set Sigma-delta enable + * + * @param hw Peripheral SIGMADELTA hardware instance address. + * @param en Sigma-delta enable value + */ +static inline void sdm_ll_enable_clock(gpio_sd_dev_t *hw, bool en) +{ + hw->misc.function_clk_en = en; +} + +/** + * @brief Set Sigma-delta channel duty. + * + * @param hw Peripheral SIGMADELTA hardware instance address. + * @param channel Sigma-delta channel number + * @param density Sigma-delta quantized density of one channel, the value ranges from -128 to 127, recommended range is -90 ~ 90. + * The waveform is more like a random one in this range. + */ +__attribute__((always_inline)) +static inline void sdm_ll_set_pulse_density(gpio_sd_dev_t *hw, int channel, int8_t density) +{ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->channel[channel], duty, (uint32_t)density); +} + +/** + * @brief Set Sigma-delta channel's clock pre-scale value. + * + * @param hw Peripheral SIGMADELTA hardware instance address. + * @param channel Sigma-delta channel number + * @param prescale The divider of source clock, ranges from 1 to 256 + */ +static inline void sdm_ll_set_prescale(gpio_sd_dev_t *hw, int channel, uint32_t prescale) +{ + HAL_ASSERT(prescale && prescale <= 256); + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->channel[channel], prescale, prescale - 1); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in index 206dcc6077..048f493392 100644 --- a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in @@ -35,6 +35,10 @@ config SOC_RTC_MEM_SUPPORTED bool default y +config SOC_SDM_SUPPORTED + bool + default y + config SOC_SYSTIMER_SUPPORTED bool default y @@ -531,7 +535,7 @@ config SOC_SDM_CHANNELS_PER_GROUP int default 4 -config SOC_SDM_CLK_SUPPORT_PLL_F80M +config SOC_SDM_CLK_SUPPORT_PLL_F48M bool default y diff --git a/components/soc/esp32h2/include/soc/clk_tree_defs.h b/components/soc/esp32h2/include/soc/clk_tree_defs.h index 0602e7f2ab..7175713248 100644 --- a/components/soc/esp32h2/include/soc/clk_tree_defs.h +++ b/components/soc/esp32h2/include/soc/clk_tree_defs.h @@ -330,9 +330,13 @@ typedef enum { * @brief Sigma Delta Modulator clock source */ typedef enum { - SDM_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL clock as the source clock */ - SDM_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M clock as the source clock */ - SDM_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M clock as the default clock choice */ + SDM_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL clock as the source clock */ + SDM_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M clock as the source clock */ +#if CONFIG_IDF_ENV_FPGA + SDM_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the default clock choice */ +#else + SDM_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the default clock choice */ +#endif } soc_periph_sdm_clk_src_t; //////////////////////////////////////////////////GPIO Glitch Filter//////////////////////////////////////////////////// diff --git a/components/soc/esp32h2/include/soc/gpio_ext_struct.h b/components/soc/esp32h2/include/soc/gpio_ext_struct.h index df1cc89370..5ee44e94ea 100644 --- a/components/soc/esp32h2/include/soc/gpio_ext_struct.h +++ b/components/soc/esp32h2/include/soc/gpio_ext_struct.h @@ -1,5 +1,5 @@ /** - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -16,11 +16,11 @@ extern "C" { */ typedef union { struct { - /** sd0_in : R/W; bitpos: [7:0]; default: 0; + /** duty : R/W; bitpos: [7:0]; default: 0; * This field is used to configure the duty cycle of sigma delta modulation output. */ uint32_t duty:8; - /** sd0_prescale : R/W; bitpos: [15:8]; default: 255; + /** prescale : R/W; bitpos: [15:8]; default: 255; * This field is used to set a divider value to divide APB clock. */ uint32_t prescale:8; @@ -272,7 +272,7 @@ typedef union { uint32_t val; } gpio_ext_version_reg_t; -typedef struct { +typedef struct gpio_sd_dev_t { volatile gpio_sigmadelta_chn_reg_t channel[4]; uint32_t reserved_010[4]; volatile gpio_sigmadelta_misc_reg_t misc; diff --git a/components/soc/esp32h2/include/soc/soc_caps.h b/components/soc/esp32h2/include/soc/soc_caps.h index 97d6dbf53a..d199e265b5 100644 --- a/components/soc/esp32h2/include/soc/soc_caps.h +++ b/components/soc/esp32h2/include/soc/soc_caps.h @@ -46,7 +46,7 @@ #define SOC_RTC_MEM_SUPPORTED 1 // #define SOC_I2S_SUPPORTED 1 // TODO: IDF-6219 // #define SOC_RMT_SUPPORTED 1 // TODO: IDF-6224 -// #define SOC_SDM_SUPPORTED 1 // TODO: IDF-6220 +#define SOC_SDM_SUPPORTED 1 // #define SOC_GPSPI_SUPPORTED 1 // TODO: IDF-6264 #define SOC_SYSTIMER_SUPPORTED 1 // #define SOC_SUPPORT_COEXISTENCE 1 // TODO: IDF-6416 @@ -294,11 +294,10 @@ #define SOC_SHA_SUPPORT_SHA224 (1) #define SOC_SHA_SUPPORT_SHA256 (1) -// TODO: IDF-6220 /*-------------------------- Sigma Delta Modulator CAPS -----------------*/ #define SOC_SDM_GROUPS 1U #define SOC_SDM_CHANNELS_PER_GROUP 4 -#define SOC_SDM_CLK_SUPPORT_PLL_F80M 1 +#define SOC_SDM_CLK_SUPPORT_PLL_F48M 1 #define SOC_SDM_CLK_SUPPORT_XTAL 1 // TODO: IDF-6245 (Copy from esp32c6, need check) diff --git a/docs/en/api-reference/peripherals/sdm.rst b/docs/en/api-reference/peripherals/sdm.rst index 2b7e9f07e0..1c72254f3d 100644 --- a/docs/en/api-reference/peripherals/sdm.rst +++ b/docs/en/api-reference/peripherals/sdm.rst @@ -128,7 +128,8 @@ For example, you can take the following `Sallen-Key topology Low Pass Filter`_ a Application Example ------------------- -* LED driven by a GPIO that is modulated with Sigma-Delta: :example:`peripherals/sigma_delta`. +* 100 Hz sine wave that is modulated with Sigma-Delta: :example:`peripherals/sigma_delta/sdm_dac`. +* LED driven by a GPIO that is modulated with Sigma-Delta: :example:`peripherals/sigma_delta/sdm_led`. API Reference ------------- diff --git a/examples/peripherals/sigma_delta/sdm_dac/README.md b/examples/peripherals/sigma_delta/sdm_dac/README.md index 424ad644d2..f9d59d889b 100644 --- a/examples/peripherals/sigma_delta/sdm_dac/README.md +++ b/examples/peripherals/sigma_delta/sdm_dac/README.md @@ -5,7 +5,7 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example uses the sigma-delta driver to generate modulated output on a GPIO. If you filter the output signal with an active or passive filter, you can get a 1 KHz sine wave. +This example uses the sigma-delta driver to generate modulated output on a GPIO. If you filter the output signal with an active or passive filter, you can get a 100 Hz sine wave. ## How to use example @@ -46,21 +46,17 @@ Once the upload is complete and the board is reset, the program should start run I (299) main_task: Calling app_main() I (309) gpio: GPIO[0]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 I (309) sdm_dac: Sigma-delta output is attached to GPIO 0 -I (319) sdm_dac: Timer allocated with resolution 10000000 Hz -I (329) sdm_dac: Timer callback registered, interval 10 us +I (319) sdm_dac: Timer allocated with resolution 1000000 Hz +I (329) sdm_dac: Timer callback registered, interval 100 us I (329) sdm_dac: Timer enabled I (339) sdm_dac: Output start ``` After the output stated, you can monitor the output signal by an oscilloscope. -If you monitor on the GPIO directly, you can see the raw SDM output, it consists by square waves (i.e. pulse) with different density +If you monitor on the GPIO directly, you can see the raw SDM output, it consists of square waves (i.e. pulse) with different densities (see the blue wave in the figure), and if you monitor the signal after a low-pass filter, you can see the pulses are filtered into a sine wave already (see the yellow wave in the figure). -![raw_sdm_output](raw_sdm_output.png) - -If you monitor the signal after a low-pass filter, you can see the pulses are filtered into a sine wave already - -![filtered_sine_wave](filtered_sine_wave.png) +![example_figure](example_figure.png) ## Troubleshooting diff --git a/examples/peripherals/sigma_delta/sdm_dac/example_figure.png b/examples/peripherals/sigma_delta/sdm_dac/example_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..f89e85b8f3cf87c5e57755de94d335971df09453 GIT binary patch literal 10173 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 AIRF3v literal 0 HcmV?d00001 diff --git a/examples/peripherals/sigma_delta/sdm_dac/filtered_sine_wave.png b/examples/peripherals/sigma_delta/sdm_dac/filtered_sine_wave.png deleted file mode 100644 index 9fd43f993a0bda31aff5240ab2c79e6127dd97aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8984 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 1, "Sine wave frequency is too high"); ESP_STATIC_ASSERT(EXAMPLE_CALLBACK_INTERVAL_US >= 7, "Timer callback interval is too short"); diff --git a/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py b/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py index 6d9335cc93..8a7f378b7e 100644 --- a/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py +++ b/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py @@ -10,6 +10,7 @@ from pytest_embedded import Dut @pytest.mark.esp32s3 @pytest.mark.esp32c3 @pytest.mark.esp32c6 +# @pytest.mark.esp32h2 // TODO: IDF-6263, IDF-6242 @pytest.mark.generic def test_sdm_dac_example(dut: Dut) -> None: dut.expect(r'sdm_dac: Sigma-delta output is attached to GPIO \w+') diff --git a/examples/peripherals/sigma_delta/sdm_dac/raw_sdm_output.png b/examples/peripherals/sigma_delta/sdm_dac/raw_sdm_output.png deleted file mode 100644 index 1ac85e522bfc315e0e62a2a62b4de1ec10546638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9520 zcmeAS@N?(olHy`uVBq!ia0y~yV0^&9!0?KLiGhLPYZRjZ1A_vCr;B4q#hkZuAC_*m z;%SpqR8DQ_xg@wx@EwQbLgkc}z6pXxhyE@M3ssGjNS28y}97}>FCPxsBY%3 zR}>c)|F~mWe)-?o#`jtCulGOtdxCHE-1B#<&aJSW#eH^(i23VFmKFi&U)jIBayd8W zuD)VjIHP3DKOe8zq7J*aTZc@`O+5Qt-a090x~XKFXNj7FzPGQ{arRd$of+m@K7A~9 z*mnM>kJZned|6(cc^W!@)kp3+-mk$%N!ZzZZ`5L5)}>! zl6iA{Y1f%kZwuY?b~DV~bup3g?Yi?XKd7yJ-qZE9%JuF3`u~skj&G@tv%a%xn(l?b z?G|tDUpaNfXS>Kf7yk10gQqlaSuJ=Q+jlj;YDeF+*NhpqJd-od@XYF%Q*%>$o2^lE-+M>)yeQe`!?Bl3CDa5NWM_W7*RYR^gvta%l1vMfjqk}_2<{|4Jf)tWYmaVf3tO!?>*Be~4(VGaZ;fTF{a>{Z1m5QRGRWSUv+M4< z8!f&E)xIywU7P&$kIbcjdn-0|##HT)ys;(o@+KVy6EoiJD>WBP@0sr`bxJzajPZhT zUKAf=iT};X)8pBD;!l|tE$otPU(qG`({F=qChyF|zbCUh)Q;Xe7kGER^DSjL5x&hv zk?E(VuD-8g8QifeDg4CEwPvLT$*cWXGpyMx-&WndR_`AzRjeN7c%$@lPtN-5yZEop zO8qUm#eQz=!xe@%dIdnitAFVyO6g%ds%yQc7Q|ryvlvYnYq5Rl-OLBs?5C1 z*FF39X_waBRjTcomlNKWwC;}CvpqRlZGrLPEnyFKR+p8(EAwXcobPr#Yi(G=Gw*JSJ-hr)8!k3opy?9LXmz~&?Xx!9YaEg$@)=W2 zw$NQ}gHMk+XOGgB^-bvy_}V!N{n)w@T32o?}7yS&afs zhT1xZ;|rM`j+-s%+r)lhdN*6i#)*0hA{iHm-d*yy_Smlo2X?(K#<`PkO)o8wW~jAU z@HY0FGlOl¿y#kQ*i7wAu4bEh(UV!*O?QO3QS<)&^rD0jkkm(-LRhu_nWnToGv zvI;%^j^{;_VGs zyYMZ@T$dgu!YC)9S@M4$K$!Wrw`jkzBU-Rcdyd zwXhW9EdG?pH|ySTX1vsno5}yeciFnKGW-6|g~7jVWG(JW14mR)-t9oXA&KpJR(ElHit^qz zF?37KUNz-L|7q@xVVm+_t~nX_B&CSSdfHsg=4rc6PF%#WSauU{3WM=no&doh?hE!` zN^H(+HtpewKXP1?&-mTRxi@=DvgGA`8U9xNHQODxHjw*ZQR&UO-qm6Jd#|43YFNgQ zYGNGRu}5Z~$&D?Y&-chwROz3$a$-KObgT1?T6htUr$ceriOI`(F36k}Q`J)4`A_A? zq&+#!wz8Jzcb=U3$?CYrq$AteCrww)tEo(O`pDYse&koM(b2O@V$7fEh%?Nx&pNT- zQSju4ik#l3MS4FaEnC;IMZRd$Eo0|te-Fq!_imN(`dL<_zkhDI)4`Ma(u`3{zg>Tw zKS9IcbIjz$`ug@pF8lXwV~nzuo#m{zdy<&QL2G8KeRVs+c3Kxszx=nHdDii|;8!Z< zAD?Twt=d!KUE_T!VnM*4r3||H|EDs}O15Rq;40bo;e*MvhG_*8E4%(QoH2Kv!fd=Y zbV+i=>1>I3wVN~Fq_Ae33);>URo2a@Yu~XU+}^(a?xCCV@k>)YJZ2Rv7JfeA0r%`Z z4`)jv1o_~Hi|C+p+1Ok4gO zIL(uE{o|aQ{28+y!`Vwt^`=U0+2dt+D~wUM`3TdmqMx=;cQrhFG0F0`)`FW4*D|gx zO8>U%%M2!y-v$g{{yx{c9OiI(x}--`X(+p<~4^-rGWmxVoI=Zc4 zTD~RAg`Sr(4xiWk96+_0n?d{C7o)_@Em}2{zQTKBOYsS23?F_Tl&Xv7zsr1uq zZ>|e6>glXsCjHgzJ9@g~@$FOX;+$)3S9ca?slPn@maQZ}h3B8~yg!kCtQmSQBOHon z9%Zr$Raqjtj6v2WSxx>}aDy6mti$Eq7RHkr_T63gsdycWiG6(rqwJNNQ$7lruT**% zYI8n~(f3^`qwnz|# z4qJM?{Pco_woD7|i(Ghfuan_y8Pf%ZFSB3dG^928aAnwi>}pU`u3UGHFC*mw!he<+cpGtWu9WolNadGx&b(JB^y`Z1<%QBv*vp%dDWeJQ6 zCOYPyTJW2}O1+tF0lOdrufy+#XPltg)Rr-K|5uqkF<$%QW7eE`@A!O=?eSZd3~!HJ zb7^>X;rU8y?gck*9b`QFn(@U&hPnS2oJx{=9Z_qeAF)pF`^o877T-JQcjswIJ%dyO z+XBWHW)0K!AD#HqU?KN<--f&|Jc$Js*|WDCtUXlllI;bb>meD3{uq@v{4ac65BWAM zd+Os*t}S$|L2jqVkBT`vJ$8s*;7VUP{oSl9!VgQQ@@HJNznb{A;KYK}Ouu9#w|w~~ z=b+r|#wNSxOT`lLu=ri4-@Yqd!zA9|#}xH1-W2QtcE*x_=X=kwW|Yc1moY4u=y;vQ zMAF83!A@xgTag99`nGaEMQ&H|@0$DO+;*m0cRha&v>pU4Y@QSi`hpQBVpxvEXjL%<_H0dw=C5D({Tnq4(omS=E1r61Gn- zdKpX@cpb_aw)|e=`OLZPU{UGO>FvJ$_RIJg9hfhG93!+Kw&*E?73*ua^J3>1Uo7xA zVY=uj!z{C%4bNnw98Ui_mR>e-LfH$ZsIZM|S~VStFP>zw(hv&jJ;7=+^C6Sfip`pj zRr5k72Am5uy2om=^E#`E>}ggL>r+fsS1ZIXq%7pl__UBa!{{(;Nq|bovE7PUjJ|!7 z8m1}EVk!wxneuq*EEi2s_T`IpV0U$z<)XLXWo$3Q++BeW_MKtelCx6w-S*8A7s|4K zb(~mWTojaY;lzTwJW)YBk|i^fT9)p*Io)!{nrw9jUXX9T%w(J!Z)+`f!7vUQuHTtv z)f?1mIIO=nk>g$Fis=V!Ux<~lnJtN1RhuRw4oiL~ReIgI zNsixHOpIPg8fRoM!eX^u6zVQBhxqjgCH#Bi*1vvh503EjY#H0O2`=co7!WL&9H_E} z^TjgPLp2VIJv3r}wYeT*xbSDs3qOa+!YNJ(zMF*S|NeY=^B*@W4f*ce-#>o*Yf`A} zSse1IF`bv+kbm0TJ)3s=C*PW|FHSn`)b`t7%XZ(}AE%c*(Q&;pzhsHzg1cY!d?z@T zGn+jA5#jKe;pEeQ4P}QfwUq=rOlE*2KgNvXa^_W`JPe=|!Rw%IJ57>dHiPcl`K%XC z)iM0CY54c&kDb@QCwmw!v@=EVDKX3yW?(R3_{)AlLnw}AL7>VM#eMrdB3LiX?QVHv z&iaC}yM>+UmKY~Lqe)lGKZ}!jca2`~HMp_qI^T(Xf9Z*jWC_=WH@CTsUaU0AFxs^B zp2&qgY@o=s%N^)fc5ie~0>if6{H7jJsMiguEQy>j+(A`tq{7Wj4dyV3i!+7u)rO%GgX&FSIj9 z`TbyKe7mkZvx#Sy^a5k!jK14$4b$E{e)_6m+Ur<{<#X-`Us%G)aMqB^;drp&wy;@J z3{js{*-YkMVTHKOO8CO}-}(zO?U*lodjFD9_y1uzhTK>#2j&a8jJk`pSTm%I8KUM2 zGOUdOiRE*F@{;+3w-y)G#4oHmpt?BzpY_(?_j#-|gf8*LI;<9I++@I-p=T8dN?5A| zcQ!n0>SQg+N!0q%tfVOUo@v%;cd-j4I^q}JXh=VDoH)U3C%npEd> zjG`&r8GM1MW0!g+JA*ae$T zoduP9bQaun0%da zWdLP8XtrX^V5q8d@aCAbl3~lzle3wlj@6tp0H^D}2}}#rnYNTX5NTLu%(`GTbJV$I z-&sqJs&js4sJfxf$#a?4!Cxj$7BvmMGSCK<3_sF-v? zUi~Jo5KJ!T_=K^wU*(+mP=;<3 z{Q}jM#SCws@n-$KBl(4+;aR2u(*n(T9p{3XXUWXw%sBn@Z^N`Dj}N9^_YGG`Q5R>n zQsDmH$+(t*-GTW6C>tGZn8tjpxS?v5<`t0(lWKV~rkeM1W|(>hH>k14SuxGBJ=qu3 z@XS+N(w1q#&3}xHZ=ap}%rwinY3y4pFg@xe(HSig8O#b*aN`B}M<`A`5Ot zv6-~j87>HRJ#?-iFG?juQHxPGP^r6RQkyKp+GRpB3oRBrR#NmA-sF3BF_XjQ_NlJ} zRMzmnIB5Lh_g;YupVpK!MJ?l**|1Hrgl~c9wkK1#8#W1FNV&REa*K(n@P$h!SMtnK zUMss``H2O)8KY*tWt#QvLXJW< z%XoU`RYTajyIdLH+E{Gov(6XUdy$v3Zt>F2J&)>Y{v=g7I1~ruvYIT8WSVtf+x-+T zkK9?21(s)Y76kh;&3g0D!B*zN^wU-gc6$1+n))W_<*qBC0ea_oGo-)UGM+tr%t6Ji z`1hZfdFSuH-&;hz>*86pt0pEd&A;k1eWCXB%>U<~7wwm4f8qOz zKjW%JhRW_r-py?%Pi%CRzhfaeCGB+1toT#h`s}KIx9!@+^Wnqisy_9Z=DZvkl^>Jk zcjc+De6Crrzoz53vvqK5qtCA=KZG)#r2792)n&~nd#Nb7g{A#WXsW~seb!G)=jKkX z{POo-I!kK7rPI4tRDGQBDPf}bPcE&-qj#T#PP4B$QLV4cFw1Q+fzD|!(CMqCnz__PXF~miT%y5&+EUydfx1 z^oVeB$iC@;zbpROT{v-Fs4dFh;dK3>G{&>{wv~Te;`!#x>GMy!+TC{QJw5s0|I3TB zuD>>CSaQ&&^yeWpd*h3pC!%Gp&%Yg@w;)=CQ}Tk$G_DI~JD>gU)m)z|BzA4aRe`P3 zor_jhiTA%ee%^SyQKfoOq0g!6M_d;!@ryIQm?F*Wu)6+d#Ycv-)3xVWoMDm6vt+SR zs@ZqR=KA54|9@s$Z@=s{@dA^T+qM*w^b2Mi9u-cyt1?Mv!P5JdYb<9-nA;p%84;OU z_|L@Sq1&f!=N6@T>(6f~@LP%LF%THE9J|l9SL;ba_kL%)b*v`F4TxBn#a}I-9KR}Z|@pq$7=ek znjx3@jM__?)m?0tBwnW2c`>|rbS)~fAuaXUMQg^h_qLpy>NovDVDcNe^5-5RCap)i zXH*|NGv&d9>DG+8hXdn8E0)d)c@;Hj*M}9;Z5h`V`DCv8qWC?KZ^~xd(z4kMy1cvN z{(o@d-I9AvdbQme){O5dOOHQ!;H7^0wx-wxt*W<c;x~R*b+w8eiV&)%N#tYMqiW?i>t&EoOWL)sJ>h{^M(FK2BGru?x;+c5WG0*Fw z<$sqL2W|5>n|()^=hnaQ&Aqzx+n1#)4@QPCmgM+%sjM{cuoQ0i_ih@~mt}=sd(EFd z`uFE-=h`_O(W(h=Cdf#~Ob&~kW%cf1L)bF5hH1+m$GvY3)Gk|J`qibOthbPHZc)^o z&y)5YmhLYya9hb|`FkbDi`#E!J<7SctgYeM?7s&;L^!b9yGVviE9xsfp~k1I#gdx$ zXzj}5GrvX5aBBWkQ=@Y)>-g!rQ#KixPSNwdBfDvFML5@m81cOl4&joiPgjT(T-9Ws zT~xE;nD+6CqRfMpvGrPS^~#FRW%pNC=9{@pmDF@t-*??FZwrITRCaA~&bPXKS0qmr zb8kyayP&-Ns&>uPn#~86T$Qo3%bW1v`}qY|>zJ~QjbAX;ulrVL{37)9cbP3Wmafh_ zBiXT|_$$vXIm5|v@25KI*LSyAKHsM4vMif%0r$C$dI6^{1YF`7GKUw=>cJ}QKx%+%9n0C zC$y+GCnG{-%kkpHlHn(eBFpA@$}+?*SoybRinr*Lg==52XK;X(nE?<#J+xgi=t-vrJ~aGDqp zdFi2shEU!mj zvqbQW!$bk85RdO*=Q5a>%yF2E+h+?sZa5n_bGbUDdbTfK;IYF~c}Am>qREO0??O?- z54+EtCW5W+YB@ED&)soi!DKfBW>=?-0L8nj(ZUU@Lt2#*`494Fif~Ro^^5N0=#z?h%rC&en|tj?V(kuw7n&yj z7#J^HNL#s~?r+F~xb@e)Ll$2-{jch7y?DjVeRr;?2a8=;A0Br4%4_#5-)E<<*xh{^ zRg}9yyLq}}dinWpZ&#iF&Gc)n+~ugNC(ryiJ$L#n&UdH(B^~nexjjA0@?9{`3z6<_ zN!j96IXbhLZf!kyOH(i>eqGtL>U+#D1l4r9S^^fbl*gSG)7UY2t>>n)>-A5YYIkyF zY_+@EK3#PIGt2a+7gy$7%=6;yeG+aHboJ>wON)|%O{XXEEMd6t>C1idX1iZ|7PPHm zebFYeOk32VJ*0*Q(8Q>s`Tl-9EmCb3Y##$u4Nl zv3efE@FE^GHc@J1d?&wf3S(7fXY-sA3;WbC{l{B&2`&iU*Tp%T|HT6VYtbdUHZtbT zPk61h;Hi`d=R)CCZ?en2ZF5^3EwkT!&wsro`}#M2U0qS6xFbDQ_QI#bUG=|-mVtg5-;O3=gpn&H!WTkuzhBbnh58@SgWc! z#|wJ0wvC%u9Gq2WsqRzMSgM&M(a>g=-F2dEL1?f1Nd}WGk&oL=S)OM6@o<~Cq1`X- zSn>Dm$GP_TUwfpTkv0EXLiV1Tn{T5F3yPGNGT0t!ah)ijb*1?GXYuyU%Ez@l1-ARk zI~+dw_RBuWFBhMGT`Rb*<@C!l74Lq}On%n=YLCvY*|p)ZsX}iZ91fq%pY1rA;f0*l zOi4|L<0oSe@Rcim-Ly!@I_KE)vh0+8(K&ZQ7`7~a@ML3Vmv1`jmfd!(LJU^_MZ&Jj zKYhaF@cqsfh6^`BHe~WIxNEwE@#e!a3Hb{JMa%AqU&v6;vt~Ri)h-*|f1~{z_nbQs z=bwN6aC6J8SIkmx@2r(x@H4h|+3M*LqnA- zQuOtymmljGUNA3Zh!v2YdH8x&%H58$oG1Q0+qz+omXgSv8xJQdXTQ80 zva+Eh{?=64L;3qBiyPP8nY(54{jKU-J<3WcOW>Q_ESlZ20#*|JmsU%vXFv8O}-xT(C6rVa&+hP<8s! zy_4_$C9mH#H@N<>>@B`9S%%oZ|Bf*^IBPOqD9a8GWiL7ROYGQj?cifi&iu7apUC-Q z&f1`Ny%WzKTYB|_SbK~H+m}l^OBO`DWzfC9_08m zr&q>m<}c}cm-Sk=FJ!x~?f2DJufJJvbL;=?vPJ=?byhwHwwG2vyZ*+E@mAVR-uI6G zWt3MtF2DYdJ#+!n*0N8x`7RvcU-h6f&g13GACA@>vjWds*8k}~bL@PtQ`EQcg^C$* gzEWpWKKzedzj*T0ogP;h7#J8lUHx3vIVCg!08~zfwEzGB diff --git a/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py b/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py index 3d0e30df37..d6cdf3f11e 100644 --- a/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py +++ b/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py @@ -10,6 +10,7 @@ from pytest_embedded import Dut @pytest.mark.esp32s3 @pytest.mark.esp32c3 @pytest.mark.esp32c6 +# @pytest.mark.esp32h2 // TODO: IDF-6263 @pytest.mark.generic def test_sdm_led_example(dut: Dut) -> None: dut.expect_exact('sdm_led: Install sigma delta channel')