From e32a8c097830c68123c092820b739bcd78af58c2 Mon Sep 17 00:00:00 2001 From: Chen Jichang Date: Thu, 12 Jun 2025 18:18:30 +0800 Subject: [PATCH] feat(rmt): allow to set init level before any tx transmission Closes https://github.com/espressif/esp-idf/issues/16068 --- components/driver/rmt/include/driver/rmt_tx.h | 1 + components/driver/rmt/rmt_tx.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/driver/rmt/include/driver/rmt_tx.h b/components/driver/rmt/include/driver/rmt_tx.h index 1b9885e876..1c5cd0dbd8 100644 --- a/components/driver/rmt/include/driver/rmt_tx.h +++ b/components/driver/rmt/include/driver/rmt_tx.h @@ -44,6 +44,7 @@ typedef struct { uint32_t with_dma: 1; /*!< If set, the driver will allocate an RMT channel with DMA capability */ uint32_t io_loop_back: 1; /*!< The signal output from the GPIO will be fed to the input path as well */ uint32_t io_od_mode: 1; /*!< Configure the GPIO as open-drain mode */ + uint32_t init_level: 1; /*!< Set the initial level of the RMT channel signal */ } flags; /*!< TX channel config flags */ } rmt_tx_channel_config_t; diff --git a/components/driver/rmt/rmt_tx.c b/components/driver/rmt/rmt_tx.c index bb659c8801..959b9f8eac 100644 --- a/components/driver/rmt/rmt_tx.c +++ b/components/driver/rmt/rmt_tx.c @@ -296,7 +296,7 @@ esp_err_t rmt_new_tx_channel(const rmt_tx_channel_config_t *config, rmt_channel_ // disable carrier modulation by default, can reenable by `rmt_apply_carrier()` rmt_ll_tx_enable_carrier_modulation(hal->regs, channel_id, false); // idle level is determined by register value - rmt_ll_tx_fix_idle_level(hal->regs, channel_id, 0, true); + rmt_ll_tx_fix_idle_level(hal->regs, channel_id, config->flags.init_level, true); // always enable tx wrap, both DMA mode and ping-pong mode rely this feature rmt_ll_tx_enable_wrap(hal->regs, channel_id, true);