mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 19:13:21 +00:00
feat(i2s): add PLL240M clock source on S3 and C6
Closes https://github.com/espressif/esp-idf/issues/17056
This commit is contained in:
committed by
Kevin (Lao Kaiyao)
parent
562a47e07d
commit
d15e439f07
@@ -334,7 +334,7 @@ static esp_err_t i2s_pdm_rx_calculate_clock(i2s_chan_handle_t handle, const i2s_
|
||||
clk_info->bclk = rate * dn_sample_factor;
|
||||
/* Hardware limitation: bclk_div * dn_sample_factor / slot_num >= 96 */
|
||||
uint32_t bclk_limit = (I2S_PDM_RX_CLK_LIMIT_COEFF * slot_num + dn_sample_factor - 1) / dn_sample_factor;
|
||||
clk_info->bclk_div = MAX(MAX(bclk_limit, I2S_PDM_RX_BCLK_DIV_MIN), clk_cfg->bclk_div);
|
||||
clk_info->bclk_div = MAX(bclk_limit, I2S_PDM_RX_BCLK_DIV_MIN);
|
||||
clk_info->mclk = clk_info->bclk * clk_info->bclk_div;
|
||||
clk_info->sclk = i2s_get_source_clk_freq(clk_cfg->clk_src, clk_info->mclk);
|
||||
clk_info->mclk_div = clk_info->sclk / clk_info->mclk;
|
||||
|
||||
@@ -217,6 +217,9 @@ static inline void i2s_ll_tx_clk_set_src(i2s_dev_t *hw, i2s_clock_src_t src)
|
||||
case I2S_CLK_SRC_XTAL:
|
||||
PCR.i2s_tx_clkm_conf.i2s_tx_clkm_sel = 0;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_240M:
|
||||
PCR.i2s_tx_clkm_conf.i2s_tx_clkm_sel = 1;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_160M:
|
||||
PCR.i2s_tx_clkm_conf.i2s_tx_clkm_sel = 2;
|
||||
break;
|
||||
@@ -240,6 +243,9 @@ static inline void i2s_ll_rx_clk_set_src(i2s_dev_t *hw, i2s_clock_src_t src)
|
||||
case I2S_CLK_SRC_XTAL:
|
||||
PCR.i2s_rx_clkm_conf.i2s_rx_clkm_sel = 0;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_240M:
|
||||
PCR.i2s_rx_clkm_conf.i2s_rx_clkm_sel = 1;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_160M:
|
||||
PCR.i2s_rx_clkm_conf.i2s_rx_clkm_sel = 2;
|
||||
break;
|
||||
|
||||
@@ -208,6 +208,9 @@ static inline void i2s_ll_tx_clk_set_src(i2s_dev_t *hw, i2s_clock_src_t src)
|
||||
case I2S_CLK_SRC_XTAL:
|
||||
hw->tx_clkm_conf.tx_clk_sel = 0;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_240M:
|
||||
hw->tx_clkm_conf.tx_clk_sel = 1;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_160M:
|
||||
hw->tx_clkm_conf.tx_clk_sel = 2;
|
||||
break;
|
||||
@@ -230,6 +233,9 @@ static inline void i2s_ll_rx_clk_set_src(i2s_dev_t *hw, i2s_clock_src_t src)
|
||||
case I2S_CLK_SRC_XTAL:
|
||||
hw->rx_clkm_conf.rx_clk_sel = 0;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_240M:
|
||||
hw->rx_clkm_conf.rx_clk_sel = 1;
|
||||
break;
|
||||
case I2S_CLK_SRC_PLL_160M:
|
||||
hw->rx_clkm_conf.rx_clk_sel = 2;
|
||||
break;
|
||||
|
||||
@@ -274,13 +274,14 @@ typedef enum {
|
||||
/**
|
||||
* @brief Array initializer for all supported clock sources of I2S
|
||||
*/
|
||||
#define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
|
||||
#define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F240M, SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
|
||||
|
||||
/**
|
||||
* @brief I2S clock source enum
|
||||
*/
|
||||
typedef enum {
|
||||
I2S_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the default source clock */
|
||||
I2S_CLK_SRC_PLL_240M = SOC_MOD_CLK_PLL_F240M, /*!< Select PLL_F240M as the source clock */
|
||||
I2S_CLK_SRC_PLL_160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock */
|
||||
I2S_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
||||
} soc_periph_i2s_clk_src_t;
|
||||
|
||||
@@ -275,13 +275,16 @@ typedef enum {
|
||||
/**
|
||||
* @brief Array initializer for all supported clock sources of I2S
|
||||
*/
|
||||
#define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
|
||||
#define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F240M, SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
|
||||
|
||||
/**
|
||||
* @brief I2S clock source enum
|
||||
*/
|
||||
typedef enum {
|
||||
I2S_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the default source clock */
|
||||
I2S_CLK_SRC_PLL_240M = SOC_MOD_CLK_PLL_D2, /*!< Select PLL_D2 as the source clock.
|
||||
It is default to 240MHz while PLL is 480MHz,
|
||||
but it will be 160MHz if PLL is 320MHz */
|
||||
I2S_CLK_SRC_PLL_160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock */
|
||||
I2S_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
||||
} soc_periph_i2s_clk_src_t;
|
||||
|
||||
Reference in New Issue
Block a user