[in] i2s元素句柄 * @param[in] 时钟频率(以Hz为单位) * @param[in] 音频位宽(8、16、24、32) * @param[in] 音频通道数(1:单声道,2:立体声) * * @return * - ESP_OK * - ESP_FAIL */ esp_err_t i2s_stream_set_clk(audio_element_handle_t i2s_stream, int rate, int bits, int ch...
ESP_ERROR_CHECK(i2s_new_channel(&chcfg, &iis_tx_ch, NULL));//2、配置通道i2s_std_config_t stdcfg ={//时钟源,调用默认宏设置就行了.clk_cfg =I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE),//slot其实就是声道数.slot_cfg =I2S_STD_PCM_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT...
{ struct aic_dma_chan *dma_chan; struct aic_audio_buf_info buf_info; int transfer_type; }; struct aic_i2s_ctrl { unsigned long reg_base; uint32_t irq_num; uint32_t clk_id; uint32_t idx; struct aic_audio_transfer_info tx_info; // TX buffer 的参数 struct aic_audio_transfer_...
Cmd(I2Sx_CLK,ENABLE);/DMA1时钟使能 DMADeInit(I2Sx_TX_DMA_STREAM; //等待DMAStream可 while (_GetCmdStatusI2Sx_TX_DMA_STREAM != DISABLE) {} //DMA_4上所有中断DMA_ClearITPendingBitI2Sx_TXDMASTREAM, DMA_IT_FEIF4|DMA_IT_DMEIF
如上图2所示,当MCKOE位为‘0’时芯片不需要输出MCK时钟,预分频器直接将I2SCLK分频到CK;当MCKOE位为‘1’时芯片会输出MCK时钟,预分频器将I2SCLK分频后得到MCK,然后再经过分频处理才得到CK(分频倍数由CHLEN选择为 4或8)。 音频采样率一般常用 192KHz,96 KHz,48 KHz,44.1 KHz,32 KHz,22.05 KHz,16 KHz,11....
查看时钟clk summary 查询音频时钟,确认时钟设置正确 示例:查询 i2s0 mclk 频率,以及其所在的 pll,结果:mclk 为 12288000 Hz,pll 源为 cpll cat /sys/kernel/debug/clk/clk_summary | egrep "i2s0|pll" pll_cpll 1 1 0 500000000 cpll 5 10 0 500000000 mclk_i2s0_rx_div 0 0 0 500000000 mclk_i2...
PDM一般是麦克风用,播放音频需要用 STD(标准模式)。为了方便配置,IDF 也提供了一组宏,可以直接用,只要指定采样率(Hz)即可,其他参数保持默认。如 I2S_STD_CLK_DEFAULT_CONFIG 宏可直接配置标准 I2S。配置参数传给 i2s_channel_init_std_mode 函数进行初始化。
查看时钟clk summary 查询音频时钟,确认时钟设置正确 示例:查询 i2s0 mclk 频率,以及其所在的 pll,结果:mclk 为 12288000 Hz,pll 源为 cpll cat/sys/kernel/debug/clk/clk_summary | egrep"i2s0|pll"pll_cpll 1 1 0 500000000 cpll 5 10 0 500000000 ...
esp_err_t i2s_stream_set_channel_type(i2s_stream_cfg_t *config, i2s_channel_type_t type) { AUDIO_NULL_CHECK(TAG, config != NULL, {return ESP_ERR_INVALID_ARG;}); switch (type) { case I2S_CHANNEL_TYPE_RIGHT_LEFT: config->i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT; br...
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(i2sHandle->Instance==SPI3) {/* USER CODE BEGIN SPI3_MspInit 0 */ /* USER CODE END SPI3_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; ...