mirror of
https://github.com/espressif/esp-idf
synced 2025-03-12 10:39:11 -04:00
feat(glitch_filter): support GPIO glitch filter on esp32p4
This commit is contained in:
parent
f71044c877
commit
ddece8f7e9
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -14,6 +14,12 @@
|
|||||||
#include "driver/dedic_gpio.h"
|
#include "driver/dedic_gpio.h"
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
|
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
#define TEST_FILTER_GPIO 20
|
||||||
|
#else
|
||||||
|
#define TEST_FILTER_GPIO 2
|
||||||
|
#endif
|
||||||
|
|
||||||
#if SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER
|
#if SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER
|
||||||
|
|
||||||
TEST_CASE("GPIO pin glitch filter life cycle", "[gpio_filter]")
|
TEST_CASE("GPIO pin glitch filter life cycle", "[gpio_filter]")
|
||||||
@ -108,7 +114,7 @@ NOINLINE_ATTR IRAM_ATTR static void test_gpio_simulate_glitch_pulse(void)
|
|||||||
|
|
||||||
TEST_CASE("GPIO flex glitch filter enable/disable", "[gpio_filter]")
|
TEST_CASE("GPIO flex glitch filter enable/disable", "[gpio_filter]")
|
||||||
{
|
{
|
||||||
const gpio_num_t test_gpio = 2;
|
const gpio_num_t test_gpio = TEST_FILTER_GPIO;
|
||||||
|
|
||||||
printf("initialize GPIO for input and out\r\n");
|
printf("initialize GPIO for input and out\r\n");
|
||||||
gpio_config_t gpio_cfg = {
|
gpio_config_t gpio_cfg = {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytest_embedded_idf import IdfDut
|
from pytest_embedded_idf import IdfDut
|
||||||
|
|
||||||
@ -16,6 +15,7 @@ CONFIGS = [
|
|||||||
@pytest.mark.esp32h2
|
@pytest.mark.esp32h2
|
||||||
@pytest.mark.esp32s2
|
@pytest.mark.esp32s2
|
||||||
@pytest.mark.esp32s3
|
@pytest.mark.esp32s3
|
||||||
|
@pytest.mark.esp32p4
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@pytest.mark.parametrize('config', CONFIGS, indirect=True)
|
@pytest.mark.parametrize('config', CONFIGS, indirect=True)
|
||||||
def test_gpio_filter(dut: IdfDut) -> None:
|
def test_gpio_filter(dut: IdfDut) -> None:
|
||||||
|
60
components/hal/esp32p4/include/hal/gpio_glitch_filter_ll.h
Normal file
60
components/hal/esp32p4/include/hal/gpio_glitch_filter_ll.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "hal/assert.h"
|
||||||
|
#include "soc/gpio_ext_struct.h"
|
||||||
|
|
||||||
|
#define GPIO_LL_GLITCH_FILTER_MAX_WINDOW 64
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable GPIO glitch filter
|
||||||
|
*
|
||||||
|
* @param hw Glitch filter register base address
|
||||||
|
* @param filter_idx Glitch filter index
|
||||||
|
* @param enable True to enable, false to disable
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_glitch_filter_enable(gpio_glitch_filter_dev_t *hw, uint32_t filter_idx, bool enable)
|
||||||
|
{
|
||||||
|
hw->glitch_filter_chn[filter_idx].filter_chn_en = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the input GPIO for the glitch filter
|
||||||
|
*
|
||||||
|
* @param hw Glitch filter register base address
|
||||||
|
* @param filter_idx Glitch filter index
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_glitch_filter_set_gpio(gpio_glitch_filter_dev_t *hw, uint32_t filter_idx, uint32_t gpio_num)
|
||||||
|
{
|
||||||
|
hw->glitch_filter_chn[filter_idx].filter_chn_input_io_num = gpio_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the coefficient of the glitch filter window
|
||||||
|
*
|
||||||
|
* @param hw Glitch filter register base address
|
||||||
|
* @param filter_idx Glitch filter index
|
||||||
|
* @param window_width Window width, in IOMUX clock ticks
|
||||||
|
* @param window_threshold Window threshold, in IOMUX clock ticks
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_glitch_filter_set_window_coeff(gpio_glitch_filter_dev_t *hw, uint32_t filter_idx, uint32_t window_width, uint32_t window_thres)
|
||||||
|
{
|
||||||
|
HAL_ASSERT(window_thres <= window_width);
|
||||||
|
hw->glitch_filter_chn[filter_idx].filter_chn_window_width = window_width - 1;
|
||||||
|
hw->glitch_filter_chn[filter_idx].filter_chn_window_thres = window_thres - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -467,6 +467,14 @@ config SOC_GPIO_PIN_COUNT
|
|||||||
int
|
int
|
||||||
default 55
|
default 55
|
||||||
|
|
||||||
|
config SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
|
config SOC_GPIO_FLEX_GLITCH_FILTER_NUM
|
||||||
|
int
|
||||||
|
default 8
|
||||||
|
|
||||||
config SOC_GPIO_SUPPORT_PIN_HYS_FILTER
|
config SOC_GPIO_SUPPORT_PIN_HYS_FILTER
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
@ -249,8 +249,6 @@ typedef enum {
|
|||||||
RMT_BASECLK_DEFAULT = SOC_MOD_CLK_PLL_F80M, /*!< RMT source clock default choice is PLL_F80M */
|
RMT_BASECLK_DEFAULT = SOC_MOD_CLK_PLL_F80M, /*!< RMT source clock default choice is PLL_F80M */
|
||||||
} soc_periph_rmt_clk_src_legacy_t;
|
} soc_periph_rmt_clk_src_legacy_t;
|
||||||
|
|
||||||
//////////////////////////////////////////////////Temp Sensor///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////UART/////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////UART/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -509,6 +507,21 @@ typedef enum {
|
|||||||
|
|
||||||
//////////////////////////////////////////////////GPIO Glitch Filter////////////////////////////////////////////////////
|
//////////////////////////////////////////////////GPIO Glitch Filter////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Array initializer for all supported clock sources of Glitch Filter
|
||||||
|
*/
|
||||||
|
#define SOC_GLITCH_FILTER_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_XTAL}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Glitch filter clock source
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GLITCH_FILTER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL clock as the source clock */
|
||||||
|
GLITCH_FILTER_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M clock as the source clock */
|
||||||
|
GLITCH_FILTER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M clock as the default clock choice */
|
||||||
|
} soc_periph_glitch_filter_clk_src_t;
|
||||||
|
|
||||||
///////////////////////////////////////////////////Analog Comparator////////////////////////////////////////////////////
|
///////////////////////////////////////////////////Analog Comparator////////////////////////////////////////////////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -200,8 +200,8 @@
|
|||||||
// ESP32-P4 has 1 GPIO peripheral
|
// ESP32-P4 has 1 GPIO peripheral
|
||||||
#define SOC_GPIO_PORT 1U
|
#define SOC_GPIO_PORT 1U
|
||||||
#define SOC_GPIO_PIN_COUNT 55
|
#define SOC_GPIO_PIN_COUNT 55
|
||||||
// #define SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER 1 //TODO: IDF-7481
|
#define SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER 1
|
||||||
// #define SOC_GPIO_FLEX_GLITCH_FILTER_NUM 8 //TODO: IDF-7481
|
#define SOC_GPIO_FLEX_GLITCH_FILTER_NUM 8
|
||||||
#define SOC_GPIO_SUPPORT_PIN_HYS_FILTER 1
|
#define SOC_GPIO_SUPPORT_PIN_HYS_FILTER 1
|
||||||
|
|
||||||
// GPIO peripheral has the ETM extension
|
// GPIO peripheral has the ETM extension
|
||||||
|
Loading…
x
Reference in New Issue
Block a user