/ * @brief * Calculate prescaler value used to determine DAC clock. * * @details * The DAC clock is given by: HFPERCLK / (prescale ^ 2). * * @param[in] dacFreq DAC frequency wanted. The frequency will automatically * be adjusted to be below max allowed DAC clock. * * @param[in] hfperFreq Frequency in Hz of reference HFPER clock. Set to 0 to * use currently defined HFPER clock set
| 238 | * <= @p dacFreq. |
| 239 | ******************************************************************************/ |
| 240 | uint8_t DAC_PrescaleCalc(uint32_t dacFreq, uint32_t hfperFreq) |
| 241 | { |
| 242 | uint32_t ret; |
| 243 | |
| 244 | /* Make sure selected DAC clock is below max value */ |
| 245 | if (dacFreq > DAC_MAX_CLOCK) |
| 246 | { |
| 247 | dacFreq = DAC_MAX_CLOCK; |
| 248 | } |
| 249 | |
| 250 | /* Use current HFPER frequency? */ |
| 251 | if (!hfperFreq) |
| 252 | { |
| 253 | hfperFreq = CMU_ClockFreqGet(cmuClock_HFPER); |
| 254 | } |
| 255 | |
| 256 | /* Iterate in order to determine best prescale value. Only a few possible */ |
| 257 | /* values. We start with lowest prescaler value in order to get first */ |
| 258 | /* equal or below wanted DAC frequency value. */ |
| 259 | for (ret = 0; ret <= (_DAC_CTRL_PRESC_MASK >> _DAC_CTRL_PRESC_SHIFT); ret++) |
| 260 | { |
| 261 | if ((hfperFreq >> ret) <= dacFreq) |
| 262 | break; |
| 263 | } |
| 264 | |
| 265 | return((uint8_t)ret); |
| 266 | } |
| 267 | |
| 268 | |
| 269 | /***************************************************************************//** |
nothing calls this directly
no test coverage detected