Skip to content

Commit cfca522

Browse files
committed
Merge branch 'feat/support_rmt_on_h4' into 'master'
feat(rmt): support rmt on ESP32-H4 Closes IDF-12402 See merge request espressif/esp-idf!40523
2 parents d1ea452 + d6a9a0f commit cfca522

File tree

29 files changed

+1259
-158
lines changed

29 files changed

+1259
-158
lines changed

components/driver/deprecated/rmt_legacy.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -156,7 +156,7 @@ static void rmt_module_disable(void)
156156
{
157157
RMT_ENTER_CRITICAL();
158158
if (rmt_contex.rmt_module_enabled == true) {
159-
rmt_ll_mem_force_power_off(rmt_contex.hal.regs);
159+
rmt_ll_mem_force_low_power(rmt_contex.hal.regs);
160160
RMT_RCC_ATOMIC() {
161161
rmt_ll_enable_bus_clock(0, false);
162162
}
@@ -257,7 +257,7 @@ esp_err_t rmt_set_mem_pd(rmt_channel_t channel, bool pd_en)
257257
ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR);
258258
RMT_ENTER_CRITICAL();
259259
if (pd_en) {
260-
rmt_ll_mem_force_power_off(rmt_contex.hal.regs);
260+
rmt_ll_mem_force_low_power(rmt_contex.hal.regs);
261261
} else {
262262
rmt_ll_mem_power_by_pmu(rmt_contex.hal.regs);
263263
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
2-
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
1+
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
2+
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
2-
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
1+
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
2+
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |

components/esp_driver_rmt/test_apps/rmt/main/test_rmt_tx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ TEST_CASE("rmt tx gpio switch test", "[rmt]")
708708
printf("install tx channel\r\n");
709709
rmt_channel_handle_t tx_channel = NULL;
710710
TEST_ESP_OK(rmt_new_tx_channel(&tx_channel_cfg, &tx_channel));
711-
printf("install bytes encoder\r\n");
711+
printf("install copy encoder\r\n");
712712
rmt_encoder_handle_t copy_encoder = NULL;
713713
rmt_copy_encoder_config_t copy_encoder_config = {};
714714
TEST_ESP_OK(rmt_new_copy_encoder(&copy_encoder_config, &copy_encoder));

components/hal/esp32/include/hal/rmt_ll.h

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ typedef enum {
4141
RMT_LL_MEM_OWNER_HW = 1,
4242
} rmt_ll_mem_owner_t;
4343

44+
typedef enum {
45+
RMT_LL_MEM_LP_MODE_SHUT_DOWN, // power down memory during low power stage
46+
} rmt_ll_mem_lp_mode_t;
47+
4448
/**
4549
* @brief Enable the bus clock for RMT module
4650
*
@@ -82,17 +86,6 @@ static inline void rmt_ll_reset_register(int group_id)
8286
rmt_ll_reset_register(__VA_ARGS__); \
8387
} while(0)
8488

85-
/**
86-
* @brief Enable clock gate for register and memory
87-
*
88-
* @param dev Peripheral instance address
89-
* @param enable True to enable, False to disable
90-
*/
91-
static inline void rmt_ll_enable_periph_clock(rmt_dev_t *dev, bool enable)
92-
{
93-
dev->conf_ch[0].conf0.clk_en = enable; // register clock gating
94-
}
95-
9689
/**
9790
* @brief Force power on the RMT memory block, regardless of the outside PMU logic
9891
*
@@ -104,11 +97,11 @@ static inline void rmt_ll_mem_force_power_on(rmt_dev_t *dev)
10497
}
10598

10699
/**
107-
* @brief Force power off the RMT memory block, regardless of the outside PMU logic
100+
* @brief Force the RMT memory block into low power mode, regardless of the outside PMU logic
108101
*
109102
* @param dev Peripheral instance address
110103
*/
111-
static inline void rmt_ll_mem_force_power_off(rmt_dev_t *dev)
104+
static inline void rmt_ll_mem_force_low_power(rmt_dev_t *dev)
112105
{
113106
dev->conf_ch[0].conf0.mem_pd = 1;
114107
}
@@ -123,6 +116,18 @@ static inline void rmt_ll_mem_power_by_pmu(rmt_dev_t *dev)
123116
dev->conf_ch[0].conf0.mem_pd = 0;
124117
}
125118

119+
/**
120+
* @brief Set low power mode for RMT memory block
121+
*
122+
* @param dev Peripheral instance address
123+
* @param mode RMT memory low power mode in low power stage
124+
*/
125+
static inline void rmt_ll_mem_set_low_power_mode(rmt_dev_t *dev, rmt_ll_mem_lp_mode_t mode)
126+
{
127+
(void)dev;
128+
HAL_ASSERT(mode == RMT_LL_MEM_LP_MODE_SHUT_DOWN);
129+
}
130+
126131
/**
127132
* @brief Enable APB accessing RMT memory in nonfifo mode
128133
*

components/hal/esp32c3/include/hal/rmt_ll.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ typedef enum {
4747
RMT_LL_MEM_OWNER_HW = 1,
4848
} rmt_ll_mem_owner_t;
4949

50+
typedef enum {
51+
RMT_LL_MEM_LP_MODE_SHUT_DOWN, // power down memory during low power stage
52+
} rmt_ll_mem_lp_mode_t;
53+
5054
/**
5155
* @brief Enable the bus clock for RMT module
5256
*
@@ -85,18 +89,6 @@ static inline void rmt_ll_reset_register(int group_id)
8589
rmt_ll_reset_register(__VA_ARGS__); \
8690
} while(0)
8791

88-
/**
89-
* @brief Enable clock gate for register and memory
90-
*
91-
* @param dev Peripheral instance address
92-
* @param enable True to enable, False to disable
93-
*/
94-
static inline void rmt_ll_enable_periph_clock(rmt_dev_t *dev, bool enable)
95-
{
96-
dev->sys_conf.clk_en = enable; // register clock gating
97-
dev->sys_conf.mem_clk_force_on = enable; // memory clock gating
98-
}
99-
10092
/**
10193
* @brief Force power on the RMT memory block, regardless of the outside PMU logic
10294
*
@@ -109,11 +101,11 @@ static inline void rmt_ll_mem_force_power_on(rmt_dev_t *dev)
109101
}
110102

111103
/**
112-
* @brief Force power off the RMT memory block, regardless of the outside PMU logic
104+
* @brief Force the RMT memory block into low power mode, regardless of the outside PMU logic
113105
*
114106
* @param dev Peripheral instance address
115107
*/
116-
static inline void rmt_ll_mem_force_power_off(rmt_dev_t *dev)
108+
static inline void rmt_ll_mem_force_low_power(rmt_dev_t *dev)
117109
{
118110
dev->sys_conf.mem_force_pd = 1;
119111
dev->sys_conf.mem_force_pu = 0;
@@ -130,6 +122,18 @@ static inline void rmt_ll_mem_power_by_pmu(rmt_dev_t *dev)
130122
dev->sys_conf.mem_force_pu = 0;
131123
}
132124

125+
/**
126+
* @brief Set low power mode for RMT memory block
127+
*
128+
* @param dev Peripheral instance address
129+
* @param mode RMT memory low power mode in low power stage
130+
*/
131+
static inline void rmt_ll_mem_set_low_power_mode(rmt_dev_t *dev, rmt_ll_mem_lp_mode_t mode)
132+
{
133+
(void)dev;
134+
HAL_ASSERT(mode == RMT_LL_MEM_LP_MODE_SHUT_DOWN);
135+
}
136+
133137
/**
134138
* @brief Enable APB accessing RMT memory in nonfifo mode
135139
*

components/hal/esp32c5/include/hal/rmt_ll.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ typedef enum {
4848
RMT_LL_MEM_OWNER_HW = 1,
4949
} rmt_ll_mem_owner_t;
5050

51+
typedef enum {
52+
RMT_LL_MEM_LP_MODE_SHUT_DOWN, // power down memory during low power stage
53+
} rmt_ll_mem_lp_mode_t;
54+
5155
/**
5256
* @brief Enable the bus clock for RMT module
5357
*
@@ -72,18 +76,6 @@ static inline void rmt_ll_reset_register(int group_id)
7276
PCR.rmt_conf.rmt_rst_en = 0;
7377
}
7478

75-
/**
76-
* @brief Enable clock gate for register and memory
77-
*
78-
* @param dev Peripheral instance address
79-
* @param enable True to enable, False to disable
80-
*/
81-
static inline void rmt_ll_enable_periph_clock(rmt_dev_t *dev, bool enable)
82-
{
83-
dev->sys_conf.clk_en = enable; // register clock gating
84-
dev->sys_conf.mem_clk_force_on = enable; // memory clock gating
85-
}
86-
8779
/**
8880
* @brief Force power on the RMT memory block, regardless of the outside PMU logic
8981
*
@@ -96,11 +88,11 @@ static inline void rmt_ll_mem_force_power_on(rmt_dev_t *dev)
9688
}
9789

9890
/**
99-
* @brief Force power off the RMT memory block, regardless of the outside PMU logic
91+
* @brief Force the RMT memory block into low power mode, regardless of the outside PMU logic
10092
*
10193
* @param dev Peripheral instance address
10294
*/
103-
static inline void rmt_ll_mem_force_power_off(rmt_dev_t *dev)
95+
static inline void rmt_ll_mem_force_low_power(rmt_dev_t *dev)
10496
{
10597
PCR.rmt_pd_ctrl.rmt_mem_force_pd = 1;
10698
PCR.rmt_pd_ctrl.rmt_mem_force_pu = 0;
@@ -117,6 +109,18 @@ static inline void rmt_ll_mem_power_by_pmu(rmt_dev_t *dev)
117109
PCR.rmt_pd_ctrl.rmt_mem_force_pu = 0;
118110
}
119111

112+
/**
113+
* @brief Set low power mode for RMT memory block
114+
*
115+
* @param dev Peripheral instance address
116+
* @param mode RMT memory low power mode in low power stage
117+
*/
118+
static inline void rmt_ll_mem_set_low_power_mode(rmt_dev_t *dev, rmt_ll_mem_lp_mode_t mode)
119+
{
120+
(void)dev;
121+
HAL_ASSERT(mode == RMT_LL_MEM_LP_MODE_SHUT_DOWN);
122+
}
123+
120124
/**
121125
* @brief Enable APB accessing RMT memory in nonfifo mode
122126
*

components/hal/esp32c6/include/hal/rmt_ll.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ typedef enum {
4848
RMT_LL_MEM_OWNER_HW = 1,
4949
} rmt_ll_mem_owner_t;
5050

51+
typedef enum {
52+
RMT_LL_MEM_LP_MODE_SHUT_DOWN, // power down memory during low power stage
53+
} rmt_ll_mem_lp_mode_t;
54+
5155
/**
5256
* @brief Enable the bus clock for RMT module
5357
*
@@ -72,18 +76,6 @@ static inline void rmt_ll_reset_register(int group_id)
7276
PCR.rmt_conf.rmt_rst_en = 0;
7377
}
7478

75-
/**
76-
* @brief Enable clock gate for register and memory
77-
*
78-
* @param dev Peripheral instance address
79-
* @param enable True to enable, False to disable
80-
*/
81-
static inline void rmt_ll_enable_periph_clock(rmt_dev_t *dev, bool enable)
82-
{
83-
dev->sys_conf.clk_en = enable; // register clock gating
84-
dev->sys_conf.mem_clk_force_on = enable; // memory clock gating
85-
}
86-
8779
/**
8880
* @brief Force power on the RMT memory block, regardless of the outside PMU logic
8981
*
@@ -96,11 +88,11 @@ static inline void rmt_ll_mem_force_power_on(rmt_dev_t *dev)
9688
}
9789

9890
/**
99-
* @brief Force power off the RMT memory block, regardless of the outside PMU logic
91+
* @brief Force the RMT memory block into low power mode, regardless of the outside PMU logic
10092
*
10193
* @param dev Peripheral instance address
10294
*/
103-
static inline void rmt_ll_mem_force_power_off(rmt_dev_t *dev)
95+
static inline void rmt_ll_mem_force_low_power(rmt_dev_t *dev)
10496
{
10597
dev->sys_conf.mem_force_pd = 1;
10698
dev->sys_conf.mem_force_pu = 0;
@@ -117,6 +109,18 @@ static inline void rmt_ll_mem_power_by_pmu(rmt_dev_t *dev)
117109
dev->sys_conf.mem_force_pu = 0;
118110
}
119111

112+
/**
113+
* @brief Set low power mode for RMT memory block
114+
*
115+
* @param dev Peripheral instance address
116+
* @param mode RMT memory low power mode in low power stage
117+
*/
118+
static inline void rmt_ll_mem_set_low_power_mode(rmt_dev_t *dev, rmt_ll_mem_lp_mode_t mode)
119+
{
120+
(void)dev;
121+
HAL_ASSERT(mode == RMT_LL_MEM_LP_MODE_SHUT_DOWN);
122+
}
123+
120124
/**
121125
* @brief Enable APB accessing RMT memory in nonfifo mode
122126
*

components/hal/esp32h2/include/hal/rmt_ll.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ typedef enum {
4848
RMT_LL_MEM_OWNER_HW = 1,
4949
} rmt_ll_mem_owner_t;
5050

51+
typedef enum {
52+
RMT_LL_MEM_LP_MODE_SHUT_DOWN, // power down memory during low power stage
53+
} rmt_ll_mem_lp_mode_t;
54+
5155
/**
5256
* @brief Enable the bus clock for RMT module
5357
*
@@ -72,18 +76,6 @@ static inline void rmt_ll_reset_register(int group_id)
7276
PCR.rmt_conf.rmt_rst_en = 0;
7377
}
7478

75-
/**
76-
* @brief Enable clock gate for register and memory
77-
*
78-
* @param dev Peripheral instance address
79-
* @param enable True to enable, False to disable
80-
*/
81-
static inline void rmt_ll_enable_periph_clock(rmt_dev_t *dev, bool enable)
82-
{
83-
dev->sys_conf.clk_en = enable; // register clock gating
84-
dev->sys_conf.mem_clk_force_on = enable; // memory clock gating
85-
}
86-
8779
/**
8880
* @brief Force power on the RMT memory block, regardless of the outside PMU logic
8981
*
@@ -96,11 +88,11 @@ static inline void rmt_ll_mem_force_power_on(rmt_dev_t *dev)
9688
}
9789

9890
/**
99-
* @brief Force power off the RMT memory block, regardless of the outside PMU logic
91+
* @brief Force the RMT memory block into low power mode, regardless of the outside PMU logic
10092
*
10193
* @param dev Peripheral instance address
10294
*/
103-
static inline void rmt_ll_mem_force_power_off(rmt_dev_t *dev)
95+
static inline void rmt_ll_mem_force_low_power(rmt_dev_t *dev)
10496
{
10597
dev->sys_conf.mem_force_pd = 1;
10698
dev->sys_conf.mem_force_pu = 0;
@@ -117,6 +109,18 @@ static inline void rmt_ll_mem_power_by_pmu(rmt_dev_t *dev)
117109
dev->sys_conf.mem_force_pu = 0;
118110
}
119111

112+
/**
113+
* @brief Set low power mode for RMT memory block
114+
*
115+
* @param dev Peripheral instance address
116+
* @param mode RMT memory low power mode in low power stage
117+
*/
118+
static inline void rmt_ll_mem_set_low_power_mode(rmt_dev_t *dev, rmt_ll_mem_lp_mode_t mode)
119+
{
120+
(void)dev;
121+
HAL_ASSERT(mode == RMT_LL_MEM_LP_MODE_SHUT_DOWN);
122+
}
123+
120124
/**
121125
* @brief Enable APB accessing RMT memory in nonfifo mode
122126
*

0 commit comments

Comments
 (0)