|
|
@@ -7,7 +7,7 @@
|
|
|
/**
|
|
|
* This file is specified for I2S PDM communication mode
|
|
|
* Features:
|
|
|
- * - Only support PDM tx/rx mode
|
|
|
+ * - Only support PDM TX/RX mode
|
|
|
* - Fixed to 2 slots
|
|
|
* - Data bit width only support 16 bits
|
|
|
*/
|
|
|
@@ -26,7 +26,7 @@ extern "C" {
|
|
|
#if SOC_I2S_SUPPORTS_PDM_RX_HP_FILTER
|
|
|
/**
|
|
|
* @brief PDM format in 2 slots(RX)
|
|
|
- * @param bits_per_sample i2s data bit width, only support 16 bits for PDM mode
|
|
|
+ * @param bits_per_sample I2S data bit width, only support 16 bits for PDM mode
|
|
|
* @param mono_or_stereo I2S_SLOT_MODE_MONO or I2S_SLOT_MODE_STEREO
|
|
|
*/
|
|
|
#define I2S_PDM_RX_SLOT_DEFAULT_CONFIG(bits_per_sample, mono_or_stereo) { \
|
|
|
@@ -42,7 +42,7 @@ extern "C" {
|
|
|
#else
|
|
|
/**
|
|
|
* @brief PDM format in 2 slots(RX)
|
|
|
- * @param bits_per_sample i2s data bit width, only support 16 bits for PDM mode
|
|
|
+ * @param bits_per_sample I2S data bit width, only support 16 bits for PDM mode
|
|
|
* @param mono_or_stereo I2S_SLOT_MODE_MONO or I2S_SLOT_MODE_STEREO
|
|
|
*/
|
|
|
#define I2S_PDM_RX_SLOT_DEFAULT_CONFIG(bits_per_sample, mono_or_stereo) { \
|
|
|
@@ -55,7 +55,7 @@ extern "C" {
|
|
|
#endif // SOC_I2S_SUPPORTS_PDM_RX_HP_FILTER
|
|
|
|
|
|
/**
|
|
|
- * @brief i2s default pdm rx clock configuration
|
|
|
+ * @brief I2S default PDM RX clock configuration
|
|
|
* @param rate sample rate
|
|
|
*/
|
|
|
#define I2S_PDM_RX_CLK_DEFAULT_CONFIG(rate) { \
|
|
|
@@ -69,7 +69,7 @@ extern "C" {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S slot configuration for pdm rx mode
|
|
|
+ * @brief I2S slot configuration for PDM RX mode
|
|
|
*/
|
|
|
typedef struct {
|
|
|
/* General fields */
|
|
|
@@ -82,7 +82,7 @@ typedef struct {
|
|
|
bool hp_en; /*!< High pass filter enable */
|
|
|
float hp_cut_off_freq_hz; /*!< High pass filter cut-off frequency, range 23.3Hz ~ 185Hz, see cut-off frequency sheet above */
|
|
|
uint32_t amplify_num; /*!< The amplification number of the final conversion result.
|
|
|
- * The data that have converted from PDM to PCM module, will time 'amplify_num' additionally to amplify the final result.
|
|
|
+ * The data that have converted from PDM to PCM module, will time `amplify_num` additionally to amplify the final result.
|
|
|
* Note that it's only a multiplier of the digital PCM data, not the gain of the analog signal
|
|
|
* range 1~15, default 1 */
|
|
|
#endif // SOC_I2S_SUPPORTS_PDM_RX_HP_FILTER
|
|
|
@@ -90,21 +90,21 @@ typedef struct {
|
|
|
} i2s_pdm_rx_slot_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S clock configuration for pdm rx mode
|
|
|
+ * @brief I2S clock configuration for PDM RX mode
|
|
|
*/
|
|
|
typedef struct {
|
|
|
/* General fields */
|
|
|
uint32_t sample_rate_hz; /*!< I2S sample rate */
|
|
|
i2s_clock_src_t clk_src; /*!< Choose clock source */
|
|
|
- i2s_mclk_multiple_t mclk_multiple; /*!< The multiple of mclk to the sample rate */
|
|
|
+ i2s_mclk_multiple_t mclk_multiple; /*!< The multiple of MCLK to the sample rate */
|
|
|
/* Particular fields */
|
|
|
i2s_pdm_dsr_t dn_sample_mode; /*!< Down-sampling rate mode */
|
|
|
- uint32_t bclk_div; /*!< The division from mclk to bclk. The typical and minimum value is I2S_PDM_RX_BCLK_DIV_MIN.
|
|
|
+ uint32_t bclk_div; /*!< The division from MCLK to BCLK. The typical and minimum value is I2S_PDM_RX_BCLK_DIV_MIN.
|
|
|
* It will be set to I2S_PDM_RX_BCLK_DIV_MIN by default if it is smaller than I2S_PDM_RX_BCLK_DIV_MIN */
|
|
|
} i2s_pdm_rx_clk_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S PDM tx mode GPIO pins configuration
|
|
|
+ * @brief I2S PDM TX mode GPIO pins configuration
|
|
|
*/
|
|
|
typedef struct {
|
|
|
gpio_num_t clk; /*!< PDM clk pin, output */
|
|
|
@@ -118,7 +118,7 @@ typedef struct {
|
|
|
} i2s_pdm_rx_gpio_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S PDM RX mode major configuration that including clock/slot/gpio configuration
|
|
|
+ * @brief I2S PDM RX mode major configuration that including clock/slot/GPIO configuration
|
|
|
*/
|
|
|
typedef struct {
|
|
|
i2s_pdm_rx_clk_config_t clk_cfg; /*!< PDM RX clock configurations, can be generated by macro I2S_PDM_RX_CLK_DEFAULT_CONFIG */
|
|
|
@@ -127,12 +127,12 @@ typedef struct {
|
|
|
} i2s_pdm_rx_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief Initialize i2s channel to PDM RX mode
|
|
|
+ * @brief Initialize I2S channel to PDM RX mode
|
|
|
* @note Only allowed to be called when the channel state is REGISTERED, (i.e., channel has been allocated, but not initialized)
|
|
|
* and the state will be updated to READY if initialization success, otherwise the state will return to REGISTERED.
|
|
|
*
|
|
|
- * @param[in] handle I2S rx channel handler
|
|
|
- * @param[in] pdm_rx_cfg Configurations for PDM RX mode, including clock, slot and gpio
|
|
|
+ * @param[in] handle I2S RX channel handler
|
|
|
+ * @param[in] pdm_rx_cfg Configurations for PDM RX mode, including clock, slot and GPIO
|
|
|
* The clock configuration can be generated by the helper macro `I2S_PDM_RX_CLK_DEFAULT_CONFIG`
|
|
|
* The slot configuration can be generated by the helper macro `I2S_PDM_RX_SLOT_DEFAULT_CONFIG`
|
|
|
*
|
|
|
@@ -147,10 +147,10 @@ esp_err_t i2s_channel_init_pdm_rx_mode(i2s_chan_handle_t handle, const i2s_pdm_r
|
|
|
/**
|
|
|
* @brief Reconfigure the I2S clock for PDM RX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM RX mode, i.e., 'i2s_channel_init_pdm_rx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM RX mode, i.e., `i2s_channel_init_pdm_rx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S rx channel handler
|
|
|
+ * @param[in] handle I2S RX channel handler
|
|
|
* @param[in] clk_cfg PDM RX mode clock configuration, can be generated by `I2S_PDM_RX_CLK_DEFAULT_CONFIG`
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
@@ -162,10 +162,10 @@ esp_err_t i2s_channel_reconfig_pdm_rx_clock(i2s_chan_handle_t handle, const i2s_
|
|
|
/**
|
|
|
* @brief Reconfigure the I2S slot for PDM RX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM RX mode, i.e., 'i2s_channel_init_pdm_rx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM RX mode, i.e., `i2s_channel_init_pdm_rx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S rx channel handler
|
|
|
+ * @param[in] handle I2S RX channel handler
|
|
|
* @param[in] slot_cfg PDM RX mode slot configuration, can be generated by `I2S_PDM_RX_SLOT_DEFAULT_CONFIG`
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
@@ -176,13 +176,13 @@ esp_err_t i2s_channel_reconfig_pdm_rx_clock(i2s_chan_handle_t handle, const i2s_
|
|
|
esp_err_t i2s_channel_reconfig_pdm_rx_slot(i2s_chan_handle_t handle, const i2s_pdm_rx_slot_config_t *slot_cfg);
|
|
|
|
|
|
/**
|
|
|
- * @brief Reconfigure the I2S gpio for PDM RX mode
|
|
|
+ * @brief Reconfigure the I2S GPIO for PDM RX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM RX mode, i.e., 'i2s_channel_init_pdm_rx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM RX mode, i.e., `i2s_channel_init_pdm_rx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S rx channel handler
|
|
|
- * @param[in] gpio_cfg PDM RX mode gpio configuration, specified by user
|
|
|
+ * @param[in] handle I2S RX channel handler
|
|
|
+ * @param[in] gpio_cfg PDM RX mode GPIO configuration, specified by user
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
* - ESP_ERR_INVALID_ARG NULL pointer, invalid configuration or not PDM mode
|
|
|
@@ -198,7 +198,7 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
#if SOC_I2S_HW_VERSION_2
|
|
|
/**
|
|
|
* @brief PDM style in 2 slots(TX) for codec line mode
|
|
|
- * @param bits_per_sample i2s data bit width, only support 16 bits for PDM mode
|
|
|
+ * @param bits_per_sample I2S data bit width, only support 16 bits for PDM mode
|
|
|
* @param mono_or_stereo I2S_SLOT_MODE_MONO or I2S_SLOT_MODE_STEREO
|
|
|
*/
|
|
|
#define I2S_PDM_TX_SLOT_DEFAULT_CONFIG(bits_per_sample, mono_or_stereo) { \
|
|
|
@@ -221,7 +221,7 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
* @brief PDM style in 1 slots(TX) for DAC line mode
|
|
|
* @note The noise might be different with different configurations, this macro provides a set of configurations
|
|
|
* that have relatively high SNR (Signal Noise Ratio), you can also adjust them to fit your case.
|
|
|
- * @param bits_per_sample i2s data bit width, only support 16 bits for PDM mode
|
|
|
+ * @param bits_per_sample I2S data bit width, only support 16 bits for PDM mode
|
|
|
* @param mono_or_stereo I2S_SLOT_MODE_MONO or I2S_SLOT_MODE_STEREO
|
|
|
*/
|
|
|
#define I2S_PDM_TX_SLOT_DAC_DEFAULT_CONFIG(bits_per_sample, mono_or_stereo) { \
|
|
|
@@ -243,7 +243,7 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
#else // SOC_I2S_HW_VERSION_2
|
|
|
/**
|
|
|
* @brief PDM style in 2 slots(TX) for codec line mode
|
|
|
- * @param bits_per_sample i2s data bit width, only support 16 bits for PDM mode
|
|
|
+ * @param bits_per_sample I2S data bit width, only support 16 bits for PDM mode
|
|
|
* @param mono_or_stereo I2S_SLOT_MODE_MONO or I2S_SLOT_MODE_STEREO
|
|
|
*/
|
|
|
#define I2S_PDM_TX_SLOT_DEFAULT_CONFIG(bits_per_sample, mono_or_stereo) { \
|
|
|
@@ -260,11 +260,11 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
#endif // SOC_I2S_HW_VERSION_2
|
|
|
|
|
|
/**
|
|
|
- * @brief i2s default pdm tx clock configuration for codec line mode
|
|
|
+ * @brief I2S default PDM TX clock configuration for codec line mode
|
|
|
* @note TX PDM can only be set to the following two up-sampling rate configurations:
|
|
|
* 1: fp = 960, fs = sample_rate_hz / 100, in this case, Fpdm = 128*48000
|
|
|
* 2: fp = 960, fs = 480, in this case, Fpdm = 128*Fpcm = 128*sample_rate_hz
|
|
|
- * If the pdm receiver do not care the pdm serial clock, it's recommended set Fpdm = 128*48000.
|
|
|
+ * If the PDM receiver do not care the PDM serial clock, it's recommended set Fpdm = 128*48000.
|
|
|
* Otherwise, the second configuration should be adopted.
|
|
|
* @param rate sample rate (not suggest to exceed 48000 Hz, otherwise more glitches and noise may appear)
|
|
|
*/
|
|
|
@@ -278,11 +278,11 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @brief i2s default pdm tx clock configuration for DAC line mode
|
|
|
+ * @brief I2S default PDM TX clock configuration for DAC line mode
|
|
|
* @note TX PDM can only be set to the following two up-sampling rate configurations:
|
|
|
* 1: fp = 960, fs = sample_rate_hz / 100, in this case, Fpdm = 128*48000
|
|
|
* 2: fp = 960, fs = 480, in this case, Fpdm = 128*Fpcm = 128*sample_rate_hz
|
|
|
- * If the pdm receiver do not care the pdm serial clock, it's recommended set Fpdm = 128*48000.
|
|
|
+ * If the PDM receiver do not care the PDM serial clock, it's recommended set Fpdm = 128*48000.
|
|
|
* Otherwise, the second configuration should be adopted.
|
|
|
* @note The noise might be different with different configurations, this macro provides a set of configurations
|
|
|
* that have relatively high SNR (Signal Noise Ratio), you can also adjust them to fit your case.
|
|
|
@@ -313,7 +313,7 @@ esp_err_t i2s_channel_reconfig_pdm_rx_gpio(i2s_chan_handle_t handle, const i2s_p
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S slot configuration for pdm tx mode
|
|
|
+ * @brief I2S slot configuration for PDM TX mode
|
|
|
*/
|
|
|
typedef struct {
|
|
|
/* General fields */
|
|
|
@@ -342,22 +342,22 @@ typedef struct {
|
|
|
} i2s_pdm_tx_slot_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S clock configuration for pdm tx mode
|
|
|
+ * @brief I2S clock configuration for PDM TX mode
|
|
|
*/
|
|
|
typedef struct {
|
|
|
/* General fields */
|
|
|
uint32_t sample_rate_hz; /*!< I2S sample rate, not suggest to exceed 48000 Hz, otherwise more glitches and noise may appear */
|
|
|
i2s_clock_src_t clk_src; /*!< Choose clock source */
|
|
|
- i2s_mclk_multiple_t mclk_multiple; /*!< The multiple of mclk to the sample rate */
|
|
|
+ i2s_mclk_multiple_t mclk_multiple; /*!< The multiple of MCLK to the sample rate */
|
|
|
/* Particular fields */
|
|
|
uint32_t up_sample_fp; /*!< Up-sampling param fp */
|
|
|
uint32_t up_sample_fs; /*!< Up-sampling param fs, not allowed to be greater than 480 */
|
|
|
- uint32_t bclk_div; /*!< The division from mclk to bclk. The minimum value is I2S_PDM_TX_BCLK_DIV_MIN.
|
|
|
+ uint32_t bclk_div; /*!< The division from MCLK to BCLK. The minimum value is I2S_PDM_TX_BCLK_DIV_MIN.
|
|
|
* It will be set to I2S_PDM_TX_BCLK_DIV_MIN by default if it is smaller than I2S_PDM_TX_BCLK_DIV_MIN */
|
|
|
} i2s_pdm_tx_clk_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S PDM tx mode GPIO pins configuration
|
|
|
+ * @brief I2S PDM TX mode GPIO pins configuration
|
|
|
*/
|
|
|
typedef struct {
|
|
|
gpio_num_t clk; /*!< PDM clk pin, output */
|
|
|
@@ -373,21 +373,21 @@ typedef struct {
|
|
|
} i2s_pdm_tx_gpio_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief I2S PDM TX mode major configuration that including clock/slot/gpio configuration
|
|
|
+ * @brief I2S PDM TX mode major configuration that including clock/slot/GPIO configuration
|
|
|
*/
|
|
|
typedef struct {
|
|
|
i2s_pdm_tx_clk_config_t clk_cfg; /*!< PDM TX clock configurations, can be generated by macro I2S_PDM_TX_CLK_DEFAULT_CONFIG */
|
|
|
i2s_pdm_tx_slot_config_t slot_cfg; /*!< PDM TX slot configurations, can be generated by macro I2S_PDM_TX_SLOT_DEFAULT_CONFIG */
|
|
|
- i2s_pdm_tx_gpio_config_t gpio_cfg; /*!< PDM TX gpio configurations, specified by user */
|
|
|
+ i2s_pdm_tx_gpio_config_t gpio_cfg; /*!< PDM TX GPIO configurations, specified by user */
|
|
|
} i2s_pdm_tx_config_t;
|
|
|
|
|
|
/**
|
|
|
- * @brief Initialize i2s channel to PDM TX mode
|
|
|
+ * @brief Initialize I2S channel to PDM TX mode
|
|
|
* @note Only allowed to be called when the channel state is REGISTERED, (i.e., channel has been allocated, but not initialized)
|
|
|
* and the state will be updated to READY if initialization success, otherwise the state will return to REGISTERED.
|
|
|
*
|
|
|
- * @param[in] handle I2S tx channel handler
|
|
|
- * @param[in] pdm_tx_cfg Configurations for PDM TX mode, including clock, slot and gpio
|
|
|
+ * @param[in] handle I2S TX channel handler
|
|
|
+ * @param[in] pdm_tx_cfg Configurations for PDM TX mode, including clock, slot and GPIO
|
|
|
* The clock configuration can be generated by the helper macro `I2S_PDM_TX_CLK_DEFAULT_CONFIG`
|
|
|
* The slot configuration can be generated by the helper macro `I2S_PDM_TX_SLOT_DEFAULT_CONFIG`
|
|
|
*
|
|
|
@@ -402,10 +402,10 @@ esp_err_t i2s_channel_init_pdm_tx_mode(i2s_chan_handle_t handle, const i2s_pdm_t
|
|
|
/**
|
|
|
* @brief Reconfigure the I2S clock for PDM TX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM TX mode, i.e., 'i2s_channel_init_pdm_tx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM TX mode, i.e., `i2s_channel_init_pdm_tx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S tx channel handler
|
|
|
+ * @param[in] handle I2S TX channel handler
|
|
|
* @param[in] clk_cfg PDM TX mode clock configuration, can be generated by `I2S_PDM_TX_CLK_DEFAULT_CONFIG`
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
@@ -417,10 +417,10 @@ esp_err_t i2s_channel_reconfig_pdm_tx_clock(i2s_chan_handle_t handle, const i2s_
|
|
|
/**
|
|
|
* @brief Reconfigure the I2S slot for PDM TX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM TX mode, i.e., 'i2s_channel_init_pdm_tx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM TX mode, i.e., `i2s_channel_init_pdm_tx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S tx channel handler
|
|
|
+ * @param[in] handle I2S TX channel handler
|
|
|
* @param[in] slot_cfg PDM TX mode slot configuration, can be generated by `I2S_PDM_TX_SLOT_DEFAULT_CONFIG`
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
@@ -431,13 +431,13 @@ esp_err_t i2s_channel_reconfig_pdm_tx_clock(i2s_chan_handle_t handle, const i2s_
|
|
|
esp_err_t i2s_channel_reconfig_pdm_tx_slot(i2s_chan_handle_t handle, const i2s_pdm_tx_slot_config_t *slot_cfg);
|
|
|
|
|
|
/**
|
|
|
- * @brief Reconfigure the I2S gpio for PDM TX mode
|
|
|
+ * @brief Reconfigure the I2S GPIO for PDM TX mode
|
|
|
* @note Only allowed to be called when the channel state is READY, i.e., channel has been initialized, but not started
|
|
|
- * this function won't change the state. 'i2s_channel_disable' should be called before calling this function if i2s has started.
|
|
|
- * @note The input channel handle has to be initialized to PDM TX mode, i.e., 'i2s_channel_init_pdm_tx_mode' has been called before reconfiguring
|
|
|
+ * this function won't change the state. `i2s_channel_disable` should be called before calling this function if I2S has started.
|
|
|
+ * @note The input channel handle has to be initialized to PDM TX mode, i.e., `i2s_channel_init_pdm_tx_mode` has been called before reconfiguring
|
|
|
*
|
|
|
- * @param[in] handle I2S tx channel handler
|
|
|
- * @param[in] gpio_cfg PDM TX mode gpio configuration, specified by user
|
|
|
+ * @param[in] handle I2S TX channel handler
|
|
|
+ * @param[in] gpio_cfg PDM TX mode GPIO configuration, specified by user
|
|
|
* @return
|
|
|
* - ESP_OK Set clock successfully
|
|
|
* - ESP_ERR_INVALID_ARG NULL pointer, invalid configuration or not PDM mode
|