mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 13:14:32 +02:00
Merge branch 'feature/etm_support_h2' into 'master'
etm: add basic driver on esp32h2 Closes IDF-6225 See merge request espressif/esp-idf!22246
This commit is contained in:
@@ -1,2 +1,2 @@
|
|||||||
| Supported Targets | ESP32-C6 |
|
| Supported Targets | ESP32-C6 | ESP32-H2 |
|
||||||
| ----------------- | -------- |
|
| ----------------- | -------- | -------- |
|
||||||
|
@@ -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
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -436,7 +436,7 @@ TEST_CASE("gptimer_start_stop_by_etm_task", "[etm]")
|
|||||||
uint64_t cur_count_val = 0;
|
uint64_t cur_count_val = 0;
|
||||||
TEST_ESP_OK(gptimer_get_raw_count(gptimer, &cur_count_val));
|
TEST_ESP_OK(gptimer_get_raw_count(gptimer, &cur_count_val));
|
||||||
printf("cur_count_val: %llu\r\n", cur_count_val);
|
printf("cur_count_val: %llu\r\n", cur_count_val);
|
||||||
TEST_ASSERT_UINT_WITHIN(900, 500000, cur_count_val);
|
TEST_ASSERT_UINT_WITHIN(1000, 500000, cur_count_val);
|
||||||
|
|
||||||
// trigger an neg-edge, this should stop the gptimer
|
// trigger an neg-edge, this should stop the gptimer
|
||||||
TEST_ESP_OK(gpio_set_level(input_gpio, 0));
|
TEST_ESP_OK(gpio_set_level(input_gpio, 0));
|
||||||
|
@@ -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
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -105,7 +105,7 @@ TEST_CASE("esp_timer_etm_event", "[etm]")
|
|||||||
TEST_ESP_OK(esp_etm_channel_connect(etm_channel_a, esp_timer_event, gpio_task));
|
TEST_ESP_OK(esp_etm_channel_connect(etm_channel_a, esp_timer_event, gpio_task));
|
||||||
TEST_ESP_OK(esp_etm_channel_enable(etm_channel_a));
|
TEST_ESP_OK(esp_etm_channel_enable(etm_channel_a));
|
||||||
|
|
||||||
printf("create a periodic esp_timer\r\b");
|
printf("create a periodic esp_timer\r\n");
|
||||||
const esp_timer_create_args_t periodic_timer_args = {
|
const esp_timer_create_args_t periodic_timer_args = {
|
||||||
.callback = periodic_timer_callback,
|
.callback = periodic_timer_callback,
|
||||||
.name = "periodic"
|
.name = "periodic"
|
||||||
|
@@ -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
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -6,6 +6,7 @@ from pytest_embedded import Dut
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.esp32c6
|
@pytest.mark.esp32c6
|
||||||
|
@pytest.mark.esp32h2
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'config',
|
'config',
|
||||||
|
@@ -55,6 +55,8 @@ static inline uint32_t periph_ll_get_clk_en_mask(periph_module_t periph)
|
|||||||
return PCR_GDMA_CLK_EN;
|
return PCR_GDMA_CLK_EN;
|
||||||
case PERIPH_MCPWM0_MODULE:
|
case PERIPH_MCPWM0_MODULE:
|
||||||
return PCR_PWM_CLK_EN;
|
return PCR_PWM_CLK_EN;
|
||||||
|
case PERIPH_ETM_MODULE:
|
||||||
|
return PCR_ETM_CLK_EN;
|
||||||
case PERIPH_AES_MODULE:
|
case PERIPH_AES_MODULE:
|
||||||
return PCR_AES_CLK_EN;
|
return PCR_AES_CLK_EN;
|
||||||
case PERIPH_SHA_MODULE:
|
case PERIPH_SHA_MODULE:
|
||||||
@@ -124,6 +126,8 @@ static inline uint32_t periph_ll_get_rst_en_mask(periph_module_t periph, bool en
|
|||||||
return PCR_GDMA_RST_EN;
|
return PCR_GDMA_RST_EN;
|
||||||
case PERIPH_MCPWM0_MODULE:
|
case PERIPH_MCPWM0_MODULE:
|
||||||
return PCR_PWM_RST_EN;
|
return PCR_PWM_RST_EN;
|
||||||
|
case PERIPH_ETM_MODULE:
|
||||||
|
return PCR_ETM_RST_EN;
|
||||||
case PERIPH_AES_MODULE:
|
case PERIPH_AES_MODULE:
|
||||||
if (enable == true) {
|
if (enable == true) {
|
||||||
// Clear reset on digital signature, otherwise AES unit is held in reset also.
|
// Clear reset on digital signature, otherwise AES unit is held in reset also.
|
||||||
@@ -216,6 +220,8 @@ static uint32_t periph_ll_get_clk_en_reg(periph_module_t periph)
|
|||||||
return PCR_GDMA_CONF_REG;
|
return PCR_GDMA_CONF_REG;
|
||||||
case PERIPH_MCPWM0_MODULE:
|
case PERIPH_MCPWM0_MODULE:
|
||||||
return PCR_PWM_CONF_REG;
|
return PCR_PWM_CONF_REG;
|
||||||
|
case PERIPH_ETM_MODULE:
|
||||||
|
return PCR_ETM_CONF_REG;
|
||||||
case PERIPH_AES_MODULE:
|
case PERIPH_AES_MODULE:
|
||||||
return PCR_AES_CONF_REG;
|
return PCR_AES_CONF_REG;
|
||||||
case PERIPH_SHA_MODULE:
|
case PERIPH_SHA_MODULE:
|
||||||
@@ -271,6 +277,8 @@ static uint32_t periph_ll_get_rst_en_reg(periph_module_t periph)
|
|||||||
return PCR_GDMA_CONF_REG;
|
return PCR_GDMA_CONF_REG;
|
||||||
case PERIPH_MCPWM0_MODULE:
|
case PERIPH_MCPWM0_MODULE:
|
||||||
return PCR_PWM_CONF_REG;
|
return PCR_PWM_CONF_REG;
|
||||||
|
case PERIPH_ETM_MODULE:
|
||||||
|
return PCR_ETM_CONF_REG;
|
||||||
case PERIPH_AES_MODULE:
|
case PERIPH_AES_MODULE:
|
||||||
return PCR_AES_CONF_REG;
|
return PCR_AES_CONF_REG;
|
||||||
case PERIPH_SHA_MODULE:
|
case PERIPH_SHA_MODULE:
|
||||||
|
103
components/hal/esp32h2/include/hal/etm_ll.h
Normal file
103
components/hal/esp32h2/include/hal/etm_ll.h
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Note that most of the register operations in this layer are non-atomic operations.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "hal/assert.h"
|
||||||
|
#include "hal/misc.h"
|
||||||
|
#include "soc/soc_etm_struct.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the clock for ETM module
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param enable true to enable, false to disable
|
||||||
|
*/
|
||||||
|
static inline void etm_ll_enable_clock(soc_etm_dev_t *hw, bool enable)
|
||||||
|
{
|
||||||
|
hw->clk_en.clk_en = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ETM channel
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param chan Channel ID
|
||||||
|
*/
|
||||||
|
static inline void etm_ll_enable_channel(soc_etm_dev_t *hw, uint32_t chan)
|
||||||
|
{
|
||||||
|
if (chan < 32) {
|
||||||
|
hw->ch_ena_ad0_set.val = 1 << chan;
|
||||||
|
} else {
|
||||||
|
hw->ch_ena_ad1_set.val = 1 << (chan - 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ETM channel
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param chan Channel ID
|
||||||
|
*/
|
||||||
|
static inline void etm_ll_disable_channel(soc_etm_dev_t *hw, uint32_t chan)
|
||||||
|
{
|
||||||
|
if (chan < 32) {
|
||||||
|
hw->ch_ena_ad0_clr.val = 1 << chan;
|
||||||
|
} else {
|
||||||
|
hw->ch_ena_ad1_clr.val = 1 << (chan - 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the ETM channel is enabled or not
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param chan Channel ID
|
||||||
|
* @return true if the channel is enabled, false otherwise
|
||||||
|
*/
|
||||||
|
static inline bool etm_ll_is_channel_enabled(soc_etm_dev_t *hw, uint32_t chan)
|
||||||
|
{
|
||||||
|
if (chan < 32) {
|
||||||
|
return hw->ch_ena_ad0.val & (1 << chan);
|
||||||
|
} else {
|
||||||
|
return hw->ch_ena_ad1.val & (1 << (chan - 32));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the input event for the ETM channel
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param chan Channel ID
|
||||||
|
* @param event Event ID
|
||||||
|
*/
|
||||||
|
static inline void etm_ll_channel_set_event(soc_etm_dev_t *hw, uint32_t chan, uint32_t event)
|
||||||
|
{
|
||||||
|
hw->channel[chan].evt_id.evt_id = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the output task for the ETM channel
|
||||||
|
*
|
||||||
|
* @param hw ETM register base address
|
||||||
|
* @param chan Channel ID
|
||||||
|
* @param task Task ID
|
||||||
|
*/
|
||||||
|
static inline void etm_ll_channel_set_task(soc_etm_dev_t *hw, uint32_t chan, uint32_t task)
|
||||||
|
{
|
||||||
|
hw->channel[chan].task_id.task_id = task;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
119
components/hal/esp32h2/include/hal/gpio_etm_ll.h
Normal file
119
components/hal/esp32h2/include/hal/gpio_etm_ll.h
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Note that most of the register operations in this layer are non-atomic operations.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "hal/assert.h"
|
||||||
|
#include "hal/misc.h"
|
||||||
|
#include "soc/gpio_ext_struct.h"
|
||||||
|
#include "soc/soc_etm_source.h"
|
||||||
|
|
||||||
|
#define GPIO_LL_ETM_EVENT_ID_POS_EDGE(ch) (GPIO_EVT_CH0_RISE_EDGE + (ch))
|
||||||
|
#define GPIO_LL_ETM_EVENT_ID_NEG_EDGE(ch) (GPIO_EVT_CH0_FALL_EDGE + (ch))
|
||||||
|
#define GPIO_LL_ETM_EVENT_ID_ANY_EDGE(ch) (GPIO_EVT_CH0_ANY_EDGE + (ch))
|
||||||
|
|
||||||
|
#define GPIO_LL_ETM_TASK_ID_SET(ch) (GPIO_TASK_CH0_SET + (ch))
|
||||||
|
#define GPIO_LL_ETM_TASK_ID_CLR(ch) (GPIO_TASK_CH0_CLEAR + (ch))
|
||||||
|
#define GPIO_LL_ETM_TASK_ID_TOG(ch) (GPIO_TASK_CH0_TOGGLE + (ch))
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set which GPIO to be bounded to the event channel
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param chan Channel number
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_etm_event_channel_set_gpio(gpio_etm_dev_t *dev, uint32_t chan, uint32_t gpio_num)
|
||||||
|
{
|
||||||
|
dev->etm_event_chn_cfg[chan].etm_ch0_event_sel = gpio_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Wether to enable the event channel
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param chan Channel number
|
||||||
|
* @param enable True to enable, false to disable
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_etm_enable_event_channel(gpio_etm_dev_t *dev, uint32_t chan, bool enable)
|
||||||
|
{
|
||||||
|
dev->etm_event_chn_cfg[chan].etm_ch0_event_en = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set which GPIO to be bounded to the task channel
|
||||||
|
*
|
||||||
|
* @note One channel can be bounded to multiple different GPIOs
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param chan Channel number
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_etm_gpio_set_task_channel(gpio_etm_dev_t *dev, uint32_t gpio_num, uint32_t chan)
|
||||||
|
{
|
||||||
|
int g_p = gpio_num / 4;
|
||||||
|
int g_idx = gpio_num % 4;
|
||||||
|
uint32_t reg_val = dev->etm_task_pn_cfg[g_p].val;
|
||||||
|
reg_val &= ~(0x07 << (g_idx * 8 + 1));
|
||||||
|
reg_val |= ((chan & 0x07) << (g_idx * 8 + 1));
|
||||||
|
dev->etm_task_pn_cfg[g_p].val = reg_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Wether to enable the GPIO to be managed by the task channel
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
* @param enable True to enable, false to disable
|
||||||
|
*/
|
||||||
|
static inline void gpio_ll_etm_enable_task_gpio(gpio_etm_dev_t *dev, uint32_t gpio_num, bool enable)
|
||||||
|
{
|
||||||
|
int g_p = gpio_num / 4;
|
||||||
|
int g_idx = gpio_num % 4;
|
||||||
|
uint32_t reg_val = dev->etm_task_pn_cfg[g_p].val;
|
||||||
|
reg_val &= ~(0x01 << (g_idx * 8));
|
||||||
|
reg_val |= ((enable & 0x01) << (g_idx * 8));
|
||||||
|
dev->etm_task_pn_cfg[g_p].val = reg_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether a GPIO has been enabled and managed by a task channel
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
* @return True if enabled, false otherwise
|
||||||
|
*/
|
||||||
|
static inline bool gpio_ll_etm_is_task_gpio_enabled(gpio_etm_dev_t *dev, uint32_t gpio_num)
|
||||||
|
{
|
||||||
|
int g_p = gpio_num / 4;
|
||||||
|
int g_idx = gpio_num % 4;
|
||||||
|
return dev->etm_task_pn_cfg[g_p].val & (0x01 << (g_idx * 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the channel number that the GPIO is bounded to
|
||||||
|
*
|
||||||
|
* @param dev Register base address
|
||||||
|
* @param gpio_num GPIO number
|
||||||
|
* @return GPIO ETM Task channel number
|
||||||
|
*/
|
||||||
|
static inline uint32_t gpio_ll_etm_gpio_get_task_channel(gpio_etm_dev_t *dev, uint32_t gpio_num)
|
||||||
|
{
|
||||||
|
int g_p = gpio_num / 4;
|
||||||
|
int g_idx = gpio_num % 4;
|
||||||
|
return (dev->etm_task_pn_cfg[g_p].val >> (g_idx * 8 + 1)) & 0x07;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@@ -59,6 +59,10 @@ config SOC_SDM_SUPPORTED
|
|||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config SOC_ETM_SUPPORTED
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
config SOC_RMT_SUPPORTED
|
config SOC_RMT_SUPPORTED
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
@@ -259,6 +263,14 @@ config SOC_GDMA_SUPPORT_ETM
|
|||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config SOC_ETM_GROUPS
|
||||||
|
int
|
||||||
|
default 1
|
||||||
|
|
||||||
|
config SOC_ETM_CHANNELS_PER_GROUP
|
||||||
|
int
|
||||||
|
default 50
|
||||||
|
|
||||||
config SOC_GPIO_PORT
|
config SOC_GPIO_PORT
|
||||||
int
|
int
|
||||||
default 1
|
default 1
|
||||||
@@ -267,6 +279,18 @@ config SOC_GPIO_PIN_COUNT
|
|||||||
int
|
int
|
||||||
default 28
|
default 28
|
||||||
|
|
||||||
|
config SOC_GPIO_SUPPORT_ETM
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
|
config SOC_GPIO_ETM_EVENTS_PER_GROUP
|
||||||
|
int
|
||||||
|
default 8
|
||||||
|
|
||||||
|
config SOC_GPIO_ETM_TASKS_PER_GROUP
|
||||||
|
int
|
||||||
|
default 8
|
||||||
|
|
||||||
config SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP
|
config SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
@@ -715,6 +739,10 @@ config SOC_TIMER_GROUP_TOTAL_TIMERS
|
|||||||
int
|
int
|
||||||
default 2
|
default 2
|
||||||
|
|
||||||
|
config SOC_TIMER_SUPPORT_ETM
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
config SOC_TWAI_CONTROLLER_NUM
|
config SOC_TWAI_CONTROLLER_NUM
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
@@ -39,6 +39,7 @@ typedef enum {
|
|||||||
PERIPH_DS_MODULE,
|
PERIPH_DS_MODULE,
|
||||||
PERIPH_GDMA_MODULE,
|
PERIPH_GDMA_MODULE,
|
||||||
PERIPH_MCPWM0_MODULE,
|
PERIPH_MCPWM0_MODULE,
|
||||||
|
PERIPH_ETM_MODULE,
|
||||||
PERIPH_SYSTIMER_MODULE,
|
PERIPH_SYSTIMER_MODULE,
|
||||||
PERIPH_SARADC_MODULE,
|
PERIPH_SARADC_MODULE,
|
||||||
PERIPH_MODULE_MAX
|
PERIPH_MODULE_MAX
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
#define SOC_RTC_MEM_SUPPORTED 1
|
#define SOC_RTC_MEM_SUPPORTED 1
|
||||||
#define SOC_I2S_SUPPORTED 1
|
#define SOC_I2S_SUPPORTED 1
|
||||||
#define SOC_SDM_SUPPORTED 1
|
#define SOC_SDM_SUPPORTED 1
|
||||||
|
#define SOC_ETM_SUPPORTED 1
|
||||||
#define SOC_RMT_SUPPORTED 1
|
#define SOC_RMT_SUPPORTED 1
|
||||||
// #define SOC_GPSPI_SUPPORTED 1 // TODO: IDF-6264
|
// #define SOC_GPSPI_SUPPORTED 1 // TODO: IDF-6264
|
||||||
#define SOC_LEDC_SUPPORTED 1
|
#define SOC_LEDC_SUPPORTED 1
|
||||||
@@ -147,11 +148,20 @@
|
|||||||
#define SOC_GDMA_PAIRS_PER_GROUP (3) // Number of GDMA pairs in each group
|
#define SOC_GDMA_PAIRS_PER_GROUP (3) // Number of GDMA pairs in each group
|
||||||
#define SOC_GDMA_SUPPORT_ETM (1) // Support ETM submodule
|
#define SOC_GDMA_SUPPORT_ETM (1) // Support ETM submodule
|
||||||
|
|
||||||
|
/*-------------------------- ETM CAPS --------------------------------------*/
|
||||||
|
#define SOC_ETM_GROUPS 1U // Number of ETM groups
|
||||||
|
#define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group
|
||||||
|
|
||||||
/*-------------------------- GPIO CAPS ---------------------------------------*/
|
/*-------------------------- GPIO CAPS ---------------------------------------*/
|
||||||
// ESP32-H2 has 1 GPIO peripheral
|
// ESP32-H2 has 1 GPIO peripheral
|
||||||
#define SOC_GPIO_PORT (1U)
|
#define SOC_GPIO_PORT (1U)
|
||||||
#define SOC_GPIO_PIN_COUNT (28)
|
#define SOC_GPIO_PIN_COUNT (28)
|
||||||
|
|
||||||
|
// GPIO peripheral has the ETM extension
|
||||||
|
#define SOC_GPIO_SUPPORT_ETM 1
|
||||||
|
#define SOC_GPIO_ETM_EVENTS_PER_GROUP 8
|
||||||
|
#define SOC_GPIO_ETM_TASKS_PER_GROUP 8
|
||||||
|
|
||||||
// Target has no full LP IO subsystem, GPIO7~14 remain LP function (powered by VDD3V3_LP, and can be used as deep-sleep wakeup pins)
|
// Target has no full LP IO subsystem, GPIO7~14 remain LP function (powered by VDD3V3_LP, and can be used as deep-sleep wakeup pins)
|
||||||
|
|
||||||
// GPIO7~14 on ESP32H2 can support chip deep sleep wakeup
|
// GPIO7~14 on ESP32H2 can support chip deep sleep wakeup
|
||||||
@@ -348,7 +358,7 @@
|
|||||||
#define SOC_TIMER_GROUP_SUPPORT_PLL_F48M (1)
|
#define SOC_TIMER_GROUP_SUPPORT_PLL_F48M (1)
|
||||||
// #define SOC_TIMER_GROUP_SUPPORT_RC_FAST (1) // TODO: IDF-6265
|
// #define SOC_TIMER_GROUP_SUPPORT_RC_FAST (1) // TODO: IDF-6265
|
||||||
#define SOC_TIMER_GROUP_TOTAL_TIMERS (2)
|
#define SOC_TIMER_GROUP_TOTAL_TIMERS (2)
|
||||||
// #define SOC_TIMER_SUPPORT_ETM (1)
|
#define SOC_TIMER_SUPPORT_ETM (1)
|
||||||
|
|
||||||
// TODO: IDF-6217 (Copy from esp32c6, need check)
|
// TODO: IDF-6217 (Copy from esp32c6, need check)
|
||||||
/*-------------------------- TWAI CAPS ---------------------------------------*/
|
/*-------------------------- TWAI CAPS ---------------------------------------*/
|
||||||
|
@@ -44,7 +44,9 @@ PROVIDE ( HMAC = 0x6008D000 );
|
|||||||
PROVIDE ( IO_MUX = 0x60090000 );
|
PROVIDE ( IO_MUX = 0x60090000 );
|
||||||
PROVIDE ( GPIO = 0x60091000 );
|
PROVIDE ( GPIO = 0x60091000 );
|
||||||
PROVIDE ( GPIO_EXT = 0x60091f00 );
|
PROVIDE ( GPIO_EXT = 0x60091f00 );
|
||||||
PROVIDE ( SDM = 0x60091f00 ); /*ESP32H2-TODO*/
|
PROVIDE ( SDM = 0x60091f00 );
|
||||||
|
PROVIDE ( GLITCH_FILTER = 0x60091f30 );
|
||||||
|
PROVIDE ( GPIO_ETM = 0x60091f60 );
|
||||||
|
|
||||||
PROVIDE ( MEM_ACS_MONITOR = 0x60092000 );
|
PROVIDE ( MEM_ACS_MONITOR = 0x60092000 );
|
||||||
PROVIDE ( PAU = 0x60093000 );
|
PROVIDE ( PAU = 0x60093000 );
|
||||||
|
@@ -77,7 +77,6 @@ api-reference/peripherals/usb_device
|
|||||||
api-reference/peripherals/sdspi_host
|
api-reference/peripherals/sdspi_host
|
||||||
api-reference/peripherals/dac
|
api-reference/peripherals/dac
|
||||||
api-reference/peripherals/spi_slave
|
api-reference/peripherals/spi_slave
|
||||||
api-reference/peripherals/etm
|
|
||||||
api-reference/peripherals/i2s
|
api-reference/peripherals/i2s
|
||||||
api-reference/peripherals/touch_element
|
api-reference/peripherals/touch_element
|
||||||
api-reference/peripherals/lcd
|
api-reference/peripherals/lcd
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
| Supported Targets | ESP32-C6 |
|
| Supported Targets | ESP32-C6 | ESP32-H2 |
|
||||||
| ----------------- | -------- |
|
| ----------------- | -------- | -------- |
|
||||||
|
|
||||||
# HC-SR04 Example based on GPTimer Capture and ETM
|
# HC-SR04 Example based on GPTimer Capture and ETM
|
||||||
|
|
||||||
|
@@ -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
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -6,6 +6,7 @@ from pytest_embedded import Dut
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.esp32c6
|
@pytest.mark.esp32c6
|
||||||
|
@pytest.mark.esp32h2
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
def test_gptimer_capture(dut: Dut) -> None:
|
def test_gptimer_capture(dut: Dut) -> None:
|
||||||
dut.expect_exact('Configure trig gpio')
|
dut.expect_exact('Configure trig gpio')
|
||||||
|
Reference in New Issue
Block a user