mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 17:19:09 -04:00
fix(i2s): fixed the pdm2pcm capability on c5 and c61
This commit is contained in:
parent
4ecb1cec3c
commit
b18506da8b
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -986,3 +986,33 @@ TEST_CASE("I2S_asynchronous_read_write", "[i2s]")
|
|||||||
|
|
||||||
TEST_ASSERT(received);
|
TEST_ASSERT(received);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SOC_I2S_SUPPORTS_PDM2PCM
|
||||||
|
TEST_CASE("I2S_PDM2PCM_existence_test", "[i2s]")
|
||||||
|
{
|
||||||
|
i2s_chan_handle_t rx_handle;
|
||||||
|
i2s_chan_config_t rx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER);
|
||||||
|
TEST_ESP_OK(i2s_new_channel(&rx_chan_cfg, NULL, &rx_handle));
|
||||||
|
|
||||||
|
i2s_pdm_rx_config_t pdm_rx_cfg = {
|
||||||
|
.clk_cfg = I2S_PDM_RX_CLK_DEFAULT_CONFIG(16000),
|
||||||
|
.slot_cfg = I2S_PDM_RX_SLOT_PCM_FMT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO),
|
||||||
|
.gpio_cfg = {
|
||||||
|
.clk = MASTER_BCK_IO,
|
||||||
|
.din = DATA_IN_IO,
|
||||||
|
.invert_flags = {
|
||||||
|
.clk_inv = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
TEST_ESP_OK(i2s_channel_init_pdm_rx_mode(rx_handle, &pdm_rx_cfg));
|
||||||
|
TEST_ESP_OK(i2s_channel_enable(rx_handle));
|
||||||
|
|
||||||
|
uint8_t *r_buf[64] = {};
|
||||||
|
size_t r_bytes = 0;
|
||||||
|
// If PDM2PCM is not supported in the hardware, it will fail to read.
|
||||||
|
TEST_ESP_OK(i2s_channel_read(rx_handle, r_buf, 64, &r_bytes, 1000));
|
||||||
|
TEST_ESP_OK(i2s_channel_disable(rx_handle));
|
||||||
|
TEST_ESP_OK(i2s_del_channel(rx_handle));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -743,7 +743,6 @@ static inline void i2s_ll_rx_enable_tdm(i2s_dev_t *hw)
|
|||||||
{
|
{
|
||||||
hw->rx_conf.rx_pdm_en = false;
|
hw->rx_conf.rx_pdm_en = false;
|
||||||
hw->rx_conf.rx_tdm_en = true;
|
hw->rx_conf.rx_tdm_en = true;
|
||||||
hw->rx_pdm2pcm_conf.rx_pdm2pcm_en = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -836,56 +836,6 @@ extern "C" {
|
|||||||
#define I2S_TX_IIR_HP_MULT12_0_V 0x00000007U
|
#define I2S_TX_IIR_HP_MULT12_0_V 0x00000007U
|
||||||
#define I2S_TX_IIR_HP_MULT12_0_S 23
|
#define I2S_TX_IIR_HP_MULT12_0_S 23
|
||||||
|
|
||||||
/** I2S_RX_PDM2PCM_CONF_REG register
|
|
||||||
* I2S RX configure register
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_CONF_REG(i) (REG_I2S_BASE(i) + 0x4c)
|
|
||||||
/** I2S_RX_PDM2PCM_EN : R/W; bitpos: [19]; default: 0;
|
|
||||||
* 1: Enable PDM2PCM RX mode. 0: DIsable.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_EN (BIT(19))
|
|
||||||
#define I2S_RX_PDM2PCM_EN_M (I2S_RX_PDM2PCM_EN_V << I2S_RX_PDM2PCM_EN_S)
|
|
||||||
#define I2S_RX_PDM2PCM_EN_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM2PCM_EN_S 19
|
|
||||||
/** I2S_RX_PDM_SINC_DSR_16_EN : R/W; bitpos: [20]; default: 0;
|
|
||||||
* Configure the down sampling rate of PDM RX filter group1 module. 1: The down
|
|
||||||
* sampling rate is 128. 0: down sampling rate is 64.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN (BIT(20))
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_M (I2S_RX_PDM_SINC_DSR_16_EN_V << I2S_RX_PDM_SINC_DSR_16_EN_S)
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_S 20
|
|
||||||
/** I2S_RX_PDM2PCM_AMPLIFY_NUM : R/W; bitpos: [24:21]; default: 1;
|
|
||||||
* Configure PDM RX amplify number.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM 0x0000000FU
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_M (I2S_RX_PDM2PCM_AMPLIFY_NUM_V << I2S_RX_PDM2PCM_AMPLIFY_NUM_S)
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_V 0x0000000FU
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_S 21
|
|
||||||
/** I2S_RX_PDM_HP_BYPASS : R/W; bitpos: [25]; default: 0;
|
|
||||||
* I2S PDM RX bypass hp filter or not.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS (BIT(25))
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_M (I2S_RX_PDM_HP_BYPASS_V << I2S_RX_PDM_HP_BYPASS_S)
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_S 25
|
|
||||||
/** I2S_RX_IIR_HP_MULT12_5 : R/W; bitpos: [28:26]; default: 6;
|
|
||||||
* The fourth parameter of PDM RX IIR_HP filter stage 2 is (504 +
|
|
||||||
* LP_I2S_RX_IIR_HP_MULT12_5[2:0])
|
|
||||||
*/
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_5 0x00000007U
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_5_M (I2S_RX_IIR_HP_MULT12_5_V << I2S_RX_IIR_HP_MULT12_5_S)
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_5_V 0x00000007U
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_5_S 26
|
|
||||||
/** I2S_RX_IIR_HP_MULT12_0 : R/W; bitpos: [31:29]; default: 7;
|
|
||||||
* The fourth parameter of PDM RX IIR_HP filter stage 1 is (504 +
|
|
||||||
* LP_I2S_RX_IIR_HP_MULT12_0[2:0])
|
|
||||||
*/
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_0 0x00000007U
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_0_M (I2S_RX_IIR_HP_MULT12_0_V << I2S_RX_IIR_HP_MULT12_0_S)
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_0_V 0x00000007U
|
|
||||||
#define I2S_RX_IIR_HP_MULT12_0_S 29
|
|
||||||
|
|
||||||
/** I2S_RX_TDM_CTRL_REG register
|
/** I2S_RX_TDM_CTRL_REG register
|
||||||
* I2S TX TDM mode control register
|
* I2S TX TDM mode control register
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -295,43 +295,6 @@ typedef union {
|
|||||||
uint32_t val;
|
uint32_t val;
|
||||||
} i2s_rx_recomb_dma_chn_reg_t;
|
} i2s_rx_recomb_dma_chn_reg_t;
|
||||||
|
|
||||||
/** Type of rx_pdm2pcm_conf register
|
|
||||||
* I2S RX configure register
|
|
||||||
*/
|
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
uint32_t reserved_0:19;
|
|
||||||
/** rx_pdm2pcm_en : R/W; bitpos: [19]; default: 0;
|
|
||||||
* 1: Enable PDM2PCM RX mode. 0: DIsable.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm2pcm_en:1;
|
|
||||||
/** rx_pdm_sinc_dsr_16_en : R/W; bitpos: [20]; default: 0;
|
|
||||||
* Configure the down sampling rate of PDM RX filter group1 module. 1: The down
|
|
||||||
* sampling rate is 128. 0: down sampling rate is 64.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm_sinc_dsr_16_en:1;
|
|
||||||
/** rx_pdm2pcm_amplify_num : R/W; bitpos: [24:21]; default: 1;
|
|
||||||
* Configure PDM RX amplify number.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm2pcm_amplify_num:4;
|
|
||||||
/** rx_pdm_hp_bypass : R/W; bitpos: [25]; default: 0;
|
|
||||||
* I2S PDM RX bypass hp filter or not.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm_hp_bypass:1;
|
|
||||||
/** rx_iir_hp_mult12_5 : R/W; bitpos: [28:26]; default: 6;
|
|
||||||
* The fourth parameter of PDM RX IIR_HP filter stage 2 is (504 +
|
|
||||||
* LP_I2S_RX_IIR_HP_MULT12_5[2:0])
|
|
||||||
*/
|
|
||||||
uint32_t rx_iir_hp_mult12_5:3;
|
|
||||||
/** rx_iir_hp_mult12_0 : R/W; bitpos: [31:29]; default: 7;
|
|
||||||
* The fourth parameter of PDM RX IIR_HP filter stage 1 is (504 +
|
|
||||||
* LP_I2S_RX_IIR_HP_MULT12_0[2:0])
|
|
||||||
*/
|
|
||||||
uint32_t rx_iir_hp_mult12_0:3;
|
|
||||||
};
|
|
||||||
uint32_t val;
|
|
||||||
} i2s_rx_pdm2pcm_conf_reg_t;
|
|
||||||
|
|
||||||
/** Type of rx_tdm_ctrl register
|
/** Type of rx_tdm_ctrl register
|
||||||
* I2S TX TDM mode control register
|
* I2S TX TDM mode control register
|
||||||
*/
|
*/
|
||||||
@ -1038,7 +1001,7 @@ typedef struct {
|
|||||||
volatile i2s_rx_recomb_dma_chn_reg_t rx_recomb_dma_ch[4];
|
volatile i2s_rx_recomb_dma_chn_reg_t rx_recomb_dma_ch[4];
|
||||||
volatile i2s_tx_pcm2pdm_conf_reg_t tx_pcm2pdm_conf;
|
volatile i2s_tx_pcm2pdm_conf_reg_t tx_pcm2pdm_conf;
|
||||||
volatile i2s_tx_pcm2pdm_conf1_reg_t tx_pcm2pdm_conf1;
|
volatile i2s_tx_pcm2pdm_conf1_reg_t tx_pcm2pdm_conf1;
|
||||||
volatile i2s_rx_pdm2pcm_conf_reg_t rx_pdm2pcm_conf;
|
uint32_t reserved_048;
|
||||||
volatile i2s_rx_tdm_ctrl_reg_t rx_tdm_ctrl;
|
volatile i2s_rx_tdm_ctrl_reg_t rx_tdm_ctrl;
|
||||||
volatile i2s_tx_tdm_ctrl_reg_t tx_tdm_ctrl;
|
volatile i2s_tx_tdm_ctrl_reg_t tx_tdm_ctrl;
|
||||||
volatile i2s_rx_timing_reg_t rx_timing;
|
volatile i2s_rx_timing_reg_t rx_timing;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -661,40 +661,6 @@ extern "C" {
|
|||||||
#define I2S_TX_IIR_HP_MULT12_0_V 0x00000007U
|
#define I2S_TX_IIR_HP_MULT12_0_V 0x00000007U
|
||||||
#define I2S_TX_IIR_HP_MULT12_0_S 23
|
#define I2S_TX_IIR_HP_MULT12_0_S 23
|
||||||
|
|
||||||
/** I2S_RX_PDM2PCM_CONF_REG register
|
|
||||||
* I2S RX configure register
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_CONF_REG (DR_REG_I2S_BASE + 0x48)
|
|
||||||
/** I2S_RX_PDM2PCM_EN : R/W; bitpos: [19]; default: 0;
|
|
||||||
* 1: Enable PDM2PCM RX mode. 0: DIsable.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_EN (BIT(19))
|
|
||||||
#define I2S_RX_PDM2PCM_EN_M (I2S_RX_PDM2PCM_EN_V << I2S_RX_PDM2PCM_EN_S)
|
|
||||||
#define I2S_RX_PDM2PCM_EN_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM2PCM_EN_S 19
|
|
||||||
/** I2S_RX_PDM_SINC_DSR_16_EN : R/W; bitpos: [20]; default: 0;
|
|
||||||
* Configure the down sampling rate of PDM RX filter group1 module. 1: The down
|
|
||||||
* sampling rate is 128. 0: down sampling rate is 64.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN (BIT(20))
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_M (I2S_RX_PDM_SINC_DSR_16_EN_V << I2S_RX_PDM_SINC_DSR_16_EN_S)
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM_SINC_DSR_16_EN_S 20
|
|
||||||
/** I2S_RX_PDM2PCM_AMPLIFY_NUM : R/W; bitpos: [24:21]; default: 1;
|
|
||||||
* Configure PDM RX amplify number.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM 0x0000000FU
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_M (I2S_RX_PDM2PCM_AMPLIFY_NUM_V << I2S_RX_PDM2PCM_AMPLIFY_NUM_S)
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_V 0x0000000FU
|
|
||||||
#define I2S_RX_PDM2PCM_AMPLIFY_NUM_S 21
|
|
||||||
/** I2S_RX_PDM_HP_BYPASS : R/W; bitpos: [25]; default: 0;
|
|
||||||
* I2S PDM RX bypass hp filter or not.
|
|
||||||
*/
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS (BIT(25))
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_M (I2S_RX_PDM_HP_BYPASS_V << I2S_RX_PDM_HP_BYPASS_S)
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_V 0x00000001U
|
|
||||||
#define I2S_RX_PDM_HP_BYPASS_S 25
|
|
||||||
|
|
||||||
/** I2S_RX_TDM_CTRL_REG register
|
/** I2S_RX_TDM_CTRL_REG register
|
||||||
* I2S TX TDM mode control register
|
* I2S TX TDM mode control register
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -240,34 +240,6 @@ typedef union {
|
|||||||
uint32_t val;
|
uint32_t val;
|
||||||
} i2s_rx_conf1_reg_t;
|
} i2s_rx_conf1_reg_t;
|
||||||
|
|
||||||
/** Type of rx_pdm2pcm_conf register
|
|
||||||
* I2S RX configure register
|
|
||||||
*/
|
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
uint32_t reserved_0:19;
|
|
||||||
/** rx_pdm2pcm_en : R/W; bitpos: [19]; default: 0;
|
|
||||||
* 1: Enable PDM2PCM RX mode. 0: DIsable.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm2pcm_en:1;
|
|
||||||
/** rx_pdm_sinc_dsr_16_en : R/W; bitpos: [20]; default: 0;
|
|
||||||
* Configure the down sampling rate of PDM RX filter group1 module. 1: The down
|
|
||||||
* sampling rate is 128. 0: down sampling rate is 64.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm_sinc_dsr_16_en:1;
|
|
||||||
/** rx_pdm2pcm_amplify_num : R/W; bitpos: [24:21]; default: 1;
|
|
||||||
* Configure PDM RX amplify number.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm2pcm_amplify_num:4;
|
|
||||||
/** rx_pdm_hp_bypass : R/W; bitpos: [25]; default: 0;
|
|
||||||
* I2S PDM RX bypass hp filter or not.
|
|
||||||
*/
|
|
||||||
uint32_t rx_pdm_hp_bypass:1;
|
|
||||||
uint32_t reserved_26:6;
|
|
||||||
};
|
|
||||||
uint32_t val;
|
|
||||||
} i2s_rx_pdm2pcm_conf_reg_t;
|
|
||||||
|
|
||||||
/** Type of rx_tdm_ctrl register
|
/** Type of rx_tdm_ctrl register
|
||||||
* I2S TX TDM mode control register
|
* I2S TX TDM mode control register
|
||||||
*/
|
*/
|
||||||
@ -973,8 +945,7 @@ typedef struct {
|
|||||||
uint32_t reserved_030[4];
|
uint32_t reserved_030[4];
|
||||||
volatile i2s_tx_pcm2pdm_conf_reg_t tx_pcm2pdm_conf;
|
volatile i2s_tx_pcm2pdm_conf_reg_t tx_pcm2pdm_conf;
|
||||||
volatile i2s_tx_pcm2pdm_conf1_reg_t tx_pcm2pdm_conf1;
|
volatile i2s_tx_pcm2pdm_conf1_reg_t tx_pcm2pdm_conf1;
|
||||||
volatile i2s_rx_pdm2pcm_conf_reg_t rx_pdm2pcm_conf;
|
uint32_t reserved_048[2];
|
||||||
uint32_t reserved_04c;
|
|
||||||
volatile i2s_rx_tdm_ctrl_reg_t rx_tdm_ctrl;
|
volatile i2s_rx_tdm_ctrl_reg_t rx_tdm_ctrl;
|
||||||
volatile i2s_tx_tdm_ctrl_reg_t tx_tdm_ctrl;
|
volatile i2s_tx_tdm_ctrl_reg_t tx_tdm_ctrl;
|
||||||
volatile i2s_rx_timing_reg_t rx_timing;
|
volatile i2s_rx_timing_reg_t rx_timing;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user