i2s: fix a bug when calculating i2s apll parameters
Closes
Closes
Fixes
@@ -268,6 +268,16 @@ static esp_err_t i2s_apll_calculate_fi2s(int rate, int bits_per_sample, int *sdm
*odir = _odir;
}
}
+ min_diff = APLL_MAX_FREQ;
+ for (_sdm2 = 4; _sdm2 < 9; _sdm2 ++) {
+ max_rate = i2s_apll_get_fi2s(bits_per_sample, 255, 255, _sdm2, *odir);
+ min_rate = i2s_apll_get_fi2s(bits_per_sample, 0, 0, _sdm2, *odir);
+ avg = (max_rate + min_rate)/2;
+ if (abs(avg - rate) < min_diff) {
+ min_diff = abs(avg - rate);
+ *sdm2 = _sdm2;
+ }
+ }
min_diff = APLL_MAX_FREQ;
for (_sdm1 = 0; _sdm1 < 256; _sdm1 ++) {
