1 /***************************************************************************//** 2 * @file 3 * @brief Clock Management Unit Private API definition. 4 ******************************************************************************* 5 * # License 6 * <b>Copyright 2022 Silicon Laboratories Inc. www.silabs.com</b> 7 ******************************************************************************* 8 * 9 * SPDX-License-Identifier: Zlib 10 * 11 * The licensor of this software is Silicon Laboratories Inc. 12 * 13 * This software is provided 'as-is', without any express or implied 14 * warranty. In no event will the authors be held liable for any damages 15 * arising from the use of this software. 16 * 17 * Permission is granted to anyone to use this software for any purpose, 18 * including commercial applications, and to alter it and redistribute it 19 * freely, subject to the following restrictions: 20 * 21 * 1. The origin of this software must not be misrepresented; you must not 22 * claim that you wrote the original software. If you use this software 23 * in a product, an acknowledgment in the product documentation would be 24 * appreciated but is not required. 25 * 2. Altered source versions must be plainly marked as such, and must not be 26 * misrepresented as being the original software. 27 * 3. This notice may not be removed or altered from any source distribution. 28 * 29 ******************************************************************************/ 30 31 #ifndef SLI_EM_CMU_H 32 #define SLI_EM_CMU_H 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */ 39 #if defined(_SILICON_LABS_32B_SERIES_2) 40 41 /***************************************************************************//** 42 * @brief Performs pre-clock-selection operations to initialize the system clock. 43 * 44 * @note FOR INTERNAL USE ONLY. 45 * 46 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 47 * the clock is SYSCLK. 48 ******************************************************************************/ 49 void sli_em_cmu_SYSCLKInitPreClockSelect(void); 50 51 /***************************************************************************//** 52 * @brief Performs post-clock-selection operations to initialize the system clock. 53 * 54 * @note FOR INTERNAL USE ONLY. 55 * 56 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 57 * the clock is SYSCLK. 58 ******************************************************************************/ 59 void sli_em_cmu_SYSCLKInitPostClockSelect(bool optimize_divider); 60 61 /***************************************************************************//** 62 * @brief Sets the HFXO0 FORCEEN bit. 63 * 64 * @note FOR INTERNAL USE ONLY. 65 * 66 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 67 * the clock is SYSCLK and the selected clock source is HFXO. 68 ******************************************************************************/ 69 void sli_em_cmu_HFXOSetForceEnable(void); 70 71 /***************************************************************************//** 72 * @brief This function will set the SYSCFG->CFGSYSTIC<SYSTICEXTCLKEN> bit. 73 * 74 * @note FOR INTERNAL USE ONLY. 75 * 76 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 77 * the clock is SYSTICK. 78 ******************************************************************************/ 79 void sli_em_cmu_SYSTICEXTCLKENSet(void); 80 81 /***************************************************************************//** 82 * @brief This function will clear the SYSCFG->CFGSYSTIC<SYSTICEXTCLKEN> bit. 83 * 84 * @note FOR INTERNAL USE ONLY. 85 * 86 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 87 * the clock is SYSTICK. 88 ******************************************************************************/ 89 void sli_em_cmu_SYSTICEXTCLKENClear(void); 90 91 #define CMU_SYSCLK_SELECT_HFRCODPLL \ 92 do { \ 93 sli_em_cmu_SYSCLKInitPreClockSelect(); \ 94 CMU->SYSCLKCTRL = (CMU->SYSCLKCTRL & ~_CMU_SYSCLKCTRL_CLKSEL_MASK) \ 95 | CMU_SYSCLKCTRL_CLKSEL_HFRCODPLL; \ 96 sli_em_cmu_SYSCLKInitPostClockSelect(true); \ 97 } while (0) 98 99 #define CMU_SYSCLK_SELECT_HFXO \ 100 do { \ 101 sli_em_cmu_HFXOSetForceEnable(); \ 102 sli_em_cmu_SYSCLKInitPreClockSelect(); \ 103 CMU->SYSCLKCTRL = (CMU->SYSCLKCTRL & ~_CMU_SYSCLKCTRL_CLKSEL_MASK) \ 104 | CMU_SYSCLKCTRL_CLKSEL_HFXO; \ 105 sli_em_cmu_SYSCLKInitPostClockSelect(true); \ 106 if ((HFXO0->CTRL & HFXO_CTRL_DISONDEMAND) == 0) { \ 107 HFXO0->CTRL_CLR = HFXO_CTRL_FORCEEN; \ 108 } \ 109 } while (0) 110 111 #define CMU_SYSCLK_SELECT_CLKIN0 \ 112 do { \ 113 sli_em_cmu_SYSCLKInitPreClockSelect(); \ 114 CMU->SYSCLKCTRL = (CMU->SYSCLKCTRL & ~_CMU_SYSCLKCTRL_CLKSEL_MASK) \ 115 | CMU_SYSCLKCTRL_CLKSEL_CLKIN0; \ 116 sli_em_cmu_SYSCLKInitPostClockSelect(true); \ 117 } while (0) 118 119 #define CMU_SYSCLK_SELECT_FSRCO \ 120 do { \ 121 sli_em_cmu_SYSCLKInitPreClockSelect(); \ 122 CMU->SYSCLKCTRL = (CMU->SYSCLKCTRL & ~_CMU_SYSCLKCTRL_CLKSEL_MASK) \ 123 | CMU_SYSCLKCTRL_CLKSEL_FSRCO; \ 124 sli_em_cmu_SYSCLKInitPostClockSelect(true); \ 125 } while (0) 126 127 #if defined(RFFPLL_PRESENT) 128 129 #define CMU_SYSCLK_SELECT_RFFPLLSYS \ 130 do { \ 131 sli_em_cmu_SYSCLKInitPreClockSelect(); \ 132 CMU->SYSCLKCTRL = (CMU->SYSCLKCTRL & ~_CMU_SYSCLKCTRL_CLKSEL_MASK) \ 133 | CMU_SYSCLKCTRL_CLKSEL_RFFPLL0SYS; \ 134 sli_em_cmu_SYSCLKInitPostClockSelect(true); \ 135 } while (0) 136 137 #endif /* RFFPLL_PRESENT */ 138 139 #if defined(IADC_PRESENT) 140 #define CMU_IADCCLK_SELECT_EM01GRPACLK \ 141 do { \ 142 CMU->IADCCLKCTRL = (CMU->IADCCLKCTRL & ~_CMU_IADCCLKCTRL_CLKSEL_MASK) \ 143 | CMU_IADCCLKCTRL_CLKSEL_EM01GRPACLK; \ 144 } while (0) 145 146 #define CMU_IADC0_SELECT_EM01GRPACLK CMU_IADCCLK_SELECT_EM01GRPACLK 147 148 #if defined(HFRCOEM23_PRESENT) 149 #define CMU_IADCCLK_SELECT_HFRCOEM23 \ 150 do { \ 151 CMU->IADCCLKCTRL = (CMU->IADCCLKCTRL & ~_CMU_IADCCLKCTRL_CLKSEL_MASK) \ 152 | CMU_IADCCLKCTRL_CLKSEL_HFRCOEM23; \ 153 } while (0) 154 155 #define CMU_IADC0_SELECT_HFRCOEM23 CMU_IADCCLK_SELECT_HFRCOEM23 156 #endif /* HFRCOEM23_PRESENT */ 157 158 #define CMU_IADCCLK_SELECT_FSRCO \ 159 do { \ 160 CMU->IADCCLKCTRL = (CMU->IADCCLKCTRL & ~_CMU_IADCCLKCTRL_CLKSEL_MASK) \ 161 | CMU_IADCCLKCTRL_CLKSEL_FSRCO; \ 162 } while (0) 163 164 #define CMU_IADC0_SELECT_FSRCO CMU_IADCCLK_SELECT_FSRCO 165 #endif /* IADC_PRESENT */ 166 167 #define CMU_EM01GRPACLK_SELECT_HFRCODPLL \ 168 do { \ 169 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 170 | CMU_EM01GRPACLKCTRL_CLKSEL_HFRCODPLL; \ 171 } while (0) 172 173 #define CMU_TIMER0_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 174 #define CMU_TIMER1_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 175 #define CMU_TIMER2_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 176 #define CMU_TIMER3_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 177 #if TIMER_COUNT > 4 178 #define CMU_TIMER4_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 179 #endif /* TIMER_COUNT > 4 */ 180 #if TIMER_COUNT > 7 181 #define CMU_TIMER5_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 182 #define CMU_TIMER6_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 183 #define CMU_TIMER7_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 184 #endif /* TIMER_COUNT > 7 */ 185 #if TIMER_COUNT > 9 186 #define CMU_TIMER8_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 187 #define CMU_TIMER9_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 188 #endif /* TIMER_COUNT > 9 */ 189 #if defined(KEYSCAN_PRESENT) 190 #define CMU_KEYSCAN_SELECT_HFRCODPLL CMU_EM01GRPACLK_SELECT_HFRCODPLL 191 #endif /* KEYSCAN_PRESENT*/ 192 193 #define CMU_EM01GRPACLK_SELECT_HFXO \ 194 do { \ 195 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 196 | CMU_EM01GRPACLKCTRL_CLKSEL_HFXO; \ 197 } while (0) 198 199 #define CMU_TIMER0_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 200 #define CMU_TIMER1_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 201 #define CMU_TIMER2_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 202 #define CMU_TIMER3_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 203 #if TIMER_COUNT > 4 204 #define CMU_TIMER4_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 205 #endif /* TIMER_COUNT > 4 */ 206 #if TIMER_COUNT > 7 207 #define CMU_TIMER5_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 208 #define CMU_TIMER6_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 209 #define CMU_TIMER7_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 210 #endif /* TIMER_COUNT > 7 */ 211 #if TIMER_COUNT > 9 212 #define CMU_TIMER8_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 213 #define CMU_TIMER9_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 214 #endif /* TIMER_COUNT > 9 */ 215 #if defined(KEYSCAN_PRESENT) 216 #define CMU_KEYSCAN_SELECT_HFXO CMU_EM01GRPACLK_SELECT_HFXO 217 #endif /* KEYSCAN_PRESENT*/ 218 219 #if defined(HFRCOEM23_PRESENT) 220 #define CMU_EM01GRPACLK_SELECT_HFRCOEM23 \ 221 do { \ 222 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 223 | CMU_EM01GRPACLKCTRL_CLKSEL_HFRCOEM23; \ 224 } while (0) 225 226 #define CMU_TIMER0_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 227 #define CMU_TIMER1_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 228 #define CMU_TIMER2_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 229 #define CMU_TIMER3_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 230 #if TIMER_COUNT > 4 231 #define CMU_TIMER4_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 232 #endif /* TIMER_COUNT > 4 */ 233 #if TIMER_COUNT > 7 234 #define CMU_TIMER5_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 235 #define CMU_TIMER6_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 236 #define CMU_TIMER7_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 237 #endif /* TIMER_COUNT > 7 */ 238 #if TIMER_COUNT > 9 239 #define CMU_TIMER8_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 240 #define CMU_TIMER9_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 241 #endif /* TIMER_COUNT > 9 */ 242 #if defined(KEYSCAN_PRESENT) 243 #define CMU_KEYSCAN_SELECT_HFRCOEM23 CMU_EM01GRPACLK_SELECT_HFRCOEM23 244 #endif /* KEYSCAN_PRESENT*/ 245 #endif /* HFRCOEM23_PRESENT */ 246 247 #define CMU_EM01GRPACLK_SELECT_FSRCO \ 248 do { \ 249 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 250 | CMU_EM01GRPACLKCTRL_CLKSEL_FSRCO; \ 251 } while (0) 252 253 #define CMU_TIMER0_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 254 #define CMU_TIMER1_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 255 #define CMU_TIMER2_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 256 #define CMU_TIMER3_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 257 #if TIMER_COUNT > 4 258 #define CMU_TIMER4_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 259 #endif /* TIMER_COUNT > 4 */ 260 #if TIMER_COUNT > 7 261 #define CMU_TIMER5_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 262 #define CMU_TIMER6_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 263 #define CMU_TIMER7_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 264 #endif /* TIMER_COUNT > 7 */ 265 #if TIMER_COUNT > 9 266 #define CMU_TIMER8_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 267 #define CMU_TIMER9_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 268 #endif /* TIMER_COUNT > 9 */ 269 #if defined(KEYSCAN_PRESENT) 270 #define CMU_KEYSCAN_SELECT_FSRCO CMU_EM01GRPACLK_SELECT_FSRCO 271 #endif /* KEYSCAN_PRESENT*/ 272 273 #define CMU_EM01GRPACLK_SELECT_DISABLED \ 274 do { \ 275 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 276 | CMU_EM01GRPACLKCTRL_CLKSEL_DISABLED; \ 277 } while (0) 278 279 #if defined(CMU_EM01GRPACLKCTRL_CLKSEL_HFRCODPLLRT) 280 #define CMU_EM01GRPACLK_SELECT_HFRCODPLLRT \ 281 do { \ 282 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 283 | CMU_EM01GRPACLKCTRL_CLKSEL_HFRCODPLLRT; \ 284 } while (0) 285 286 #define CMU_TIMER0_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 287 #define CMU_TIMER1_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 288 #define CMU_TIMER2_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 289 #define CMU_TIMER3_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 290 #if TIMER_COUNT > 4 291 #define CMU_TIMER4_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 292 #endif /* TIMER_COUNT > 4 */ 293 #if TIMER_COUNT > 7 294 #define CMU_TIMER5_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 295 #define CMU_TIMER6_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 296 #define CMU_TIMER7_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 297 #endif /* TIMER_COUNT > 7 */ 298 #if TIMER_COUNT > 9 299 #define CMU_TIMER8_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 300 #define CMU_TIMER9_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 301 #endif /* TIMER_COUNT > 9 */ 302 #if defined(KEYSCAN_PRESENT) 303 #define CMU_KEYSCAN_SELECT_HFRCODPLLRT CMU_EM01GRPACLK_SELECT_HFRCODPLLRT 304 #endif /* KEYSCAN_PRESENT*/ 305 #endif /* CMU_EM01GRPACLKCTRL_CLKSEL_HFRCODPLLRT */ 306 307 #if defined(CMU_EM01GRPACLKCTRL_CLKSEL_HFXORT) 308 #define CMU_EM01GRPACLK_SELECT_HFXORT \ 309 do { \ 310 CMU->EM01GRPACLKCTRL = (CMU->EM01GRPACLKCTRL & ~_CMU_EM01GRPACLKCTRL_CLKSEL_MASK) \ 311 | CMU_EM01GRPACLKCTRL_CLKSEL_HFXORT; \ 312 } while (0) 313 314 #define CMU_TIMER0_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 315 #define CMU_TIMER1_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 316 #define CMU_TIMER2_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 317 #define CMU_TIMER3_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 318 #if TIMER_COUNT > 4 319 #define CMU_TIMER4_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 320 #endif /* TIMER_COUNT > 4 */ 321 #if TIMER_COUNT > 7 322 #define CMU_TIMER5_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 323 #define CMU_TIMER6_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 324 #define CMU_TIMER7_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 325 #endif /* TIMER_COUNT > 7 */ 326 #if TIMER_COUNT > 9 327 #define CMU_TIMER8_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 328 #define CMU_TIMER9_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 329 #endif /* TIMER_COUNT > 9 */ 330 #if defined(KEYSCAN_PRESENT) 331 #define CMU_KEYSCAN_SELECT_HFXORT CMU_EM01GRPACLK_SELECT_HFXORT 332 #endif /* KEYSCAN_PRESENT*/ 333 #endif /* CMU_EM01GRPACLKCTRL_CLKSEL_HFXORT */ 334 335 #define CMU_SYSTICK_SELECT_EM23GRPACLK \ 336 do { \ 337 sli_em_cmu_SYSTICEXTCLKENSet(); \ 338 SysTick->CTRL = (SysTick->CTRL & ~SysTick_CTRL_CLKSOURCE_Msk); \ 339 } while (0) 340 341 #define CMU_SYSTICK_SELECT_LFXO CMU_SYSTICK_SELECT_EM23GRPACLK 342 #define CMU_SYSTICK_SELECT_LFRCO CMU_SYSTICK_SELECT_EM23GRPACLK 343 #define CMU_SYSTICK_SELECT_ULFRCO CMU_SYSTICK_SELECT_EM23GRPACLK 344 345 #define CMU_SYSTICK_SELECT_HCLK \ 346 do { \ 347 sli_em_cmu_SYSTICEXTCLKENClear(); \ 348 SysTick->CTRL = (SysTick->CTRL | SysTick_CTRL_CLKSOURCE_Msk); \ 349 } while (0) 350 351 #define CMU_EM23GRPACLK_SELECT_LFRCO \ 352 do { \ 353 CMU->EM23GRPACLKCTRL = (CMU->EM23GRPACLKCTRL & ~_CMU_EM23GRPACLKCTRL_CLKSEL_MASK) \ 354 | CMU_EM23GRPACLKCTRL_CLKSEL_LFRCO; \ 355 } while (0) 356 357 #define CMU_LETIMER0_SELECT_LFRCO CMU_EM23GRPACLK_SELECT_LFRCO 358 #if defined(LESENSE_PRESENT) 359 #define CMU_LESENSE_SELECT_LFRCO CMU_EM23GRPACLK_SELECT_LFRCO 360 #define CMU_LESENSECLK_SELECT_LFRCO CMU_EM23GRPACLK_SELECT_LFRCO 361 #endif /* LESENSE_PRESENT */ 362 363 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 364 #define CMU_EM23GRPACLK_SELECT_PLFRCO \ 365 do { \ 366 CMU->EM23GRPACLKCTRL = (CMU->EM23GRPACLKCTRL & ~_CMU_EM23GRPACLKCTRL_CLKSEL_MASK) \ 367 | CMU_EM23GRPACLKCTRL_CLKSEL_LFRCO; \ 368 } while (0) 369 370 #define CMU_LETIMER0_SELECT_PLFRCO CMU_EM23GRPACLK_SELECT_PLFRCO 371 #if defined(LESENSE_PRESENT) 372 #define CMU_LESENSE_SELECT_PLFRCO CMU_EM23GRPACLK_SELECT_PLFRCO 373 #define CMU_LESENSECLK_SELECT_PLFRCO CMU_EM23GRPACLK_SELECT_PLFRCO 374 #endif /* LESENSE_PRESENT */ 375 #endif /* LFRCO_PRECISION_MODE */ 376 377 #define CMU_EM23GRPACLK_SELECT_LFXO \ 378 do { \ 379 CMU->EM23GRPACLKCTRL = (CMU->EM23GRPACLKCTRL & ~_CMU_EM23GRPACLKCTRL_CLKSEL_MASK) \ 380 | CMU_EM23GRPACLKCTRL_CLKSEL_LFXO; \ 381 } while (0) 382 383 #define CMU_LETIMER0_SELECT_LFXO CMU_EM23GRPACLK_SELECT_LFXO 384 #if defined(LESENSE_PRESENT) 385 #define CMU_LESENSE_SELECT_LFXO CMU_EM23GRPACLK_SELECT_LFXO 386 #define CMU_LESENSECLK_SELECT_LFXO CMU_EM23GRPACLK_SELECT_LFXO 387 #endif /* LESENSE_PRESENT */ 388 389 #define CMU_EM23GRPACLK_SELECT_ULFRCO \ 390 do { \ 391 CMU->EM23GRPACLKCTRL = (CMU->EM23GRPACLKCTRL & ~_CMU_EM23GRPACLKCTRL_CLKSEL_MASK) \ 392 | CMU_EM23GRPACLKCTRL_CLKSEL_ULFRCO; \ 393 } while (0) 394 395 #define CMU_LETIMER0_SELECT_ULFRCO CMU_EM23GRPACLK_SELECT_ULFRCO 396 #if defined(LESENSE_PRESENT) 397 #define CMU_LESENSE_SELECT_ULFRCO CMU_EM23GRPACLK_SELECT_ULFRCO 398 #define CMU_LESENSECLK_SELECT_ULFRCO CMU_EM23GRPACLK_SELECT_ULFRCO 399 #endif /* LESENSE_PRESENT */ 400 401 #define CMU_EM23GRPACLK_SELECT_DISABLED \ 402 do { \ 403 CMU->EM23GRPACLKCTRL = (CMU->EM23GRPACLKCTRL & ~_CMU_EM23GRPACLKCTRL_CLKSEL_MASK) \ 404 | CMU_EM23GRPACLKCTRL_CLKSEL_DISABLED; \ 405 } while (0) 406 407 #define CMU_EM4GRPACLK_SELECT_LFRCO \ 408 do { \ 409 CMU->EM4GRPACLKCTRL = (CMU->EM4GRPACLKCTRL & ~_CMU_EM4GRPACLKCTRL_CLKSEL_MASK) \ 410 | CMU_EM4GRPACLKCTRL_CLKSEL_LFRCO; \ 411 } while (0) 412 413 #define CMU_BURTC_SELECT_LFRCO CMU_EM4GRPACLK_SELECT_LFRCO 414 415 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 416 #define CMU_EM4GRPACLK_SELECT_PLFRCO \ 417 do { \ 418 CMU->EM4GRPACLKCTRL = (CMU->EM4GRPACLKCTRL & ~_CMU_EM4GRPACLKCTRL_CLKSEL_MASK) \ 419 | CMU_EM4GRPACLKCTRL_CLKSEL_LFRCO; \ 420 } while (0) 421 422 #define CMU_BURTC_SELECT_PLFRCO CMU_EM4GRPACLK_SELECT_PLFRCO 423 #endif /* LFRCO_PRECISION_MODE */ 424 425 #define CMU_EM4GRPACLK_SELECT_LFXO \ 426 do { \ 427 CMU->EM4GRPACLKCTRL = (CMU->EM4GRPACLKCTRL & ~_CMU_EM4GRPACLKCTRL_CLKSEL_MASK) \ 428 | CMU_EM4GRPACLKCTRL_CLKSEL_LFXO; \ 429 } while (0) 430 431 #define CMU_BURTC_SELECT_LFXO CMU_EM4GRPACLK_SELECT_LFXO 432 433 #define CMU_EM4GRPACLK_SELECT_ULFRCO \ 434 do { \ 435 CMU->EM4GRPACLKCTRL = (CMU->EM4GRPACLKCTRL & ~_CMU_EM4GRPACLKCTRL_CLKSEL_MASK) \ 436 | CMU_EM4GRPACLKCTRL_CLKSEL_ULFRCO; \ 437 } while (0) 438 439 #define CMU_BURTC_SELECT_ULFRCO CMU_EM4GRPACLK_SELECT_ULFRCO 440 441 #define CMU_EM4GRPACLK_SELECT_DISABLED \ 442 do { \ 443 CMU->EM4GRPACLKCTRL = (CMU->EM4GRPACLKCTRL & ~_CMU_EM4GRPACLKCTRL_CLKSEL_MASK) \ 444 | CMU_EM4GRPACLKCTRL_CLKSEL_DISABLED; \ 445 } while (0) 446 447 #if defined(_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) 448 #define CMU_EM01GRPBCLK_SELECT_HFRCODPLL \ 449 do { \ 450 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 451 | CMU_EM01GRPBCLKCTRL_CLKSEL_HFRCODPLL; \ 452 } while (0) 453 454 #define CMU_PDMREF_SELECT_HFRCODPLL CMU_EM01GRPBCLK_SELECT_HFRCODPLL 455 456 #define CMU_EM01GRPBCLK_SELECT_HFXO \ 457 do { \ 458 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 459 | CMU_EM01GRPBCLKCTRL_CLKSEL_HFXO; \ 460 } while (0) 461 462 #define CMU_PDMREF_SELECT_HFXO CMU_EM01GRPBCLK_SELECT_HFXO 463 464 #define CMU_EM01GRPBCLK_SELECT_FSRCO \ 465 do { \ 466 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 467 | CMU_EM01GRPBCLKCTRL_CLKSEL_FSRCO; \ 468 } while (0) 469 470 #define CMU_PDMREF_SELECT_FSRCO CMU_EM01GRPBCLK_SELECT_FSRCO 471 472 #define CMU_EM01GRPBCLK_SELECT_CLKIN0 \ 473 do { \ 474 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 475 | CMU_EM01GRPBCLKCTRL_CLKSEL_CLKIN0; \ 476 } while (0) 477 478 #define CMU_PDMREF_SELECT_CLKIN0 CMU_EM01GRPBCLK_SELECT_CLKIN0 479 480 #define CMU_EM01GRPBCLK_SELECT_HFRCODPLLRT \ 481 do { \ 482 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 483 | CMU_EM01GRPBCLKCTRL_CLKSEL_HFRCODPLLRT; \ 484 } while (0) 485 486 #define CMU_PDMREF_SELECT_HFRCODPLLRT CMU_EM01GRPBCLK_SELECT_HFRCODPLLRT 487 488 #define CMU_EM01GRPBCLK_SELECT_HFXORT \ 489 do { \ 490 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 491 | CMU_EM01GRPBCLKCTRL_CLKSEL_HFXORT; \ 492 } while (0) 493 494 #define CMU_PDMREF_SELECT_HFXORT CMU_EM01GRPBCLK_SELECT_HFXORT 495 496 #define CMU_EM01GRPBCLK_SELECT_DISABLED \ 497 do { \ 498 CMU->EM01GRPBCLKCTRL = (CMU->EM01GRPBCLKCTRL & ~_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) \ 499 | CMU_EM01GRPBCLKCTRL_CLKSEL_DISABLED; \ 500 } while (0) 501 502 #endif /* defined(_CMU_EM01GRPBCLKCTRL_CLKSEL_MASK) */ 503 504 #define CMU_WDOG0_SELECT_LFRCO \ 505 do { \ 506 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 507 | CMU_WDOG0CLKCTRL_CLKSEL_LFRCO; \ 508 } while (0) 509 510 #define CMU_WDOG0CLK_SELECT_LFRCO CMU_WDOG0_SELECT_LFRCO 511 512 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 513 #define CMU_WDOG0_SELECT_PLFRCO \ 514 do { \ 515 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 516 | CMU_WDOG0CLKCTRL_CLKSEL_LFRCO; \ 517 } while (0) 518 519 #define CMU_WDOG0CLK_SELECT_PLFRCO CMU_WDOG0_SELECT_PLFRCO 520 #endif /* LFRCO_PRECISION_MODE */ 521 522 #define CMU_WDOG0_SELECT_LFXO \ 523 do { \ 524 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 525 | CMU_WDOG0CLKCTRL_CLKSEL_LFXO; \ 526 } while (0) 527 528 #define CMU_WDOG0CLK_SELECT_LFXO CMU_WDOG0_SELECT_LFXO 529 530 #define CMU_WDOG0_SELECT_ULFRCO \ 531 do { \ 532 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 533 | CMU_WDOG0CLKCTRL_CLKSEL_ULFRCO; \ 534 } while (0) 535 536 #define CMU_WDOG0CLK_SELECT_ULFRCO CMU_WDOG0_SELECT_ULFRCO 537 538 #define CMU_WDOG0_SELECT_HCLKDIV1024 \ 539 do { \ 540 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 541 | CMU_WDOG0CLKCTRL_CLKSEL_HCLKDIV1024; \ 542 } while (0) 543 544 #define CMU_WDOG0CLK_SELECT_HCLKDIV1024 CMU_WDOG0_SELECT_HCLKDIV1024 545 546 #define CMU_WDOG0_SELECT_DISABLED \ 547 do { \ 548 CMU->WDOG0CLKCTRL = (CMU->WDOG0CLKCTRL & ~_CMU_WDOG0CLKCTRL_CLKSEL_MASK) \ 549 | CMU_WDOG0CLKCTRL_CLKSEL_DISABLED; \ 550 } while (0) 551 #define CMU_WDOG0CLK_SELECT_DISABLED CMU_WDOG0_SELECT_DISABLED 552 553 #if defined(_CMU_WDOG1CLKCTRL_CLKSEL_MASK) 554 #define CMU_WDOG1_SELECT_LFRCO \ 555 do { \ 556 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 557 | CMU_WDOG1CLKCTRL_CLKSEL_LFRCO; \ 558 } while (0) 559 560 #define CMU_WDOG1CLK_SELECT_LFRCO CMU_WDOG1_SELECT_LFRCO 561 562 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 563 #define CMU_WDOG1_SELECT_PLFRCO \ 564 do { \ 565 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 566 | CMU_WDOG1CLKCTRL_CLKSEL_LFRCO; \ 567 } while (0) 568 569 #define CMU_WDOG1CLK_SELECT_PLFRCO CMU_WDOG1_SELECT_PLFRCO 570 #endif /* LFRCO_PRECISION_MODE */ 571 572 #define CMU_WDOG1_SELECT_LFXO \ 573 do { \ 574 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 575 | CMU_WDOG1CLKCTRL_CLKSEL_LFXO; \ 576 } while (0) 577 578 #define CMU_WDOG1CLK_SELECT_LFXO CMU_WDOG1_SELECT_LFXO 579 580 #define CMU_WDOG1_SELECT_ULFRCO \ 581 do { \ 582 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 583 | CMU_WDOG1CLKCTRL_CLKSEL_ULFRCO; \ 584 } while (0) 585 586 #define CMU_WDOG1CLK_SELECT_ULFRCO CMU_WDOG1_SELECT_ULFRCO 587 588 #define CMU_WDOG1_SELECT_HCLKDIV1024 \ 589 do { \ 590 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 591 | CMU_WDOG1CLKCTRL_CLKSEL_HCLKDIV1024; \ 592 } while (0) 593 594 #define CMU_WDOG1CLK_SELECT_HCLKDIV1024 CMU_WDOG1_SELECT_HCLKDIV1024 595 596 #define CMU_WDOG1_SELECT_DISABLED \ 597 do { \ 598 CMU->WDOG1CLKCTRL = (CMU->WDOG1CLKCTRL & ~_CMU_WDOG1CLKCTRL_CLKSEL_MASK) \ 599 | CMU_WDOG1CLKCTRL_CLKSEL_DISABLED; \ 600 } while (0) 601 #define CMU_WDOG1CLK_SELECT_DISABLED CMU_WDOG1_SELECT_DISABLED 602 #endif /* defined(_CMU_WDOG1CLKCTRL_CLKSEL_MASK) */ 603 604 #define CMU_DPLLREFCLK_SELECT_HFXO \ 605 do { \ 606 CMU->DPLLREFCLKCTRL = (CMU->DPLLREFCLKCTRL & ~_CMU_DPLLREFCLKCTRL_CLKSEL_MASK) \ 607 | CMU_DPLLREFCLKCTRL_CLKSEL_HFXO; \ 608 } while (0) 609 610 #define CMU_DPLLREFCLK_SELECT_LFXO \ 611 do { \ 612 CMU->DPLLREFCLKCTRL = (CMU->DPLLREFCLKCTRL & ~_CMU_DPLLREFCLKCTRL_CLKSEL_MASK) \ 613 | CMU_DPLLREFCLKCTRL_CLKSEL_LFXO; \ 614 } while (0) 615 616 #define CMU_DPLLREFCLK_SELECT_CLKIN0 \ 617 do { \ 618 CMU->DPLLREFCLKCTRL = (CMU->DPLLREFCLKCTRL & ~_CMU_DPLLREFCLKCTRL_CLKSEL_MASK) \ 619 | CMU_DPLLREFCLKCTRL_CLKSEL_CLKIN0; \ 620 } while (0) 621 622 #define CMU_DPLLREFCLK_SELECT_DISABLED \ 623 do { \ 624 CMU->DPLLREFCLKCTRL = (CMU->DPLLREFCLKCTRL & ~_CMU_DPLLREFCLKCTRL_CLKSEL_MASK) \ 625 | CMU_DPLLREFCLKCTRL_CLKSEL_DISABLED; \ 626 } while (0) 627 628 #if (defined(_SILICON_LABS_32B_SERIES_2_CONFIG_4) \ 629 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_5) \ 630 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_6) \ 631 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_7) \ 632 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_8) \ 633 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_9)) \ 634 && defined(CoreDebug_DEMCR_TRCENA_Msk) 635 #define CMU_TRACECLK_RESTORE_TRACE_PRE() \ 636 bool restoreTrace = CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk; \ 637 if (restoreTrace) { \ 638 CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; \ 639 } \ 640 do {} while (0) 641 642 #define CMU_TRACECLK_RESTORE_TRACE_POST() \ 643 if (restoreTrace) { \ 644 CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; \ 645 } \ 646 do {} while (0) 647 648 #else 649 #define CMU_TRACECLK_RESTORE_TRACE_PRE() do {} while (0) 650 #define CMU_TRACECLK_RESTORE_TRACE_POST() do {} while (0) 651 #endif 652 653 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1) 654 #define CMU_TRACECLK_SELECT_HCLK \ 655 do { \ 656 CMU_TRACECLK_RESTORE_TRACE_PRE(); \ 657 CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \ 658 | CMU_TRACECLKCTRL_CLKSEL_HCLK; \ 659 CMU_TRACECLK_RESTORE_TRACE_POST(); \ 660 } while (0) 661 662 #endif /* _SILICON_LABS_32B_SERIES_2_CONFIG_1 */ 663 664 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_4) \ 665 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_5) \ 666 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_6) \ 667 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_7) \ 668 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_8) \ 669 || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_9) 670 #define CMU_TRACECLK_SELECT_SYSCLK \ 671 do { \ 672 CMU_TRACECLK_RESTORE_TRACE_PRE(); \ 673 CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \ 674 | CMU_TRACECLKCTRL_CLKSEL_SYSCLK; \ 675 CMU_TRACECLK_RESTORE_TRACE_POST(); \ 676 } while (0) 677 678 #define CMU_TRACECLK_SELECT_HFRCODPLLRT \ 679 do { \ 680 CMU_TRACECLK_RESTORE_TRACE_PRE(); \ 681 CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \ 682 | CMU_TRACECLKCTRL_CLKSEL_HFRCODPLLRT; \ 683 CMU_TRACECLK_RESTORE_TRACE_POST(); \ 684 } while (0) 685 686 #endif 687 688 #if defined(CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23) 689 #define CMU_TRACECLK_SELECT_HFRCOEM23 \ 690 do { \ 691 CMU_TRACECLK_RESTORE_TRACE_PRE(); \ 692 CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \ 693 | CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23; \ 694 CMU_TRACECLK_RESTORE_TRACE_POST(); \ 695 } while (0) 696 697 #endif /* CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23 */ 698 699 #if defined(_CMU_EUART0CLKCTRL_CLKSEL_MASK) 700 #define CMU_EUART0_SELECT_EM01GRPACLK \ 701 do { \ 702 CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \ 703 | _CMU_EUART0CLKCTRL_CLKSEL_EM01GRPACLK; \ 704 } while (0) 705 706 #define CMU_EUART0CLK_SELECT_EM01GRPACLK CMU_EUART0_SELECT_EM01GRPACLK 707 708 #define CMU_EUART0_SELECT_EM23GRPACLK \ 709 do { \ 710 CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \ 711 | _CMU_EUART0CLKCTRL_CLKSEL_EM23GRPACLK; \ 712 } while (0) 713 714 #define CMU_EUART0CLK_SELECT_EM23GRPACLK CMU_EUART0_SELECT_EM23GRPACLK 715 716 #define CMU_EUART0_SELECT_DISABLED \ 717 do { \ 718 CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \ 719 | _CMU_EUART0CLKCTRL_CLKSEL_DISABLED; \ 720 } while (0) 721 #define CMU_EUART0CLK_SELECT_DISABLED CMU_EUART0_SELECT_DISABLED 722 #endif /* _CMU_EUART0CLKCTRL_CLKSEL_MASK */ 723 724 #if defined(EUSART_PRESENT) 725 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK) 726 #define CMU_EUSART0_SELECT_EM01GRPACLK \ 727 do { \ 728 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 729 | _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK; \ 730 } while (0) 731 732 #define CMU_EUSART0CLK_SELECT_EM01GRPACLK CMU_EUSART0_SELECT_EM01GRPACLK 733 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK */ 734 735 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK) 736 #define CMU_EUSART0_SELECT_EM01GRPCCLK \ 737 do { \ 738 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 739 | _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK; \ 740 } while (0) 741 742 #define CMU_EUSART0CLK_SELECT_EM01GRPCCLK CMU_EUSART0_SELECT_EM01GRPCCLK 743 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK */ 744 745 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK) 746 #define CMU_EUSART0_SELECT_EM23GRPACLK \ 747 do { \ 748 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 749 | _CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK; \ 750 } while (0) 751 752 #define CMU_EUSART0CLK_SELECT_EM23GRPACLK CMU_EUSART0_SELECT_EM23GRPACLK 753 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK */ 754 755 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_FSRCO) 756 #define CMU_EUSART0_SELECT_FSRCO \ 757 do { \ 758 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 759 | _CMU_EUSART0CLKCTRL_CLKSEL_FSRCO; \ 760 } while (0) 761 762 #define CMU_EUSART0CLK_SELECT_FSRCO CMU_EUSART0_SELECT_FSRCO 763 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_FSRCO */ 764 765 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23) 766 #define CMU_EUSART0_SELECT_HFRCOEM23 \ 767 do { \ 768 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 769 | _CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23; \ 770 } while (0) 771 772 #define CMU_EUSART0CLK_SELECT_HFRCOEM23 CMU_EUSART0_SELECT_HFRCOEM23 773 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23 */ 774 775 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_LFRCO) 776 #define CMU_EUSART0_SELECT_LFRCO \ 777 do { \ 778 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 779 | _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO; \ 780 } while (0) 781 782 #define CMU_EUSART0CLK_SELECT_LFRCO CMU_EUSART0_SELECT_LFRCO 783 784 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 785 #define CMU_EUSART0_SELECT_PLFRCO \ 786 do { \ 787 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 788 | _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO; \ 789 } while (0) 790 791 #define CMU_EUSART0CLK_SELECT_PLFRCO CMU_EUSART0_SELECT_PLFRCO 792 #endif /* LFRCO_PRECISION_MODE */ 793 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO */ 794 795 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_LFXO) 796 #define CMU_EUSART0_SELECT_LFXO \ 797 do { \ 798 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 799 | _CMU_EUSART0CLKCTRL_CLKSEL_LFXO; \ 800 } while (0) 801 802 #define CMU_EUSART0CLK_SELECT_LFXO CMU_EUSART0_SELECT_LFXO 803 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_LFXO */ 804 805 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_DISABLED) 806 #define CMU_EUSART0_SELECT_DISABLED \ 807 do { \ 808 CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \ 809 | _CMU_EUSART0CLKCTRL_CLKSEL_DISABLED; \ 810 } while (0) 811 812 #define CMU_EUSART0CLK_SELECT_DISABLED CMU_EUSART0_SELECT_DISABLED 813 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_DISABLED */ 814 #endif /* EUSART_PRESENT */ 815 816 #if defined(_CMU_EM01GRPCCLKCTRL_MASK) 817 #define CMU_EM01GRPCCLK_SELECT_HFRCODPLL \ 818 do { \ 819 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 820 | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLL; \ 821 } while (0) 822 823 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 824 #define CMU_EUSART1_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL 825 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 826 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 827 #define CMU_EUSART2_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL 828 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 829 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 830 #define CMU_EUSART3_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL 831 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 832 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 833 #define CMU_EUSART4_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL 834 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 835 836 #if defined(CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT) 837 #define CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT \ 838 do { \ 839 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 840 | CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT; \ 841 } while (0) 842 843 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 844 #define CMU_EUSART1_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT 845 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 846 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 847 #define CMU_EUSART2_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT 848 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 849 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 850 #define CMU_EUSART3_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT 851 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 852 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 853 #define CMU_EUSART4_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT 854 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 855 #endif /* CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT */ 856 857 #if defined(_CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCOEM23) 858 #define CMU_EM01GRPCCLK_SELECT_HFRCOEM23 \ 859 do { \ 860 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 861 | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCOEM23; \ 862 } while (0) 863 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 864 #define CMU_EUSART1_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23 865 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 866 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 867 #define CMU_EUSART2_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23 868 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 869 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 870 #define CMU_EUSART3_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23 871 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 872 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 873 #define CMU_EUSART4_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23 874 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 875 #endif 876 877 #define CMU_EM01GRPCCLK_SELECT_FSRCO \ 878 do { \ 879 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 880 | _CMU_EM01GRPCCLKCTRL_CLKSEL_FSRCO; \ 881 } while (0) 882 883 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 884 #define CMU_EUSART1_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO 885 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 886 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 887 #define CMU_EUSART2_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO 888 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 889 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 890 #define CMU_EUSART3_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO 891 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 892 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 893 #define CMU_EUSART4_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO 894 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 895 896 #define CMU_EM01GRPCCLK_SELECT_HFXO \ 897 do { \ 898 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 899 | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFXO; \ 900 } while (0) 901 902 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 903 #define CMU_EUSART1_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO 904 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 905 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 906 #define CMU_EUSART2_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO 907 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 908 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 909 #define CMU_EUSART3_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO 910 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 911 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 912 #define CMU_EUSART4_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO 913 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 914 915 #if defined(CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT) 916 #define CMU_EM01GRPCCLK_SELECT_HFXORT \ 917 do { \ 918 CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \ 919 | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT; \ 920 } while (0) 921 922 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1 923 #define CMU_EUSART1_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT 924 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */ 925 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2 926 #define CMU_EUSART2_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT 927 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */ 928 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3 929 #define CMU_EUSART3_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT 930 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */ 931 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4 932 #define CMU_EUSART4_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT 933 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */ 934 #endif /* CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT */ 935 #endif /* _CMU_EM01GRPCCLKCTRL_MASK */ 936 937 #if defined (RTCC_PRESENT) 938 #define CMU_RTCC_SELECT_LFRCO \ 939 do { \ 940 CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \ 941 | CMU_RTCCCLKCTRL_CLKSEL_LFRCO; \ 942 } while (0) 943 944 #define CMU_RTCCCLK_SELECT_LFRCO CMU_RTCC_SELECT_LFRCO 945 946 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 947 #define CMU_RTCC_SELECT_PLFRCO \ 948 do { \ 949 CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \ 950 | CMU_RTCCCLKCTRL_CLKSEL_LFRCO; \ 951 } while (0) 952 953 #define CMU_RTCCCLK_SELECT_PLFRCO CMU_RTCC_SELECT_PLFRCO 954 #endif /* LFRCO_PRECISION_MODE */ 955 956 #define CMU_RTCC_SELECT_LFXO \ 957 do { \ 958 CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \ 959 | CMU_RTCCCLKCTRL_CLKSEL_LFXO; \ 960 } while (0) 961 962 #define CMU_RTCCCLK_SELECT_LFXO CMU_RTCC_SELECT_LFXO 963 964 #define CMU_RTCC_SELECT_ULFRCO \ 965 do { \ 966 CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \ 967 | CMU_RTCCCLKCTRL_CLKSEL_ULFRCO; \ 968 } while (0) 969 970 #define CMU_RTCCCLK_SELECT_ULFRCO CMU_RTCC_SELECT_ULFRCO 971 972 #endif /* RTCC_PRESENT */ 973 974 #if defined(SYSRTC_PRESENT) 975 #define CMU_SYSRTC_SELECT_LFRCO \ 976 do { \ 977 CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \ 978 | CMU_SYSRTC0CLKCTRL_CLKSEL_LFRCO; \ 979 } while (0) 980 981 #define CMU_SYSRTCCLK_SELECT_LFRCO CMU_SYSRTC_SELECT_LFRCO 982 983 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 984 #define CMU_SYSRTC_SELECT_PLFRCO \ 985 do { \ 986 CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \ 987 | CMU_SYSRTC0CLKCTRL_CLKSEL_LFRCO; \ 988 } while (0) 989 990 #define CMU_SYSRTCCLK_SELECT_PLFRCO CMU_SYSRTC_SELECT_PLFRCO 991 #endif /* LFRCO_PRECISION_MODE */ 992 993 #define CMU_SYSRTC_SELECT_LFXO \ 994 do { \ 995 CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \ 996 | CMU_SYSRTC0CLKCTRL_CLKSEL_LFXO; \ 997 } while (0) 998 999 #define CMU_SYSRTCCLK_SELECT_LFXO CMU_SYSRTC_SELECT_LFXO 1000 1001 #define CMU_SYSRTC_SELECT_ULFRCO \ 1002 do { \ 1003 CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \ 1004 | CMU_SYSRTC0CLKCTRL_CLKSEL_ULFRCO; \ 1005 } while (0) 1006 1007 #define CMU_SYSRTCCLK_SELECT_ULFRCO CMU_SYSRTC_SELECT_ULFRCO 1008 1009 #define CMU_SYSRTC_SELECT_DISABLED \ 1010 do { \ 1011 CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \ 1012 | CMU_SYSRTC0CLKCTRL_CLKSEL_DISABLED; \ 1013 } while (0) 1014 1015 #define CMU_SYSRTCCLK_SELECT_DISABLED CMU_SYSRTC_SELECT_DISABLED 1016 #endif /* SYSRTC_PRESENT */ 1017 1018 #if defined(LCD_PRESENT) 1019 #define CMU_LCD_SELECT_LFRCO \ 1020 do { \ 1021 CMU->LCDCLKCTRL = (CMU->LCDCLKCTRL & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \ 1022 | CMU_LCDCLKCTRL_CLKSEL_LFRCO; \ 1023 } while (0) 1024 1025 #define CMU_LCDCLK_SELECT_LFRCO CMU_LCD_SELECT_LFRCO 1026 1027 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1) 1028 #define CMU_LCD_SELECT_PLFRCO \ 1029 do { \ 1030 CMU->LCDCLKCTRL = (CMU->LCDCLKCTRL & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \ 1031 | CMU_LCDCLKCTRL_CLKSEL_LFRCO; \ 1032 } while (0) 1033 1034 #define CMU_LCDCLK_SELECT_PLFRCO CMU_LCD_SELECT_PLFRCO 1035 #endif /* LFRCO_PRECISION_MODE */ 1036 1037 #define CMU_LCD_SELECT_LFXO \ 1038 do { \ 1039 CMU->LCDCLKCTRL = (CMU->LCDCLKCTRL & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \ 1040 | CMU_LCDCLKCTRL_CLKSEL_LFXO; \ 1041 } while (0) 1042 1043 #define CMU_LCDCLK_SELECT_LFXO CMU_LCD_SELECT_LFXO 1044 1045 #define CMU_LCD_SELECT_ULFRCO \ 1046 do { \ 1047 CMU->LCDCLKCTRL = (CMU->LCDCLKCTRL & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \ 1048 | CMU_LCDCLKCTRL_CLKSEL_ULFRCO; \ 1049 } while (0) 1050 1051 #define CMU_LCDCLK_SELECT_ULFRCO CMU_LCD_SELECT_ULFRCO 1052 #endif /* LCD_PRESENT */ 1053 1054 #if defined(VDAC_PRESENT) 1055 #define CMU_VDAC0_SELECT_FSRCO \ 1056 do { \ 1057 CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \ 1058 | CMU_VDAC0CLKCTRL_CLKSEL_FSRCO; \ 1059 } while (0) 1060 1061 #define CMU_VDAC0CLK_SELECT_FSRCO CMU_VDAC_SELECT_FSRCO 1062 1063 #define CMU_VDAC0_SELECT_HFRCOEM23 \ 1064 do { \ 1065 CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \ 1066 | CMU_VDAC0CLKCTRL_CLKSEL_HFRCOEM23; \ 1067 } while (0) 1068 1069 #define CMU_VDAC0CLK_SELECT_HFRCOEM23 CMU_VDAC_SELECT_HFRCOEM23 1070 1071 #define CMU_VDAC0_SELECT_EM01GRPACLK \ 1072 do { \ 1073 CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \ 1074 | CMU_VDAC0CLKCTRL_CLKSEL_EM01GRPACLK; \ 1075 } while (0) 1076 1077 #define CMU_VDAC0CLK_SELECT_EM01GRPACLK CMU_VDAC_SELECT_EM01GRPACLK 1078 1079 #define CMU_VDAC0_SELECT_EM23GRPACLK \ 1080 do { \ 1081 CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \ 1082 | CMU_VDAC0CLKCTRL_CLKSEL_EM23GRPACLK; \ 1083 } while (0) 1084 1085 #define CMU_VDAC0CLK_SELECT_EM23GRPACLK CMU_VDAC_SELECT_EM23GRPACLK 1086 1087 #if (VDAC_COUNT > 1) 1088 #define CMU_VDAC1_SELECT_FSRCO \ 1089 do { \ 1090 CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \ 1091 | CMU_VDAC1CLKCTRL_CLKSEL_FSRCO; \ 1092 } while (0) 1093 1094 #define CMU_VDAC1CLK_SELECT_FSRCO CMU_VDAC1_SELECT_FSRCO 1095 1096 #define CMU_VDAC1_SELECT_HFRCOEM23 \ 1097 do { \ 1098 CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \ 1099 | CMU_VDAC1CLKCTRL_CLKSEL_HFRCOEM23; \ 1100 } while (0) 1101 1102 #define CMU_VDAC1CLK_SELECT_HFRCOEM23 CMU_VDAC1_SELECT_HFRCOEM23 1103 1104 #define CMU_VDAC1_SELECT_EM01GRPACLK \ 1105 do { \ 1106 CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \ 1107 | CMU_VDAC1CLKCTRL_CLKSEL_EM01GRPACLK; \ 1108 } while (0) 1109 1110 #define CMU_VDAC1CLK_SELECT_EM01GRPACLK CMU_VDAC1_SELECT_EM01GRPACLK 1111 1112 #define CMU_VDAC1_SELECT_EM23GRPACLK \ 1113 do { \ 1114 CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \ 1115 | CMU_VDAC1CLKCTRL_CLKSEL_EM23GRPACLK; \ 1116 } while (0) 1117 1118 #define CMU_VDAC1CLK_SELECT_EM23GRPACLK CMU_VDAC1_SELECT_EM23GRPACLK 1119 #endif /* VDAC_COUNT > 1 */ 1120 #endif /* VDAC_PRESENT */ 1121 1122 #if defined(PCNT_PRESENT) 1123 #define CMU_PCNT0_SELECT_EM23GRPACLK \ 1124 do { \ 1125 CMU->PCNT0CLKCTRL = (CMU->PCNT0CLKCTRL & ~_CMU_PCNT0CLKCTRL_CLKSEL_MASK) \ 1126 | CMU_PCNT0CLKCTRL_CLKSEL_EM23GRPACLK; \ 1127 } while (0) 1128 1129 #define CMU_PCNT0CLK_SELECT_EM23GRPACLK CMU_PCNT0_SELECT_EM23GRPACLK 1130 1131 #define CMU_PCNT0_SELECT_PCNTEXTCLK \ 1132 do { \ 1133 CMU->PCNT0CLKCTRL = (CMU->PCNT0CLKCTRL & ~_CMU_PCNT0CLKCTRL_CLKSEL_MASK) \ 1134 | CMU_PCNT0CLKCTRL_CLKSEL_PCNTS0; \ 1135 } while (0) 1136 1137 #define CMU_PCNT0CLK_SELECT_PCNTEXTCLK CMU_PCNT0_SELECT_PCNTEXTCLK 1138 #endif /* PCNT_PRESENT */ 1139 1140 #if defined(LESENSE_PRESENT) 1141 #define CMU_LESENSEHFCLK_SELECT_FSRCO \ 1142 do { \ 1143 CMU->LESENSEHFCLKCTRL = (CMU->LESENSEHFCLKCTRL & ~_CMU_LESENSEHFCLKCTRL_CLKSEL_MASK) \ 1144 | CMU_LESENSEHFCLKCTRL_CLKSEL_FSRCO; \ 1145 } while (0) 1146 1147 #define CMU_LESENSEHFCLK_SELECT_HFRCOEM23 \ 1148 do { \ 1149 CMU->LESENSEHFCLKCTRL = (CMU->LESENSEHFCLKCTRL & ~_CMU_LESENSEHFCLKCTRL_CLKSEL_MASK) \ 1150 | CMU_LESENSEHFCLKCTRL_CLKSEL_HFRCOEM23; \ 1151 } while (0) 1152 #endif /* LESENSE_PRESENT */ 1153 1154 #if defined(USB_PRESENT) 1155 #define CMU_USB_SELECT_USBPLL0 \ 1156 do { \ 1157 CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \ 1158 | CMU_USB0CLKCTRL_CLKSEL_USBPLL0; \ 1159 } while (0) 1160 1161 #define CMU_USB_SELECT_LFXO \ 1162 do { \ 1163 CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \ 1164 | CMU_USB0CLKCTRL_CLKSEL_LFXO; \ 1165 } while (0) 1166 1167 #define CMU_USB_SELECT_LFRCO \ 1168 do { \ 1169 CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \ 1170 | CMU_USB0CLKCTRL_CLKSEL_LFRCO; \ 1171 } while (0) 1172 #endif /* USB_PRESENT */ 1173 1174 #elif defined(_SILICON_LABS_32B_SERIES_1) || defined(_SILICON_LABS_32B_SERIES_0) 1175 1176 /***************************************************************************//** 1177 * @brief This function configures the HFLE wait-states and divider suitable 1178 * for the System Core Clock. 1179 * 1180 * @note FOR INTERNAL USE ONLY. 1181 * 1182 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1183 * the clock source is HFCLKLE. 1184 ******************************************************************************/ 1185 void sli_em_cmu_SetHFLEConfigSystemCoreClock(void); 1186 1187 /***************************************************************************//** 1188 * @brief This function configures the HFLE wait-states and divider suitable 1189 * for the HF Clock. 1190 * 1191 * @note FOR INTERNAL USE ONLY. 1192 * 1193 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1194 * the clock source is HFCLKLE. 1195 ******************************************************************************/ 1196 void sli_em_cmu_SetHFLEConfigHFClock(void); 1197 1198 /***************************************************************************//** 1199 * @brief This function is used to initialize the HF clock and selecting 1200 * an LF clock source. 1201 * 1202 * @note FOR INTERNAL USE ONLY. 1203 * 1204 * @param[in]osc 1205 * Reference to a low-frequency oscillator. One of the following values is valid: 1206 * - cmuOsc_LFXO 1207 * - cmuOsc_LFRCO 1208 * 1209 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1210 * the clock is HF and LFXO or LFRCO is selected as the clock source. 1211 ******************************************************************************/ 1212 void sli_em_cmu_HFClockSelectLFOsc(uint8_t osc); 1213 1214 /***************************************************************************//** 1215 * @brief This function is used to initialize the HF clock and selecting 1216 * HFXO as the clock source. 1217 * 1218 * @note FOR INTERNAL USE ONLY. 1219 * 1220 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1221 * the clock is HF and HFXO is selected as the clock source. 1222 ******************************************************************************/ 1223 void sli_em_cmu_HFClockSelectHFXO(void); 1224 1225 /***************************************************************************//** 1226 * @brief This function is used to initialize the HF clock and selecting 1227 * HFRCO as the clock source. 1228 * 1229 * @note FOR INTERNAL USE ONLY. 1230 * 1231 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1232 * the clock is HF and HFRCO is selected as the clock source. 1233 ******************************************************************************/ 1234 void sli_em_cmu_HFClockSelectHFRCO(void); 1235 1236 #if defined(CMU_CMD_HFCLKSEL_USHFRCODIV2) 1237 /***************************************************************************//** 1238 * @brief This function is used to initialize the HF clock and selecting 1239 * USHFRCODIV2 as the clock source. 1240 * 1241 * @note FOR INTERNAL USE ONLY. 1242 * 1243 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1244 * the clock is HF and USHFRCODIV2 is selected as the clock source. 1245 ******************************************************************************/ 1246 void sli_em_cmu_HFClockSelectUSHFRCODIV2(void); 1247 #endif 1248 1249 #if defined(CMU_HFCLKSTATUS_SELECTED_HFRCODIV2) 1250 /***************************************************************************//** 1251 * @brief This function is used to initialize the HF clock and selecting 1252 * HFRCODIV2 as the clock source. 1253 * 1254 * @note FOR INTERNAL USE ONLY. 1255 * 1256 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1257 * the clock is HF and HFRCODIV2 is selected as the clock source. 1258 ******************************************************************************/ 1259 void sli_em_cmu_HFClockSelectHFRCODIV2(void); 1260 #endif 1261 1262 #if defined(CMU_HFCLKSTATUS_SELECTED_CLKIN0) 1263 /***************************************************************************//** 1264 * @brief This function is used to initialize the HF clock and selecting 1265 * CLKIN0 as the clock source. 1266 * 1267 * @note FOR INTERNAL USE ONLY. 1268 * 1269 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1270 * the clock is HF and CLKIN0 is selected as the clock source. 1271 ******************************************************************************/ 1272 void sli_em_cmu_HFClockSelectCLKIN0(void); 1273 #endif 1274 1275 #if defined(CMU_HFCLKSTATUS_SELECTED_USHFRCO) 1276 /***************************************************************************//** 1277 * @brief This function is used to initialize the HF clock and selecting 1278 * USHFRCO as the clock source. 1279 * 1280 * @note FOR INTERNAL USE ONLY. 1281 * 1282 * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when 1283 * the clock is HF and USHFRCO is selected as the clock source. 1284 ******************************************************************************/ 1285 void sli_em_cmu_HFClockSelectUSHFRCO(void); 1286 #endif 1287 1288 #define CMU_HF_SELECT_LFXO \ 1289 do { \ 1290 sli_em_cmu_HFClockSelectLFOsc((uint8_t)cmuOsc_LFXO); \ 1291 } while (0) 1292 1293 #define CMU_HF_SELECT_LFRCO \ 1294 do { \ 1295 sli_em_cmu_HFClockSelectLFOsc((uint8_t)cmuOsc_LFRCO); \ 1296 } while (0) 1297 1298 #define CMU_HF_SELECT_HFXO \ 1299 do { \ 1300 sli_em_cmu_HFClockSelectHFXO(); \ 1301 } while (0) 1302 1303 #define CMU_HF_SELECT_HFRCO \ 1304 do { \ 1305 sli_em_cmu_HFClockSelectHFRCO(); \ 1306 } while (0) 1307 1308 #if defined(CMU_CMD_HFCLKSEL_USHFRCODIV2) 1309 #define CMU_HF_SELECT_USHFRCODIV2 \ 1310 do { \ 1311 sli_em_cmu_HFClockSelectUSHFRCODIV2(); \ 1312 } while (0) 1313 #endif 1314 1315 #if defined(CMU_HFCLKSTATUS_SELECTED_HFRCODIV2) 1316 #define CMU_HF_SELECT_HFRCODIV2 \ 1317 do { \ 1318 sli_em_cmu_HFClockSelectHFRCODIV2(); \ 1319 } while (0) 1320 #endif 1321 1322 #if defined(CMU_HFCLKSTATUS_SELECTED_CLKIN0) 1323 #define CMU_HF_SELECT_CLKIN0 \ 1324 do { \ 1325 sli_em_cmu_HFClockSelectCLKIN0(); \ 1326 } while (0) 1327 #endif 1328 1329 #if defined(CMU_HFCLKSTATUS_SELECTED_USHFRCO) 1330 #define CMU_HF_SELECT_USHFRCO \ 1331 do { \ 1332 sli_em_cmu_HFClockSelectUSHFRCO(); \ 1333 } while (0) 1334 #endif 1335 1336 #if defined(_SILICON_LABS_32B_SERIES_1) 1337 #define CMU_LFA_SELECT_DISABLED \ 1338 do { \ 1339 CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_DISABLED; \ 1340 } while (0) 1341 1342 #define CMU_LFA_SELECT_LFXO \ 1343 do { \ 1344 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1345 CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_LFXO; \ 1346 } while (0) 1347 1348 #define CMU_LFA_SELECT_LFRCO \ 1349 do { \ 1350 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1351 CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_LFRCO; \ 1352 } while (0) 1353 1354 #define CMU_LFA_SELECT_ULFRCO \ 1355 do { \ 1356 CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_ULFRCO; \ 1357 } while (0) 1358 1359 #if defined(CMU_OSCENCMD_PLFRCOEN) 1360 #define CMU_LFA_SELECT_PLFRCO \ 1361 do { \ 1362 CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \ 1363 CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_PLFRCO; \ 1364 } while (0) 1365 #endif /* CMU_OSCENCMD_PLFRCOEN */ 1366 1367 #define CMU_LFB_SELECT_DISABLED \ 1368 do { \ 1369 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_DISABLED; \ 1370 } while (0) 1371 1372 #define CMU_LFB_SELECT_LFXO \ 1373 do { \ 1374 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1375 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_LFXO; \ 1376 } while (0) 1377 1378 #define CMU_LFB_SELECT_LFRCO \ 1379 do { \ 1380 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1381 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_LFRCO; \ 1382 } while (0) 1383 1384 #define CMU_LFB_SELECT_HFCLKLE \ 1385 do { \ 1386 sli_em_cmu_SetHFLEConfigHFClock(); \ 1387 BUS_RegBitWrite(&CMU->HFBUSCLKEN0, _CMU_HFBUSCLKEN0_LE_SHIFT, 1); \ 1388 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_HFCLKLE; \ 1389 } while (0) 1390 1391 #define CMU_LFB_SELECT_ULFRCO \ 1392 do { \ 1393 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_ULFRCO; \ 1394 } while (0) 1395 1396 #if defined(CMU_OSCENCMD_PLFRCOEN) 1397 #define CMU_LFB_SELECT_PLFRCO \ 1398 do { \ 1399 CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \ 1400 CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_PLFRCO; \ 1401 } while (0) 1402 #endif /* CMU_OSCENCMD_PLFRCOEN */ 1403 1404 #if defined(_CMU_LFCCLKSEL_MASK) 1405 #define CMU_LFC_SELECT_DISABLED \ 1406 do { \ 1407 CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_DISABLED; \ 1408 } while (0) 1409 1410 #define CMU_LFC_SELECT_LFXO \ 1411 do { \ 1412 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1413 CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_LFXO; \ 1414 } while (0) 1415 1416 #define CMU_LFC_SELECT_LFRCO \ 1417 do { \ 1418 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1419 CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_LFRCO; \ 1420 } while (0) 1421 1422 #define CMU_LFC_SELECT_ULFRCO \ 1423 do { \ 1424 CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_ULFRCO; \ 1425 } while (0) 1426 1427 #endif /* _CMU_LFCCLKSEL_MASK */ 1428 1429 #define CMU_LFE_SELECT_DISABLED \ 1430 do { \ 1431 CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_DISABLED; \ 1432 } while (0) 1433 1434 #define CMU_LFE_SELECT_LFXO \ 1435 do { \ 1436 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1437 CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_LFXO; \ 1438 } while (0) 1439 1440 #define CMU_LFE_SELECT_LFRCO \ 1441 do { \ 1442 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1443 CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_LFRCO; \ 1444 } while (0) 1445 1446 #define CMU_LFE_SELECT_ULFRCO \ 1447 do { \ 1448 CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_ULFRCO; \ 1449 } while (0) 1450 1451 #if defined(CMU_OSCENCMD_PLFRCOEN) 1452 #define CMU_LFE_SELECT_PLFRCO \ 1453 do { \ 1454 CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \ 1455 CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_PLFRCO; \ 1456 } while (0) 1457 #endif /* CMU_OSCENCMD_PLFRCOEN */ 1458 #endif /* _SILICON_LABS_32B_SERIES_1 */ 1459 1460 #if defined(_SILICON_LABS_32B_SERIES_0) 1461 #if defined(_CMU_LFCLKSEL_LFAE_MASK) 1462 #define CMU_LFA_SELECT_DISABLED \ 1463 do { \ 1464 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1465 & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \ 1466 | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT) \ 1467 | (0 << _CMU_LFCLKSEL_LFAE_SHIFT); \ 1468 } while (0) 1469 1470 #define CMU_LFA_SELECT_LFXO \ 1471 do { \ 1472 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1473 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1474 & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \ 1475 | (_CMU_LFCLKSEL_LFA_LFXO << _CMU_LFCLKSEL_LFA_SHIFT) \ 1476 | (0 << _CMU_LFCLKSEL_LFAE_SHIFT); \ 1477 } while (0) 1478 1479 #define CMU_LFA_SELECT_LFRCO \ 1480 do { \ 1481 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1482 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1483 & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \ 1484 | (_CMU_LFCLKSEL_LFA_LFRCO << _CMU_LFCLKSEL_LFA_SHIFT) \ 1485 | (0 << _CMU_LFCLKSEL_LFAE_SHIFT); \ 1486 } while (0) 1487 1488 #define CMU_LFA_SELECT_HFCLKLE \ 1489 do { \ 1490 sli_em_cmu_SetHFLEConfigSystemCoreClock(); \ 1491 BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1); \ 1492 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1493 & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \ 1494 | (_CMU_LFCLKSEL_LFA_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFA_SHIFT) \ 1495 | (0 << _CMU_LFCLKSEL_LFAE_SHIFT); \ 1496 } while (0) 1497 1498 #if defined(CMU_LFCLKSEL_LFAE_ULFRCO) 1499 #define CMU_LFA_SELECT_ULFRCO \ 1500 do { \ 1501 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1502 & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \ 1503 | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT) \ 1504 | (1 << _CMU_LFCLKSEL_LFAE_SHIFT); \ 1505 } while (0) 1506 #endif 1507 1508 #else 1509 #define CMU_LFA_SELECT_DISABLED \ 1510 do { \ 1511 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK) \ 1512 | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT); \ 1513 } while (0) 1514 1515 #define CMU_LFA_SELECT_LFXO \ 1516 do { \ 1517 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1518 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK) \ 1519 | (_CMU_LFCLKSEL_LFA_LFXO << _CMU_LFCLKSEL_LFA_SHIFT); \ 1520 } while (0) 1521 1522 #define CMU_LFA_SELECT_LFRCO \ 1523 do { \ 1524 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1525 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK) \ 1526 | (_CMU_LFCLKSEL_LFA_LFRCO << _CMU_LFCLKSEL_LFA_SHIFT); \ 1527 } while (0) 1528 1529 #define CMU_LFA_SELECT_HFCLKLE \ 1530 do { \ 1531 sli_em_cmu_SetHFLEConfigSystemCoreClock(); \ 1532 BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1); \ 1533 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK) \ 1534 | (_CMU_LFCLKSEL_LFA_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFA_SHIFT); \ 1535 } while (0) 1536 1537 #if defined(CMU_LFCLKSEL_LFAE_ULFRCO) 1538 #define CMU_LFA_SELECT_ULFRCO \ 1539 do { \ 1540 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK) \ 1541 | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT); \ 1542 } while (0) 1543 #endif /* CMU_LFA_SELECT_HFCLKLE */ 1544 #endif /* _CMU_LFCLKSEL_LFAE_MASK */ 1545 1546 #if defined(_CMU_LFCLKSEL_LFBE_MASK) 1547 #define CMU_LFB_SELECT_DISABLED \ 1548 do { \ 1549 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1550 & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \ 1551 | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT) \ 1552 | (0 << _CMU_LFCLKSEL_LFBE_SHIFT); \ 1553 } while (0) 1554 1555 #define CMU_LFB_SELECT_LFXO \ 1556 do { \ 1557 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1558 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1559 & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \ 1560 | (_CMU_LFCLKSEL_LFB_LFXO << _CMU_LFCLKSEL_LFB_SHIFT) \ 1561 | (0 << _CMU_LFCLKSEL_LFBE_SHIFT); \ 1562 } while (0) 1563 1564 #define CMU_LFB_SELECT_LFRCO \ 1565 do { \ 1566 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1567 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1568 & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \ 1569 | (_CMU_LFCLKSEL_LFB_LFRCO << _CMU_LFCLKSEL_LFB_SHIFT) \ 1570 | (0 << _CMU_LFCLKSEL_LFBE_SHIFT); \ 1571 } while (0) 1572 1573 #define CMU_LFB_SELECT_HFCLKLE \ 1574 do { \ 1575 sli_em_cmu_SetHFLEConfigSystemCoreClock(); \ 1576 BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1); \ 1577 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1578 & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \ 1579 | (_CMU_LFCLKSEL_LFB_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFB_SHIFT) \ 1580 | (0 << _CMU_LFCLKSEL_LFBE_SHIFT); \ 1581 } while (0) 1582 1583 #if defined(CMU_LFCLKSEL_LFBE_ULFRCO) 1584 #define CMU_LFB_SELECT_ULFRCO \ 1585 do { \ 1586 CMU->LFCLKSEL = (CMU->LFCLKSEL \ 1587 & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \ 1588 | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT) \ 1589 | (1 << _CMU_LFCLKSEL_LFBE_SHIFT); \ 1590 } while (0) 1591 #endif 1592 1593 #else 1594 #define CMU_LFB_SELECT_DISABLED \ 1595 do { \ 1596 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK) \ 1597 | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT); \ 1598 } while (0) 1599 1600 #define CMU_LFB_SELECT_LFXO \ 1601 do { \ 1602 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1603 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK) \ 1604 | (_CMU_LFCLKSEL_LFB_LFXO << _CMU_LFCLKSEL_LFB_SHIFT); \ 1605 } while (0) 1606 1607 #define CMU_LFB_SELECT_LFRCO \ 1608 do { \ 1609 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1610 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK) \ 1611 | (_CMU_LFCLKSEL_LFB_LFRCO << _CMU_LFCLKSEL_LFB_SHIFT); \ 1612 } while (0) 1613 1614 #define CMU_LFB_SELECT_HFCLKLE \ 1615 do { \ 1616 sli_em_cmu_SetHFLEConfigSystemCoreClock(); \ 1617 BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1); \ 1618 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK) \ 1619 | (_CMU_LFCLKSEL_LFB_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFB_SHIFT); \ 1620 } while (0) 1621 1622 #if defined(CMU_LFCLKSEL_LFBE_ULFRCO) 1623 #define CMU_LFB_SELECT_ULFRCO \ 1624 do { \ 1625 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK) \ 1626 | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT); \ 1627 } while (0) 1628 #endif /* CMU_LFCLKSEL_LFBE_ULFRCO */ 1629 #endif /* _CMU_LFCLKSEL_LFBE_MASK */ 1630 1631 #define CMU_LFC_SELECT_DISABLED \ 1632 do { \ 1633 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK) \ 1634 | (_CMU_LFCLKSEL_LFC_DISABLED << _CMU_LFCLKSEL_LFC_SHIFT); \ 1635 } while (0) 1636 1637 #define CMU_LFC_SELECT_LFXO \ 1638 do { \ 1639 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1640 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK) \ 1641 | (_CMU_LFCLKSEL_LFC_LFXO << _CMU_LFCLKSEL_LFC_SHIFT); \ 1642 } while (0) 1643 1644 #define CMU_LFC_SELECT_LFRCO \ 1645 do { \ 1646 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1647 CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK) \ 1648 | (_CMU_LFCLKSEL_LFC_LFRCO << _CMU_LFCLKSEL_LFC_SHIFT); \ 1649 } while (0) 1650 #endif /* _SILICON_LABS_32B_SERIES_0 */ 1651 1652 #if defined(_CMU_DBGCLKSEL_DBG_MASK) 1653 #define CMU_DBG_SELECT_AUXHFRCO \ 1654 do { \ 1655 CMU->DBGCLKSEL = CMU_DBGCLKSEL_DBG_AUXHFRCO; \ 1656 } while (0) 1657 1658 #define CMU_DBG_SELECT_HFCLK \ 1659 do { \ 1660 CMU->DBGCLKSEL = CMU_DBGCLKSEL_DBG_HFCLK; \ 1661 } while (0) 1662 #endif /* _CMU_DBGCLKSEL_DBG_MASK */ 1663 1664 #if defined(CMU_CTRL_DBGCLK) 1665 #define CMU_DBG_SELECT_AUXHFRCO \ 1666 do { \ 1667 CMU->CTRL = (CMU->CTRL & ~(_CMU_CTRL_DBGCLK_MASK)) \ 1668 | CMU_CTRL_DBGCLK_AUXHFRCO; \ 1669 } while (0) 1670 1671 #define CMU_DBG_SELECT_HFCLK \ 1672 do { \ 1673 CMU->CTRL = (CMU->CTRL & ~(_CMU_CTRL_DBGCLK_MASK)) \ 1674 | CMU_CTRL_DBGCLK_HFCLK; \ 1675 } while (0) 1676 #endif /* CMU_CTRL_DBGCLK */ 1677 1678 #if defined(USB_PRESENT) && defined(_CMU_HFCORECLKEN0_USBC_MASK) 1679 #define CMU_USBC_SELECT_LFXO \ 1680 do { \ 1681 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1682 CMU->CMD = CMU_CMD_USBCCLKSEL_LFXO; \ 1683 while ((CMU->STATUS & CMU_STATUS_USBCLFXOSEL) == 0) {} \ 1684 } while (0) 1685 1686 #define CMU_USBC_SELECT_LFRCO \ 1687 do { \ 1688 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1689 CMU->CMD = CMU_CMD_USBCCLKSEL_LFRCO; \ 1690 while ((CMU->STATUS & CMU_STATUS_USBCLFRCOSEL) == 0) {} \ 1691 } while (0) 1692 1693 #if defined(CMU_STATUS_USBCHFCLKSEL) 1694 #define CMU_USBC_SELECT_HFCLK \ 1695 do { \ 1696 CMU->CMD = CMU_CMD_USBCCLKSEL_HFCLKNODIV; \ 1697 while ((CMU->STATUS & CMU_STATUS_USBCHFCLKSEL) == 0) {} \ 1698 } while (0) 1699 #endif /* CMU_STATUS_USBCHFCLKSEL */ 1700 1701 #if defined(CMU_CMD_USBCCLKSEL_USHFRCO) 1702 #define CMU_USBC_SELECT_USHFRCO \ 1703 do { \ 1704 CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true); \ 1705 CMU->CMD = CMU_CMD_USBCCLKSEL_USHFRCO; \ 1706 while ((CMU->STATUS & CMU_STATUS_USBCUSHFRCOSEL) == 0) {} \ 1707 } while (0) 1708 #endif /* CMU_CMD_USBCCLKSEL_USHFRCO */ 1709 #endif /* USB_PRESENT && _CMU_HFCORECLKEN0_USBC_MASK */ 1710 1711 #if defined(_CMU_ADCCTRL_ADC0CLKSEL_MASK) 1712 #define CMU_ADC0ASYNC_SELECT_DISABLED \ 1713 do { \ 1714 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK) \ 1715 | (_CMU_ADCCTRL_ADC0CLKSEL_DISABLED << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \ 1716 } while (0) 1717 1718 #define CMU_ADC0ASYNC_SELECT_AUXHFRCO \ 1719 do { \ 1720 CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true); \ 1721 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK) \ 1722 | (_CMU_ADCCTRL_ADC0CLKSEL_AUXHFRCO << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \ 1723 } while (0) 1724 1725 #define CMU_ADC0ASYNC_SELECT_HFXO \ 1726 do { \ 1727 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1728 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK) \ 1729 | (_CMU_ADCCTRL_ADC0CLKSEL_HFXO << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \ 1730 } while (0) 1731 1732 #define CMU_ADC0ASYNC_SELECT_HFSRCCLK \ 1733 do { \ 1734 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK) \ 1735 | (_CMU_ADCCTRL_ADC0CLKSEL_HFSRCCLK << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \ 1736 } while (0) 1737 #endif /* _CMU_ADCCTRL_ADC0CLKSEL_MASK */ 1738 1739 #if defined(_CMU_ADCCTRL_ADC1CLKSEL_MASK) 1740 #define CMU_ADC1ASYNC_SELECT_DISABLED \ 1741 do { \ 1742 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK) \ 1743 | (_CMU_ADCCTRL_ADC1CLKSEL_DISABLED << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \ 1744 } while (0) 1745 1746 #define CMU_ADC1ASYNC_SELECT_AUXHFRCO \ 1747 do { \ 1748 CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true); \ 1749 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK) \ 1750 | (_CMU_ADCCTRL_ADC1CLKSEL_AUXHFRCO << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \ 1751 } while (0) 1752 1753 #define CMU_ADC1ASYNC_SELECT_HFXO \ 1754 do { \ 1755 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1756 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK) \ 1757 | (_CMU_ADCCTRL_ADC1CLKSEL_HFXO << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \ 1758 } while (0) 1759 1760 #define CMU_ADC1ASYNC_SELECT_HFSRCCLK \ 1761 do { \ 1762 CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK) \ 1763 | (_CMU_ADCCTRL_ADC1CLKSEL_HFSRCCLK << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \ 1764 } while (0) 1765 #endif /* _CMU_ADCCTRL_ADC1CLKSEL_MASK */ 1766 1767 #if defined(_CMU_SDIOCTRL_SDIOCLKSEL_MASK) 1768 #define CMU_SDIOREF_SELECT_HFRCO \ 1769 do { \ 1770 CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); \ 1771 CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK) \ 1772 | (_CMU_SDIOCTRL_SDIOCLKSEL_HFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \ 1773 } while (0) 1774 1775 #define CMU_SDIOREF_SELECT_HFXO \ 1776 do { \ 1777 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1778 CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK) \ 1779 | (_CMU_SDIOCTRL_SDIOCLKSEL_HFXO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \ 1780 } while (0) 1781 1782 #define CMU_SDIOREF_SELECT_AUXHFRCO \ 1783 do { \ 1784 CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true); \ 1785 CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK) \ 1786 | (_CMU_SDIOCTRL_SDIOCLKSEL_AUXHFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \ 1787 } while (0) 1788 1789 #define CMU_SDIOREF_SELECT_USHFRCO \ 1790 do { \ 1791 CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true); \ 1792 CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK) \ 1793 | (_CMU_SDIOCTRL_SDIOCLKSEL_USHFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \ 1794 } while (0) 1795 #endif /* _CMU_SDIOCTRL_SDIOCLKSEL_MASK */ 1796 1797 #if defined(_CMU_QSPICTRL_QSPI0CLKSEL_MASK) 1798 #define CMU_QSPI0REF_SELECT_HFRCO \ 1799 do { \ 1800 CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); \ 1801 CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK) \ 1802 | (_CMU_QSPICTRL_QSPI0CLKSEL_HFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \ 1803 } while (0) 1804 1805 #define CMU_QSPI0REF_SELECT_HFXO \ 1806 do { \ 1807 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1808 CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK) \ 1809 | (_CMU_QSPICTRL_QSPI0CLKSEL_HFXO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \ 1810 } while (0) 1811 1812 #define CMU_QSPI0REF_SELECT_AUXHFRCO \ 1813 do { \ 1814 CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true); \ 1815 CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK) \ 1816 | (_CMU_QSPICTRL_QSPI0CLKSEL_AUXHFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \ 1817 } while (0) 1818 1819 #define CMU_QSPI0REF_SELECT_USHFRCO \ 1820 do { \ 1821 CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true); \ 1822 CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK) \ 1823 | (_CMU_QSPICTRL_QSPI0CLKSEL_USHFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \ 1824 } while (0) 1825 #endif /* _CMU_QSPICTRL_QSPI0CLKSEL_MASK */ 1826 1827 #if defined(_CMU_USBCTRL_USBCLKSEL_MASK) 1828 #define CMU_USBR_SELECT_USHFRCO \ 1829 do { \ 1830 CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true); \ 1831 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1832 | (_CMU_USBCTRL_USBCLKSEL_USHFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1833 } while (0) 1834 1835 #define CMU_USBR_SELECT_HFXO \ 1836 do { \ 1837 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1838 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1839 | (_CMU_USBCTRL_USBCLKSEL_HFXO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1840 } while (0) 1841 1842 #define CMU_USBR_SELECT_HFXOX2 \ 1843 do { \ 1844 EFM_ASSERT(SystemHFXOClockGet() <= 25000000u); \ 1845 CMU->HFXOCTRL |= CMU_HFXOCTRL_HFXOX2EN; \ 1846 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1847 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1848 | (_CMU_USBCTRL_USBCLKSEL_HFXOX2 << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1849 } while (0) 1850 1851 #define CMU_USBR_SELECT_HFRCO \ 1852 do { \ 1853 CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); \ 1854 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1855 | (_CMU_USBCTRL_USBCLKSEL_HFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1856 } while (0) 1857 1858 #define CMU_USBR_SELECT_LFXO \ 1859 do { \ 1860 CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \ 1861 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1862 | (_CMU_USBCTRL_USBCLKSEL_LFXO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1863 } while (0) 1864 1865 #define CMU_USBR_SELECT_LFRCO \ 1866 do { \ 1867 CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \ 1868 CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK) \ 1869 | (_CMU_USBCTRL_USBCLKSEL_LFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \ 1870 } while (0) 1871 #endif /* _CMU_USBCTRL_USBCLKSEL_MASK */ 1872 1873 #if defined(_CMU_PDMCTRL_PDMCLKSEL_MASK) 1874 #define CMU_PDMREF_SELECT_USHFRCO \ 1875 do { \ 1876 CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true); \ 1877 CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK) \ 1878 | (_CMU_PDMCTRL_PDMCLKSEL_USHFRCO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \ 1879 } while (0) 1880 1881 #define CMU_PDMREF_SELECT_HFXO \ 1882 do { \ 1883 CMU_OscillatorEnable(cmuOsc_HFXO, true, true); \ 1884 CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK) \ 1885 | (_CMU_PDMCTRL_PDMCLKSEL_HFXO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \ 1886 } while (0) 1887 1888 #define CMU_PDMREF_SELECT_HFRCO \ 1889 do { \ 1890 CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); \ 1891 CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK) \ 1892 | (_CMU_PDMCTRL_PDMCLKSEL_HFRCO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \ 1893 } while (0) 1894 #endif /* _CMU_PDMCTRL_PDMCLKSEL_MASK */ 1895 #endif /* _SILICON_LABS_32B_SERIES_2 */ 1896 /** @endcond */ 1897 1898 #ifdef __cplusplus 1899 } 1900 #endif 1901 1902 #endif /* SLI_EM_CMU_H */ 1903