kinetis: Fix ADC clock computation

The ADC prescaler computation was broken and gave too high ADC clock for
module clocks slower than 32 MHz (the >32 MHz case is already handled
separately)
This commit is contained in:
Joakim Nohlgård 2016-12-05 16:58:58 +01:00
parent 364874f7e1
commit c2ccc1bfa0

View File

@ -158,15 +158,15 @@ int adc_init(adc_t line)
* than 12 MHz */ * than 12 MHz */
/* For the calibration it is important that the ADC clock is <= 4 MHz */ /* For the calibration it is important that the ADC clock is <= 4 MHz */
uint32_t adiv; uint32_t adiv;
int i = 4; if (CLOCK_BUSCLOCK > (ADC_MAX_CLK << 3)) {
if (CLOCK_BUSCLOCK > (ADC_MAX_CLK * 8)) {
adiv = ADC_CFG1_ADIV(3) | ADC_CFG1_ADICLK(1); adiv = ADC_CFG1_ADIV(3) | ADC_CFG1_ADICLK(1);
} }
else { else {
while ((i > 0) && (CLOCK_BUSCLOCK < (ADC_MAX_CLK * i))) { unsigned int i = 0;
i--; while ((i < 3) && (CLOCK_BUSCLOCK > (ADC_MAX_CLK << i))) {
++i;
} }
adiv = ADC_CFG1_ADIV(i - 1); adiv = ADC_CFG1_ADIV(i);
} }
/* set configuration register 1: clocking and precision */ /* set configuration register 1: clocking and precision */