diff --git a/components/esp_driver_rmt/src/rmt_rx.c b/components/esp_driver_rmt/src/rmt_rx.c index a169a8720a..a7da1a288f 100644 --- a/components/esp_driver_rmt/src/rmt_rx.c +++ b/components/esp_driver_rmt/src/rmt_rx.c @@ -70,7 +70,8 @@ static esp_err_t rmt_rx_init_dma_link(rmt_rx_channel_t *rx_channel, const rmt_rx gdma_rx_event_callbacks_t cbs = { .on_recv_done = rmt_dma_rx_one_block_cb, }; - gdma_register_rx_event_callbacks(rx_channel->base.dma_chan, &cbs, rx_channel); + // register the DMA callbacks may fail if the interrupt service can not be installed successfully + ESP_RETURN_ON_ERROR(gdma_register_rx_event_callbacks(rx_channel->base.dma_chan, &cbs, rx_channel), TAG, "register DMA callbacks failed"); return ESP_OK; } #endif // SOC_RMT_SUPPORT_DMA diff --git a/components/esp_driver_rmt/src/rmt_tx.c b/components/esp_driver_rmt/src/rmt_tx.c index 9d3074c702..2b3478967f 100644 --- a/components/esp_driver_rmt/src/rmt_tx.c +++ b/components/esp_driver_rmt/src/rmt_tx.c @@ -92,7 +92,8 @@ static esp_err_t rmt_tx_init_dma_link(rmt_tx_channel_t *tx_channel, const rmt_tx gdma_tx_event_callbacks_t cbs = { .on_trans_eof = rmt_dma_tx_eof_cb, }; - gdma_register_tx_event_callbacks(tx_channel->base.dma_chan, &cbs, tx_channel); + // register the DMA callbacks may fail if the interrupt service can not be installed successfully + ESP_RETURN_ON_ERROR(gdma_register_tx_event_callbacks(tx_channel->base.dma_chan, &cbs, tx_channel), TAG, "register DMA callbacks failed"); return ESP_OK; } #endif // SOC_RMT_SUPPORT_DMA diff --git a/components/hal/esp32/include/hal/rmt_ll.h b/components/hal/esp32/include/hal/rmt_ll.h index 97a9267fcd..4e49d01f5f 100644 --- a/components/hal/esp32/include/hal/rmt_ll.h +++ b/components/hal/esp32/include/hal/rmt_ll.h @@ -485,7 +485,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) diff --git a/components/hal/esp32c3/include/hal/rmt_ll.h b/components/hal/esp32c3/include/hal/rmt_ll.h index b1d8acdc75..0bfe6d6609 100644 --- a/components/hal/esp32c3/include/hal/rmt_ll.h +++ b/components/hal/esp32c3/include/hal/rmt_ll.h @@ -427,7 +427,7 @@ static inline void rmt_ll_tx_set_carrier_level(rmt_dev_t *dev, uint32_t channel, * * @param dev Peripheral instance address * @param channel RMT TX channel number - * @param enable True to output carrier signal in all RMT state, False to only ouput carrier signal for effective data + * @param enable True to output carrier signal in all RMT state, False to only output carrier signal for effective data */ static inline void rmt_ll_tx_enable_carrier_always_on(rmt_dev_t *dev, uint32_t channel, bool enable) { @@ -658,7 +658,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) diff --git a/components/hal/esp32c5/include/hal/rmt_ll.h b/components/hal/esp32c5/include/hal/rmt_ll.h index f62639604c..b4b0e32f8a 100644 --- a/components/hal/esp32c5/include/hal/rmt_ll.h +++ b/components/hal/esp32c5/include/hal/rmt_ll.h @@ -13,7 +13,6 @@ #include #include #include -#include "sdkconfig.h" // TODO: [ESP32C5] IDF-8726 #include "hal/misc.h" #include "hal/assert.h" #include "hal/rmt_types.h" @@ -24,8 +23,6 @@ extern "C" { #endif -#if CONFIG_IDF_TARGET_ESP32C5_BETA3_VERSION - #define RMT_LL_EVENT_TX_DONE(channel) (1 << (channel)) #define RMT_LL_EVENT_TX_THRES(channel) (1 << ((channel) + 8)) #define RMT_LL_EVENT_TX_LOOP_END(channel) (1 << ((channel) + 12)) @@ -436,7 +433,7 @@ static inline void rmt_ll_tx_set_carrier_level(rmt_dev_t *dev, uint32_t channel, * * @param dev Peripheral instance address * @param channel RMT TX channel number - * @param enable True to output carrier signal in all RMT state, False to only ouput carrier signal for effective data + * @param enable True to output carrier signal in all RMT state, False to only output carrier signal for effective data */ static inline void rmt_ll_tx_enable_carrier_always_on(rmt_dev_t *dev, uint32_t channel, bool enable) { @@ -667,7 +664,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) @@ -883,8 +880,6 @@ static inline uint32_t rmt_ll_get_tx_loop_interrupt_status(rmt_dev_t *dev) return (dev->int_st.val >> 12) & 0x03; } -#endif // CONFIG_IDF_TARGET_ESP32C5_BETA3_VERSION - #ifdef __cplusplus } #endif diff --git a/components/hal/esp32p4/include/hal/rmt_ll.h b/components/hal/esp32p4/include/hal/rmt_ll.h index 136dda044e..620597cbb6 100644 --- a/components/hal/esp32p4/include/hal/rmt_ll.h +++ b/components/hal/esp32p4/include/hal/rmt_ll.h @@ -463,7 +463,7 @@ static inline void rmt_ll_tx_set_carrier_level(rmt_dev_t *dev, uint32_t channel, * * @param dev Peripheral instance address * @param channel RMT TX channel number - * @param enable True to output carrier signal in all RMT state, False to only ouput carrier signal for effective data + * @param enable True to output carrier signal in all RMT state, False to only output carrier signal for effective data */ static inline void rmt_ll_tx_enable_carrier_always_on(rmt_dev_t *dev, uint32_t channel, bool enable) { @@ -706,7 +706,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) diff --git a/components/hal/esp32s2/include/hal/rmt_ll.h b/components/hal/esp32s2/include/hal/rmt_ll.h index 00730fec0c..bfe78f5a0f 100644 --- a/components/hal/esp32s2/include/hal/rmt_ll.h +++ b/components/hal/esp32s2/include/hal/rmt_ll.h @@ -423,7 +423,7 @@ static inline void rmt_ll_tx_set_carrier_level(rmt_dev_t *dev, uint32_t channel, * * @param dev Peripheral instance address * @param channel RMT TX channel number - * @param enable True to output carrier signal in all RMT state, False to only ouput carrier signal for effective data + * @param enable True to output carrier signal in all RMT state, False to only output carrier signal for effective data */ static inline void rmt_ll_tx_enable_carrier_always_on(rmt_dev_t *dev, uint32_t channel, bool enable) { @@ -628,7 +628,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) diff --git a/components/hal/esp32s3/include/hal/rmt_ll.h b/components/hal/esp32s3/include/hal/rmt_ll.h index 7d5dcf5eec..13601630b4 100644 --- a/components/hal/esp32s3/include/hal/rmt_ll.h +++ b/components/hal/esp32s3/include/hal/rmt_ll.h @@ -453,7 +453,7 @@ static inline void rmt_ll_tx_set_carrier_level(rmt_dev_t *dev, uint32_t channel, * * @param dev Peripheral instance address * @param channel RMT TX channel number - * @param enable True to output carrier signal in all RMT state, False to only ouput carrier signal for effective data + * @param enable True to output carrier signal in all RMT state, False to only output carrier signal for effective data */ static inline void rmt_ll_tx_enable_carrier_always_on(rmt_dev_t *dev, uint32_t channel, bool enable) { @@ -696,7 +696,7 @@ static inline void rmt_ll_enable_interrupt(rmt_dev_t *dev, uint32_t mask, bool e * @brief Clear RMT interrupt status by mask * * @param dev Peripheral instance address - * @param mask Interupt status mask + * @param mask Interrupt status mask */ __attribute__((always_inline)) static inline void rmt_ll_clear_interrupt_status(rmt_dev_t *dev, uint32_t mask) diff --git a/components/hal/rmt_hal.c b/components/hal/rmt_hal.c index d83e5952da..ea9565e7a6 100644 --- a/components/hal/rmt_hal.c +++ b/components/hal/rmt_hal.c @@ -12,7 +12,7 @@ void rmt_hal_init(rmt_hal_context_t *hal) hal->regs = &RMT; rmt_ll_power_down_mem(hal->regs, false); // turn on RMTMEM power domain rmt_ll_enable_mem_access_nonfifo(hal->regs, true); // APB access the RMTMEM in nonfifo mode - rmt_ll_enable_interrupt(hal->regs, UINT32_MAX, false); // disable all interupt events + rmt_ll_enable_interrupt(hal->regs, UINT32_MAX, false); // disable all interrupt events rmt_ll_clear_interrupt_status(hal->regs, UINT32_MAX); // clear all pending events #if SOC_RMT_SUPPORT_TX_SYNCHRO rmt_ll_tx_clear_sync_group(hal->regs); @@ -21,7 +21,7 @@ void rmt_hal_init(rmt_hal_context_t *hal) void rmt_hal_deinit(rmt_hal_context_t *hal) { - rmt_ll_enable_interrupt(hal->regs, UINT32_MAX, false); // disable all interupt events + rmt_ll_enable_interrupt(hal->regs, UINT32_MAX, false); // disable all interrupt events rmt_ll_clear_interrupt_status(hal->regs, UINT32_MAX); // clear all pending events rmt_ll_power_down_mem(hal->regs, true); // turn off RMTMEM power domain hal->regs = NULL; diff --git a/components/soc/esp32c5/mp/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/mp/include/soc/Kconfig.soc_caps.in index 432f3e68d9..f979c3a8f5 100644 --- a/components/soc/esp32c5/mp/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/mp/include/soc/Kconfig.soc_caps.in @@ -51,6 +51,10 @@ config SOC_I2S_SUPPORTED bool default y +config SOC_RMT_SUPPORTED + bool + default y + config SOC_GPSPI_SUPPORTED bool default y diff --git a/components/soc/esp32c5/mp/include/soc/rmt_struct.h b/components/soc/esp32c5/mp/include/soc/rmt_struct.h index de244af6a9..124bc72bff 100644 --- a/components/soc/esp32c5/mp/include/soc/rmt_struct.h +++ b/components/soc/esp32c5/mp/include/soc/rmt_struct.h @@ -821,13 +821,13 @@ typedef union { } rmt_date_reg_t; -typedef struct { +typedef struct rmt_dev_t { volatile rmt_chndata_reg_t chndata[4]; volatile rmt_chnconf0_reg_t chnconf0[2]; - volatile rmt_chmconf0_reg_t ch2conf0; - volatile rmt_chmconf1_reg_t ch2conf1; - volatile rmt_chmconf0_reg_t ch3conf0; - volatile rmt_chmconf1_reg_t ch3conf1; + volatile struct { + rmt_chmconf0_reg_t conf0; + rmt_chmconf1_reg_t conf1; + } chmconf[2];; volatile rmt_chnstatus_reg_t chnstatus[2]; volatile rmt_chmstatus_reg_t chmstatus[2]; volatile rmt_int_raw_reg_t int_raw; diff --git a/components/soc/esp32c5/mp/include/soc/soc_caps.h b/components/soc/esp32c5/mp/include/soc/soc_caps.h index 09f8f9e6b5..f732abb49c 100644 --- a/components/soc/esp32c5/mp/include/soc/soc_caps.h +++ b/components/soc/esp32c5/mp/include/soc/soc_caps.h @@ -39,7 +39,7 @@ #define SOC_RTC_FAST_MEM_SUPPORTED 1 #define SOC_RTC_MEM_SUPPORTED 1 #define SOC_I2S_SUPPORTED 1 -// #define SOC_RMT_SUPPORTED 1 // TODO: [ESP32C5] IDF-8726 +#define SOC_RMT_SUPPORTED 1 // #define SOC_SDM_SUPPORTED 1 // TODO: [ESP32C5] IDF-8687 #define SOC_GPSPI_SUPPORTED 1 // #define SOC_LEDC_SUPPORTED 1 // TODO: [ESP32C5] IDF-8684 diff --git a/docs/docs_not_updated/esp32c5.txt b/docs/docs_not_updated/esp32c5.txt index 4d29a63f93..5354d4db24 100644 --- a/docs/docs_not_updated/esp32c5.txt +++ b/docs/docs_not_updated/esp32c5.txt @@ -138,7 +138,6 @@ api-reference/peripherals/spi_master.rst api-reference/peripherals/index.rst api-reference/peripherals/sdmmc_host.rst api-reference/peripherals/ecdsa.rst -api-reference/peripherals/rmt.rst api-reference/kconfig.rst api-reference/network/esp_openthread.rst api-reference/network/esp_eth.rst