mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
i2s: fixed tdm mclk doubled issue
Closes: https://github.com/espressif/esp-idf/issues/10196
This commit is contained in:
parent
919b3e621e
commit
85661a037f
@ -40,14 +40,12 @@ static esp_err_t i2s_tdm_calculate_clock(i2s_chan_handle_t handle, const i2s_tdm
|
||||
clk_info->bclk = rate * handle->total_slot * slot_bits;
|
||||
clk_info->mclk = rate * clk_cfg->mclk_multiple;
|
||||
clk_info->bclk_div = clk_info->mclk / clk_info->bclk;
|
||||
/* While RECEIVING multiple slots, the data will go wrong if the bclk_div is euqal or smaller than 2 */
|
||||
do {
|
||||
clk_info->mclk *= 2;
|
||||
clk_info->bclk_div = clk_info->mclk / clk_info->bclk;
|
||||
if (clk_info->bclk_div <= 2) {
|
||||
ESP_LOGW(TAG, "the current mclk multiple is too small, adjust the mclk multiple to %"PRIu32, clk_info->mclk / rate);
|
||||
}
|
||||
} while (clk_info->bclk_div <= 2);
|
||||
/* While RECEIVING multiple slots, the data will go wrong if the bclk_div is equal or smaller than 2 */
|
||||
if (clk_info->bclk_div <= 2) {
|
||||
clk_info->bclk_div = 3;
|
||||
clk_info->mclk = clk_info->bclk * clk_info->bclk_div;
|
||||
ESP_LOGW(TAG, "the current mclk multiple is too small, adjust the mclk multiple to %"PRIu32, clk_info->mclk / rate);
|
||||
}
|
||||
} else {
|
||||
/* For slave mode, mclk >= bclk * 8, so fix bclk_div to 2 first */
|
||||
clk_info->bclk_div = 8;
|
||||
|
Loading…
x
Reference in New Issue
Block a user