/ * @brief * Calculate prescaler value used to determine ADC clock. * * @details * The ADC clock is given by: HFPERCLK / (prescale + 1). * * @param[in] adcFreq ADC frequency wanted. The frequency will automatically * be adjusted to be within valid range according to reference manual. * * @param[in] hfperFreq Frequency in Hz of reference HFPER clock. Set to 0 to * use currently de
| 415 | * <= @p adcFreq. |
| 416 | ******************************************************************************/ |
| 417 | uint8_t ADC_PrescaleCalc(uint32_t adcFreq, uint32_t hfperFreq) |
| 418 | { |
| 419 | uint32_t ret; |
| 420 | |
| 421 | /* Make sure selected ADC clock is within valid range */ |
| 422 | if (adcFreq > ADC_MAX_CLOCK) |
| 423 | { |
| 424 | adcFreq = ADC_MAX_CLOCK; |
| 425 | } |
| 426 | else if (adcFreq < ADC_MIN_CLOCK) |
| 427 | { |
| 428 | adcFreq = ADC_MIN_CLOCK; |
| 429 | } |
| 430 | |
| 431 | /* Use current HFPER frequency? */ |
| 432 | if (!hfperFreq) |
| 433 | { |
| 434 | hfperFreq = CMU_ClockFreqGet(cmuClock_HFPER); |
| 435 | } |
| 436 | |
| 437 | ret = (hfperFreq + adcFreq - 1) / adcFreq; |
| 438 | if (ret) |
| 439 | { |
| 440 | ret--; |
| 441 | } |
| 442 | |
| 443 | return (uint8_t)ret; |
| 444 | } |
| 445 | |
| 446 | |
| 447 | /***************************************************************************//** |
no test coverage detected