change(hal): add hal interface to configure pau regdma wait timeout parameter

This commit is contained in:
Li Shuai
2025-08-06 19:42:35 +08:00
committed by BOT
parent 5a4f6756da
commit 855492fa2e
6 changed files with 47 additions and 0 deletions

View File

@@ -15,6 +15,9 @@
#include "esp_private/esp_pau.h" #include "esp_private/esp_pau.h"
#include "esp_private/periph_ctrl.h" #include "esp_private/periph_ctrl.h"
#define PAU_REGDMA_LINK_WAIT_RETRY_COUNT (1000)
#define PAU_REGDMA_LINK_WAIT_READ_INTERNAL (32)
static __attribute__((unused)) const char *TAG = "pau_regdma"; static __attribute__((unused)) const char *TAG = "pau_regdma";
typedef struct { typedef struct {
@@ -32,6 +35,7 @@ pau_context_t * __attribute__((weak)) IRAM_ATTR PAU_instance(void)
if (pau_hal.dev == NULL) { if (pau_hal.dev == NULL) {
pau_hal.dev = &PAU; pau_hal.dev = &PAU;
periph_module_enable(PERIPH_REGDMA_MODULE); periph_module_enable(PERIPH_REGDMA_MODULE);
pau_hal_set_regdma_wait_timeout(&pau_hal, PAU_REGDMA_LINK_WAIT_RETRY_COUNT, PAU_REGDMA_LINK_WAIT_READ_INTERNAL);
} }
return &pau_context; return &pau_context;

View File

@@ -150,6 +150,16 @@ static inline void pau_ll_clear_regdma_backup_error_intr_state(pau_dev_t *dev)
dev->int_clr.error_int_clr = 1; dev->int_clr.error_int_clr = 1;
} }
static inline void pau_ll_set_regdma_link_wait_retry_count(pau_dev_t *dev, int count)
{
dev->regdma_bkp_conf.link_tout_thres = count;
}
static inline void pau_ll_set_regdma_link_wait_read_interval(pau_dev_t *dev, int interval)
{
dev->regdma_bkp_conf.read_interval = interval;
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -56,3 +56,10 @@ void IRAM_ATTR pau_hal_stop_regdma_extra_link(pau_hal_context_t *hal)
pau_ll_select_regdma_entry_link(hal->dev, 0); /* restore link select to default */ pau_ll_select_regdma_entry_link(hal->dev, 0); /* restore link select to default */
pau_ll_clear_regdma_backup_done_intr_state(hal->dev); pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
} }
void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int interval)
{
HAL_ASSERT(count > 0 && interval > 0);
pau_ll_set_regdma_link_wait_retry_count(hal->dev, count);
pau_ll_set_regdma_link_wait_read_interval(hal->dev, interval);
}

View File

@@ -120,6 +120,16 @@ static inline __attribute__((always_inline)) void pau_ll_clear_regdma_backup_err
dev->int_clr.error_int_clr = 1; dev->int_clr.error_int_clr = 1;
} }
static inline void pau_ll_set_regdma_link_wait_retry_count(pau_dev_t *dev, int count)
{
dev->regdma_bkp_conf.link_tout_thres = count;
}
static inline void pau_ll_set_regdma_link_wait_read_interval(pau_dev_t *dev, int interval)
{
dev->regdma_bkp_conf.read_interval = interval;
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -41,3 +41,10 @@ void IRAM_ATTR pau_hal_regdma_clock_configure(pau_hal_context_t *hal, bool enabl
HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.regdma_conf, regdma_rst_en, !enable); HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.regdma_conf, regdma_rst_en, !enable);
HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.regdma_conf, regdma_clk_en, enable); HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.regdma_conf, regdma_clk_en, enable);
} }
void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int interval)
{
HAL_ASSERT(count > 0 && interval > 0);
pau_ll_set_regdma_link_wait_retry_count(hal->dev, count);
pau_ll_set_regdma_link_wait_read_interval(hal->dev, interval);
}

View File

@@ -111,6 +111,15 @@ void pau_hal_stop_regdma_extra_link(pau_hal_context_t *hal);
void pau_hal_regdma_clock_configure(pau_hal_context_t *hal, bool enable); void pau_hal_regdma_clock_configure(pau_hal_context_t *hal, bool enable);
#endif #endif
/**
* @brief Set regdma link wait timeout, include wait retry count and register read interval
*
* @param hal regdma hal context
* @param count the maximum number of regdma wait retry count
* @param interval the interval of regdma wait link to read register
*/
void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int interval);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus