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(void);
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();                            \
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();                            \
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();                            \
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();                            \
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();                            \
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(CoreDebug_DEMCR_TRCENA_Msk)
634 #define CMU_TRACECLK_RESTORE_TRACE_PRE()                             \
635   bool restoreTrace = CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk; \
636   if (restoreTrace) {                                                \
637     CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk;                 \
638   }                                                                  \
639   do {} while (0)
640 
641 #define CMU_TRACECLK_RESTORE_TRACE_POST()           \
642   if (restoreTrace) {                               \
643     CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; \
644   }                                                 \
645   do {} while (0)
646 
647 #else
648 #define CMU_TRACECLK_RESTORE_TRACE_PRE() do {} while (0)
649 #define CMU_TRACECLK_RESTORE_TRACE_POST() do {} while (0)
650 #endif
651 
652 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1)
653 #define CMU_TRACECLK_SELECT_HCLK                                             \
654   do {                                                                       \
655     CMU_TRACECLK_RESTORE_TRACE_PRE();                                        \
656     CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \
657                         | CMU_TRACECLKCTRL_CLKSEL_HCLK;                      \
658     CMU_TRACECLK_RESTORE_TRACE_POST();                                       \
659   } while (0)
660 
661 #endif /* _SILICON_LABS_32B_SERIES_2_CONFIG_1 */
662 
663 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_4)  \
664   || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_5) \
665   || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_6) \
666   || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_7) \
667   || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_8)
668   #define CMU_TRACECLK_SELECT_SYSCLK                                         \
669   do {                                                                       \
670     CMU_TRACECLK_RESTORE_TRACE_PRE();                                        \
671     CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \
672                         | CMU_TRACECLKCTRL_CLKSEL_SYSCLK;                    \
673     CMU_TRACECLK_RESTORE_TRACE_POST();                                       \
674   } while (0)
675 
676 #define CMU_TRACECLK_SELECT_HFRCODPLLRT                                      \
677   do {                                                                       \
678     CMU_TRACECLK_RESTORE_TRACE_PRE();                                        \
679     CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \
680                         | CMU_TRACECLKCTRL_CLKSEL_HFRCODPLLRT;               \
681     CMU_TRACECLK_RESTORE_TRACE_POST();                                       \
682   } while (0)
683 
684 #endif
685 
686 #if defined(CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23)
687 #define CMU_TRACECLK_SELECT_HFRCOEM23                                        \
688   do {                                                                       \
689     CMU_TRACECLK_RESTORE_TRACE_PRE();                                        \
690     CMU->TRACECLKCTRL = (CMU->TRACECLKCTRL & ~_CMU_TRACECLKCTRL_CLKSEL_MASK) \
691                         | CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23;                 \
692     CMU_TRACECLK_RESTORE_TRACE_POST();                                       \
693   } while (0)
694 
695 #endif /* CMU_TRACECLKCTRL_CLKSEL_HFRCOEM23 */
696 
697 #if defined(_CMU_EUART0CLKCTRL_CLKSEL_MASK)
698 #define CMU_EUART0_SELECT_EM01GRPACLK                                           \
699   do {                                                                          \
700     CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \
701                          | _CMU_EUART0CLKCTRL_CLKSEL_EM01GRPACLK;               \
702   } while (0)
703 
704 #define CMU_EUART0CLK_SELECT_EM01GRPACLK CMU_EUART0_SELECT_EM01GRPACLK
705 
706 #define CMU_EUART0_SELECT_EM23GRPACLK                                           \
707   do {                                                                          \
708     CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \
709                          | _CMU_EUART0CLKCTRL_CLKSEL_EM23GRPACLK;               \
710   } while (0)
711 
712 #define CMU_EUART0CLK_SELECT_EM23GRPACLK CMU_EUART0_SELECT_EM23GRPACLK
713 
714 #define CMU_EUART0_SELECT_DISABLED                                              \
715   do {                                                                          \
716     CMU->EUART0CLKCTRL = (CMU->EUART0CLKCTRL & ~_CMU_EUART0CLKCTRL_CLKSEL_MASK) \
717                          | _CMU_EUART0CLKCTRL_CLKSEL_DISABLED;                  \
718   } while (0)
719 #define CMU_EUART0CLK_SELECT_DISABLED CMU_EUART0_SELECT_DISABLED
720 #endif /* _CMU_EUART0CLKCTRL_CLKSEL_MASK */
721 
722 #if defined(EUSART_PRESENT)
723 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK)
724 #define CMU_EUSART0_SELECT_EM01GRPACLK                                             \
725   do {                                                                             \
726     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
727                           | _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK;                \
728   } while (0)
729 
730 #define CMU_EUSART0CLK_SELECT_EM01GRPACLK CMU_EUSART0_SELECT_EM01GRPACLK
731 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPACLK */
732 
733 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK)
734 #define CMU_EUSART0_SELECT_EM01GRPCCLK                                             \
735   do {                                                                             \
736     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
737                           | _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK;                \
738   } while (0)
739 
740 #define CMU_EUSART0CLK_SELECT_EM01GRPCCLK CMU_EUSART0_SELECT_EM01GRPCCLK
741 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM01GRPCCLK */
742 
743 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK)
744 #define CMU_EUSART0_SELECT_EM23GRPACLK                                             \
745   do {                                                                             \
746     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
747                           | _CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK;                \
748   } while (0)
749 
750 #define CMU_EUSART0CLK_SELECT_EM23GRPACLK CMU_EUSART0_SELECT_EM23GRPACLK
751 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_EM23GRPACLK */
752 
753 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_FSRCO)
754 #define CMU_EUSART0_SELECT_FSRCO                                                   \
755   do {                                                                             \
756     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
757                           | _CMU_EUSART0CLKCTRL_CLKSEL_FSRCO;                      \
758   } while (0)
759 
760 #define CMU_EUSART0CLK_SELECT_FSRCO CMU_EUSART0_SELECT_FSRCO
761 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_FSRCO */
762 
763 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23)
764 #define CMU_EUSART0_SELECT_HFRCOEM23                                               \
765   do {                                                                             \
766     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
767                           | _CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23;                  \
768   } while (0)
769 
770 #define CMU_EUSART0CLK_SELECT_HFRCOEM23 CMU_EUSART0_SELECT_HFRCOEM23
771 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_HFRCOEM23 */
772 
773 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_LFRCO)
774 #define CMU_EUSART0_SELECT_LFRCO                                                   \
775   do {                                                                             \
776     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
777                           | _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO;                      \
778   } while (0)
779 
780 #define CMU_EUSART0CLK_SELECT_LFRCO CMU_EUSART0_SELECT_LFRCO
781 
782 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1)
783 #define CMU_EUSART0_SELECT_PLFRCO                                                  \
784   do {                                                                             \
785     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
786                           | _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO;                      \
787   } while (0)
788 
789 #define CMU_EUSART0CLK_SELECT_PLFRCO CMU_EUSART0_SELECT_PLFRCO
790 #endif /* LFRCO_PRECISION_MODE */
791 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_LFRCO */
792 
793 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_LFXO)
794 #define CMU_EUSART0_SELECT_LFXO                                                    \
795   do {                                                                             \
796     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
797                           | _CMU_EUSART0CLKCTRL_CLKSEL_LFXO;                       \
798   } while (0)
799 
800 #define CMU_EUSART0CLK_SELECT_LFXO CMU_EUSART0_SELECT_LFXO
801 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_LFXO */
802 
803 #if defined(_CMU_EUSART0CLKCTRL_CLKSEL_DISABLED)
804 #define CMU_EUSART0_SELECT_DISABLED                                                \
805   do {                                                                             \
806     CMU->EUSART0CLKCTRL = (CMU->EUSART0CLKCTRL & ~_CMU_EUSART0CLKCTRL_CLKSEL_MASK) \
807                           | _CMU_EUSART0CLKCTRL_CLKSEL_DISABLED;                   \
808   } while (0)
809 
810 #define CMU_EUSART0CLK_SELECT_DISABLED CMU_EUSART0_SELECT_DISABLED
811 #endif /* _CMU_EUSART0CLKCTRL_CLKSEL_DISABLED */
812 #endif /* EUSART_PRESENT */
813 
814 #if defined(_CMU_EM01GRPCCLKCTRL_MASK)
815 #define CMU_EM01GRPCCLK_SELECT_HFRCODPLL                                              \
816   do {                                                                                \
817     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
818                            | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLL;                   \
819   } while (0)
820 
821 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
822 #define CMU_EUSART1_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL
823 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
824 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
825 #define CMU_EUSART2_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL
826 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
827 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
828 #define CMU_EUSART3_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL
829 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
830 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
831 #define CMU_EUSART4_SELECT_HFRCODPLL CMU_EM01GRPCCLK_SELECT_HFRCODPLL
832 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
833 
834 #if defined(CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT)
835 #define CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT                                            \
836   do {                                                                                \
837     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
838                            | CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT;                  \
839   } while (0)
840 
841 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
842 #define CMU_EUSART1_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT
843 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
844 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
845 #define CMU_EUSART2_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT
846 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
847 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
848 #define CMU_EUSART3_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT
849 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
850 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
851 #define CMU_EUSART4_SELECT_HFRCODPLLRT CMU_EM01GRPCCLK_SELECT_HFRCODPLLRT
852 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
853 #endif /* CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCODPLLRT */
854 
855 #define CMU_EM01GRPCCLK_SELECT_HFRCOEM23                                              \
856   do {                                                                                \
857     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
858                            | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFRCOEM23;                   \
859   } while (0)
860 
861 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
862 #define CMU_EUSART1_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23
863 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
864 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
865 #define CMU_EUSART2_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23
866 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
867 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
868 #define CMU_EUSART3_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23
869 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
870 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
871 #define CMU_EUSART4_SELECT_HFRCOEM23 CMU_EM01GRPCCLK_SELECT_HFRCOEM23
872 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
873 
874 #define CMU_EM01GRPCCLK_SELECT_FSRCO                                                  \
875   do {                                                                                \
876     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
877                            | _CMU_EM01GRPCCLKCTRL_CLKSEL_FSRCO;                       \
878   } while (0)
879 
880 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
881 #define CMU_EUSART1_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO
882 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
883 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
884 #define CMU_EUSART2_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO
885 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
886 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
887 #define CMU_EUSART3_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO
888 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
889 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
890 #define CMU_EUSART4_SELECT_FSRCO CMU_EM01GRPCCLK_SELECT_FSRCO
891 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
892 
893 #define CMU_EM01GRPCCLK_SELECT_HFXO                                                   \
894   do {                                                                                \
895     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
896                            | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFXO;                        \
897   } while (0)
898 
899 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
900 #define CMU_EUSART1_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO
901 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
902 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
903 #define CMU_EUSART2_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO
904 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
905 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
906 #define CMU_EUSART3_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO
907 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
908 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
909 #define CMU_EUSART4_SELECT_HFXO CMU_EM01GRPCCLK_SELECT_HFXO
910 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
911 
912 #if defined(CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT)
913 #define CMU_EM01GRPCCLK_SELECT_HFXORT                                                 \
914   do {                                                                                \
915     CMU->EM01GRPCCLKCTRL = (CMU->EM01GRPCCLKCTRL & ~_CMU_EM01GRPCCLKCTRL_CLKSEL_MASK) \
916                            | _CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT;                      \
917   } while (0)
918 
919 #if defined(EUSART_PRESENT) && EUSART_COUNT > 1
920 #define CMU_EUSART1_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT
921 #endif /* EUSART_PRESENT && EUSART_COUNT > 1 */
922 #if defined(EUSART_PRESENT) && EUSART_COUNT > 2
923 #define CMU_EUSART2_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT
924 #endif /* EUSART_PRESENT && EUSART_COUNT > 2 */
925 #if defined(EUSART_PRESENT) && EUSART_COUNT > 3
926 #define CMU_EUSART3_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT
927 #endif /* EUSART_PRESENT && EUSART_COUNT > 3 */
928 #if defined(EUSART_PRESENT) && EUSART_COUNT > 4
929 #define CMU_EUSART4_SELECT_HFXORT CMU_EM01GRPCCLK_SELECT_HFXORT
930 #endif /* EUSART_PRESENT && EUSART_COUNT > 4 */
931 #endif /* CMU_EM01GRPCCLKCTRL_CLKSEL_HFXORT */
932 #endif /* _CMU_EM01GRPCCLKCTRL_MASK */
933 
934 #if defined (RTCC_PRESENT)
935 #define CMU_RTCC_SELECT_LFRCO                                             \
936   do {                                                                    \
937     CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \
938                        | CMU_RTCCCLKCTRL_CLKSEL_LFRCO;                    \
939   } while (0)
940 
941 #define CMU_RTCCCLK_SELECT_LFRCO CMU_RTCC_SELECT_LFRCO
942 
943 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1)
944 #define CMU_RTCC_SELECT_PLFRCO                                            \
945   do {                                                                    \
946     CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \
947                        | CMU_RTCCCLKCTRL_CLKSEL_LFRCO;                    \
948   } while (0)
949 
950 #define CMU_RTCCCLK_SELECT_PLFRCO CMU_RTCC_SELECT_PLFRCO
951 #endif /* LFRCO_PRECISION_MODE */
952 
953 #define CMU_RTCC_SELECT_LFXO                                              \
954   do {                                                                    \
955     CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \
956                        | CMU_RTCCCLKCTRL_CLKSEL_LFXO;                     \
957   } while (0)
958 
959 #define CMU_RTCCCLK_SELECT_LFXO CMU_RTCC_SELECT_LFXO
960 
961 #define CMU_RTCC_SELECT_ULFRCO                                            \
962   do {                                                                    \
963     CMU->RTCCCLKCTRL = (CMU->RTCCCLKCTRL & ~_CMU_RTCCCLKCTRL_CLKSEL_MASK) \
964                        | CMU_RTCCCLKCTRL_CLKSEL_ULFRCO;                   \
965   } while (0)
966 
967 #define CMU_RTCCCLK_SELECT_ULFRCO CMU_RTCC_SELECT_ULFRCO
968 
969 #endif /* RTCC_PRESENT */
970 
971 #if defined(SYSRTC_PRESENT)
972 #define CMU_SYSRTC_SELECT_LFRCO                                                    \
973   do {                                                                             \
974     CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \
975                           | CMU_SYSRTC0CLKCTRL_CLKSEL_LFRCO;                       \
976   } while (0)
977 
978 #define CMU_SYSRTCCLK_SELECT_LFRCO CMU_SYSRTC_SELECT_LFRCO
979 
980 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1)
981 #define CMU_SYSRTC_SELECT_PLFRCO                                                   \
982   do {                                                                             \
983     CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \
984                           | CMU_SYSRTC0CLKCTRL_CLKSEL_LFRCO;                       \
985   } while (0)
986 
987 #define CMU_SYSRTCCLK_SELECT_PLFRCO CMU_SYSRTC_SELECT_PLFRCO
988 #endif /* LFRCO_PRECISION_MODE */
989 
990 #define CMU_SYSRTC_SELECT_LFXO                                                     \
991   do {                                                                             \
992     CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \
993                           | CMU_SYSRTC0CLKCTRL_CLKSEL_LFXO;                        \
994   } while (0)
995 
996 #define CMU_SYSRTCCLK_SELECT_LFXO CMU_SYSRTC_SELECT_LFXO
997 
998 #define CMU_SYSRTC_SELECT_ULFRCO                                                   \
999   do {                                                                             \
1000     CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \
1001                           | CMU_SYSRTC0CLKCTRL_CLKSEL_ULFRCO;                      \
1002   } while (0)
1003 
1004 #define CMU_SYSRTCCLK_SELECT_ULFRCO CMU_SYSRTC_SELECT_ULFRCO
1005 
1006 #define CMU_SYSRTC_SELECT_DISABLED                                                 \
1007   do {                                                                             \
1008     CMU->SYSRTC0CLKCTRL = (CMU->SYSRTC0CLKCTRL & ~_CMU_SYSRTC0CLKCTRL_CLKSEL_MASK) \
1009                           | CMU_SYSRTC0CLKCTRL_CLKSEL_DISABLED;                    \
1010   } while (0)
1011 
1012 #define CMU_SYSRTCCLK_SELECT_DISABLED CMU_SYSRTC_SELECT_DISABLED
1013 #endif /* SYSRTC_PRESENT */
1014 
1015 #if defined(LCD_PRESENT)
1016 #define CMU_LCD_SELECT_LFRCO                                             \
1017   do {                                                                   \
1018     CMU->LCDCLKCTRL =  (CMU->LCDCLKCTRL  & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \
1019                       | CMU_LCDCLKCTRL_CLKSEL_LFRCO;                     \
1020   } while (0)
1021 
1022 #define CMU_LCDCLK_SELECT_LFRCO CMU_LCD_SELECT_LFRCO
1023 
1024 #if defined(LFRCO_PRECISION_MODE) && (LFRCO_PRECISION_MODE == 1)
1025 #define CMU_LCD_SELECT_PLFRCO                                            \
1026   do {                                                                   \
1027     CMU->LCDCLKCTRL =  (CMU->LCDCLKCTRL  & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \
1028                       | CMU_LCDCLKCTRL_CLKSEL_LFRCO;                     \
1029   } while (0)
1030 
1031 #define CMU_LCDCLK_SELECT_PLFRCO CMU_LCD_SELECT_PLFRCO
1032 #endif /* LFRCO_PRECISION_MODE */
1033 
1034 #define CMU_LCD_SELECT_LFXO                                              \
1035   do {                                                                   \
1036     CMU->LCDCLKCTRL =  (CMU->LCDCLKCTRL  & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \
1037                       | CMU_LCDCLKCTRL_CLKSEL_LFXO;                      \
1038   } while (0)
1039 
1040 #define CMU_LCDCLK_SELECT_LFXO CMU_LCD_SELECT_LFXO
1041 
1042 #define CMU_LCD_SELECT_ULFRCO                                            \
1043   do {                                                                   \
1044     CMU->LCDCLKCTRL =  (CMU->LCDCLKCTRL  & ~_CMU_LCDCLKCTRL_CLKSEL_MASK) \
1045                       | CMU_LCDCLKCTRL_CLKSEL_ULFRCO;                    \
1046   } while (0)
1047 
1048 #define CMU_LCDCLK_SELECT_ULFRCO CMU_LCD_SELECT_ULFRCO
1049 #endif /* LCD_PRESENT */
1050 
1051 #if defined(VDAC_PRESENT)
1052 #define CMU_VDAC0_SELECT_FSRCO                                               \
1053   do {                                                                       \
1054     CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \
1055                         | CMU_VDAC0CLKCTRL_CLKSEL_FSRCO;                     \
1056   } while (0)
1057 
1058 #define CMU_VDAC0CLK_SELECT_FSRCO CMU_VDAC_SELECT_FSRCO
1059 
1060 #define CMU_VDAC0_SELECT_HFRCOEM23                                           \
1061   do {                                                                       \
1062     CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \
1063                         | CMU_VDAC0CLKCTRL_CLKSEL_HFRCOEM23;                 \
1064   } while (0)
1065 
1066 #define CMU_VDAC0CLK_SELECT_HFRCOEM23 CMU_VDAC_SELECT_HFRCOEM23
1067 
1068 #define CMU_VDAC0_SELECT_EM01GRPACLK                                         \
1069   do {                                                                       \
1070     CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \
1071                         | CMU_VDAC0CLKCTRL_CLKSEL_EM01GRPACLK;               \
1072   } while (0)
1073 
1074 #define CMU_VDAC0CLK_SELECT_EM01GRPACLK CMU_VDAC_SELECT_EM01GRPACLK
1075 
1076 #define CMU_VDAC0_SELECT_EM23GRPACLK                                         \
1077   do {                                                                       \
1078     CMU->VDAC0CLKCTRL = (CMU->VDAC0CLKCTRL & ~_CMU_VDAC0CLKCTRL_CLKSEL_MASK) \
1079                         | CMU_VDAC0CLKCTRL_CLKSEL_EM23GRPACLK;               \
1080   } while (0)
1081 
1082 #define CMU_VDAC0CLK_SELECT_EM23GRPACLK CMU_VDAC_SELECT_EM23GRPACLK
1083 
1084 #if (VDAC_COUNT > 1)
1085 #define CMU_VDAC1_SELECT_FSRCO                                               \
1086   do {                                                                       \
1087     CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \
1088                         | CMU_VDAC1CLKCTRL_CLKSEL_FSRCO;                     \
1089   } while (0)
1090 
1091 #define CMU_VDAC1CLK_SELECT_FSRCO CMU_VDAC1_SELECT_FSRCO
1092 
1093 #define CMU_VDAC1_SELECT_HFRCOEM23                                           \
1094   do {                                                                       \
1095     CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \
1096                         | CMU_VDAC1CLKCTRL_CLKSEL_HFRCOEM23;                 \
1097   } while (0)
1098 
1099 #define CMU_VDAC1CLK_SELECT_HFRCOEM23 CMU_VDAC1_SELECT_HFRCOEM23
1100 
1101 #define CMU_VDAC1_SELECT_EM01GRPACLK                                         \
1102   do {                                                                       \
1103     CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \
1104                         | CMU_VDAC1CLKCTRL_CLKSEL_EM01GRPACLK;               \
1105   } while (0)
1106 
1107 #define CMU_VDAC1CLK_SELECT_EM01GRPACLK CMU_VDAC1_SELECT_EM01GRPACLK
1108 
1109 #define CMU_VDAC1_SELECT_EM23GRPACLK                                         \
1110   do {                                                                       \
1111     CMU->VDAC1CLKCTRL = (CMU->VDAC1CLKCTRL & ~_CMU_VDAC1CLKCTRL_CLKSEL_MASK) \
1112                         | CMU_VDAC1CLKCTRL_CLKSEL_EM23GRPACLK;               \
1113   } while (0)
1114 
1115 #define CMU_VDAC1CLK_SELECT_EM23GRPACLK CMU_VDAC1_SELECT_EM23GRPACLK
1116 #endif /* VDAC_COUNT > 1 */
1117 #endif /* VDAC_PRESENT */
1118 
1119 #if defined(PCNT_PRESENT)
1120 #define CMU_PCNT0_SELECT_EM23GRPACLK                                         \
1121   do {                                                                       \
1122     CMU->PCNT0CLKCTRL = (CMU->PCNT0CLKCTRL & ~_CMU_PCNT0CLKCTRL_CLKSEL_MASK) \
1123                         | CMU_PCNT0CLKCTRL_CLKSEL_EM23GRPACLK;               \
1124   } while (0)
1125 
1126 #define CMU_PCNT0CLK_SELECT_EM23GRPACLK CMU_PCNT0_SELECT_EM23GRPACLK
1127 
1128 #define CMU_PCNT0_SELECT_PCNTEXTCLK                                          \
1129   do {                                                                       \
1130     CMU->PCNT0CLKCTRL = (CMU->PCNT0CLKCTRL & ~_CMU_PCNT0CLKCTRL_CLKSEL_MASK) \
1131                         | CMU_PCNT0CLKCTRL_CLKSEL_PCNTS0;                    \
1132   } while (0)
1133 
1134 #define CMU_PCNT0CLK_SELECT_PCNTEXTCLK CMU_PCNT0_SELECT_PCNTEXTCLK
1135 #endif /* PCNT_PRESENT */
1136 
1137 #if defined(LESENSE_PRESENT)
1138 #define CMU_LESENSEHFCLK_SELECT_FSRCO                                                    \
1139   do {                                                                                   \
1140     CMU->LESENSEHFCLKCTRL = (CMU->LESENSEHFCLKCTRL & ~_CMU_LESENSEHFCLKCTRL_CLKSEL_MASK) \
1141                             | CMU_LESENSEHFCLKCTRL_CLKSEL_FSRCO;                         \
1142   } while (0)
1143 
1144 #define CMU_LESENSEHFCLK_SELECT_HFRCOEM23                                                \
1145   do {                                                                                   \
1146     CMU->LESENSEHFCLKCTRL = (CMU->LESENSEHFCLKCTRL & ~_CMU_LESENSEHFCLKCTRL_CLKSEL_MASK) \
1147                             | CMU_LESENSEHFCLKCTRL_CLKSEL_HFRCOEM23;                     \
1148   } while (0)
1149 #endif /* LESENSE_PRESENT */
1150 
1151 #if defined(USB_PRESENT)
1152 #define CMU_USB_SELECT_USBPLL0                                            \
1153   do {                                                                    \
1154     CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \
1155                        | CMU_USB0CLKCTRL_CLKSEL_USBPLL0;                  \
1156   } while (0)
1157 
1158 #define CMU_USB_SELECT_LFXO                                               \
1159   do {                                                                    \
1160     CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \
1161                        | CMU_USB0CLKCTRL_CLKSEL_LFXO;                     \
1162   } while (0)
1163 
1164 #define CMU_USB_SELECT_LFRCO                                              \
1165   do {                                                                    \
1166     CMU->USB0CLKCTRL = (CMU->USB0CLKCTRL & ~_CMU_USB0CLKCTRL_CLKSEL_MASK) \
1167                        | CMU_USB0CLKCTRL_CLKSEL_LFRCO;                    \
1168   } while (0)
1169 #endif /* USB_PRESENT */
1170 
1171 #elif defined(_SILICON_LABS_32B_SERIES_1) || defined(_SILICON_LABS_32B_SERIES_0)
1172 
1173 /***************************************************************************//**
1174  * @brief This function configures the HFLE wait-states and divider suitable
1175  *        for the System Core Clock.
1176  *
1177  * @note FOR INTERNAL USE ONLY.
1178  *
1179  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1180  *       the clock source is HFCLKLE.
1181  ******************************************************************************/
1182 void sli_em_cmu_SetHFLEConfigSystemCoreClock(void);
1183 
1184 /***************************************************************************//**
1185  * @brief This function configures the HFLE wait-states and divider suitable
1186  *        for the HF Clock.
1187  *
1188  * @note FOR INTERNAL USE ONLY.
1189  *
1190  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1191  *       the clock source is HFCLKLE.
1192  ******************************************************************************/
1193 void sli_em_cmu_SetHFLEConfigHFClock(void);
1194 
1195 /***************************************************************************//**
1196  * @brief This function is used to initialize the HF clock and selecting
1197  *        an LF clock source.
1198  *
1199  * @note FOR INTERNAL USE ONLY.
1200  *
1201  * @param[in]osc
1202  *  Reference to a low-frequency oscillator. One of the following values is valid:
1203  *  - cmuOsc_LFXO
1204  *  - cmuOsc_LFRCO
1205  *
1206  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1207  *       the clock is HF and LFXO or LFRCO is selected as the clock source.
1208  ******************************************************************************/
1209 void sli_em_cmu_HFClockSelectLFOsc(uint8_t osc);
1210 
1211 /***************************************************************************//**
1212  * @brief This function is used to initialize the HF clock and selecting
1213  *        HFXO as the clock source.
1214  *
1215  * @note FOR INTERNAL USE ONLY.
1216  *
1217  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1218  *       the clock is HF and HFXO is selected as the clock source.
1219  ******************************************************************************/
1220 void sli_em_cmu_HFClockSelectHFXO(void);
1221 
1222 /***************************************************************************//**
1223  * @brief This function is used to initialize the HF clock and selecting
1224  *        HFRCO as the clock source.
1225  *
1226  * @note FOR INTERNAL USE ONLY.
1227  *
1228  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1229  *       the clock is HF and HFRCO is selected as the clock source.
1230  ******************************************************************************/
1231 void sli_em_cmu_HFClockSelectHFRCO(void);
1232 
1233 #if defined(CMU_CMD_HFCLKSEL_USHFRCODIV2)
1234 /***************************************************************************//**
1235  * @brief This function is used to initialize the HF clock and selecting
1236  *        USHFRCODIV2 as the clock source.
1237  *
1238  * @note FOR INTERNAL USE ONLY.
1239  *
1240  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1241  *       the clock is HF and USHFRCODIV2 is selected as the clock source.
1242  ******************************************************************************/
1243 void sli_em_cmu_HFClockSelectUSHFRCODIV2(void);
1244 #endif
1245 
1246 #if defined(CMU_HFCLKSTATUS_SELECTED_HFRCODIV2)
1247 /***************************************************************************//**
1248  * @brief This function is used to initialize the HF clock and selecting
1249  *        HFRCODIV2 as the clock source.
1250  *
1251  * @note FOR INTERNAL USE ONLY.
1252  *
1253  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1254  *       the clock is HF and HFRCODIV2 is selected as the clock source.
1255  ******************************************************************************/
1256 void sli_em_cmu_HFClockSelectHFRCODIV2(void);
1257 #endif
1258 
1259 #if defined(CMU_HFCLKSTATUS_SELECTED_CLKIN0)
1260 /***************************************************************************//**
1261  * @brief This function is used to initialize the HF clock and selecting
1262  *        CLKIN0 as the clock source.
1263  *
1264  * @note FOR INTERNAL USE ONLY.
1265  *
1266  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1267  *       the clock is HF and CLKIN0 is selected as the clock source.
1268  ******************************************************************************/
1269 void sli_em_cmu_HFClockSelectCLKIN0(void);
1270 #endif
1271 
1272 #if defined(CMU_HFCLKSTATUS_SELECTED_USHFRCO)
1273 /***************************************************************************//**
1274  * @brief This function is used to initialize the HF clock and selecting
1275  *        USHFRCO as the clock source.
1276  *
1277  * @note FOR INTERNAL USE ONLY.
1278  *
1279  * @note This function is needed for macro expansion of CMU_CLOCK_SELECT_SET when
1280  *       the clock is HF and USHFRCO is selected as the clock source.
1281  ******************************************************************************/
1282 void sli_em_cmu_HFClockSelectUSHFRCO(void);
1283 #endif
1284 
1285 #define CMU_HF_SELECT_LFXO                               \
1286   do {                                                   \
1287     sli_em_cmu_HFClockSelectLFOsc((uint8_t)cmuOsc_LFXO); \
1288   } while (0)
1289 
1290 #define CMU_HF_SELECT_LFRCO                               \
1291   do {                                                    \
1292     sli_em_cmu_HFClockSelectLFOsc((uint8_t)cmuOsc_LFRCO); \
1293   } while (0)
1294 
1295 #define CMU_HF_SELECT_HFXO          \
1296   do {                              \
1297     sli_em_cmu_HFClockSelectHFXO(); \
1298   } while (0)
1299 
1300 #define CMU_HF_SELECT_HFRCO          \
1301   do {                               \
1302     sli_em_cmu_HFClockSelectHFRCO(); \
1303   } while (0)
1304 
1305 #if defined(CMU_CMD_HFCLKSEL_USHFRCODIV2)
1306 #define CMU_HF_SELECT_USHFRCODIV2          \
1307   do {                                     \
1308     sli_em_cmu_HFClockSelectUSHFRCODIV2(); \
1309   } while (0)
1310 #endif
1311 
1312 #if defined(CMU_HFCLKSTATUS_SELECTED_HFRCODIV2)
1313 #define CMU_HF_SELECT_HFRCODIV2          \
1314   do {                                   \
1315     sli_em_cmu_HFClockSelectHFRCODIV2(); \
1316   } while (0)
1317 #endif
1318 
1319 #if defined(CMU_HFCLKSTATUS_SELECTED_CLKIN0)
1320 #define CMU_HF_SELECT_CLKIN0          \
1321   do {                                \
1322     sli_em_cmu_HFClockSelectCLKIN0(); \
1323   } while (0)
1324 #endif
1325 
1326 #if defined(CMU_HFCLKSTATUS_SELECTED_USHFRCO)
1327 #define CMU_HF_SELECT_USHFRCO          \
1328   do {                                 \
1329     sli_em_cmu_HFClockSelectUSHFRCO(); \
1330   } while (0)
1331 #endif
1332 
1333 #if defined(_SILICON_LABS_32B_SERIES_1)
1334 #define CMU_LFA_SELECT_DISABLED                   \
1335   do {                                            \
1336     CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_DISABLED; \
1337   } while (0)
1338 
1339 #define CMU_LFA_SELECT_LFXO                        \
1340   do {                                             \
1341     CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \
1342     CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_LFXO;      \
1343   } while (0)
1344 
1345 #define CMU_LFA_SELECT_LFRCO                        \
1346   do {                                              \
1347     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \
1348     CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_LFRCO;      \
1349   } while (0)
1350 
1351 #define CMU_LFA_SELECT_ULFRCO                   \
1352   do {                                          \
1353     CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_ULFRCO; \
1354   } while (0)
1355 
1356 #if defined(CMU_OSCENCMD_PLFRCOEN)
1357 #define CMU_LFA_SELECT_PLFRCO                        \
1358   do {                                               \
1359     CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \
1360     CMU->LFACLKSEL = _CMU_LFACLKSEL_LFA_PLFRCO;      \
1361   } while (0)
1362 #endif /* CMU_OSCENCMD_PLFRCOEN */
1363 
1364 #define CMU_LFB_SELECT_DISABLED                   \
1365   do {                                            \
1366     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_DISABLED; \
1367   } while (0)
1368 
1369 #define CMU_LFB_SELECT_LFXO                        \
1370   do {                                             \
1371     CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \
1372     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_LFXO;      \
1373   } while (0)
1374 
1375 #define CMU_LFB_SELECT_LFRCO                        \
1376   do {                                              \
1377     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \
1378     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_LFRCO;      \
1379   } while (0)
1380 
1381 #define CMU_LFB_SELECT_HFCLKLE                                        \
1382   do {                                                                \
1383     sli_em_cmu_SetHFLEConfigHFClock();                                \
1384     BUS_RegBitWrite(&CMU->HFBUSCLKEN0, _CMU_HFBUSCLKEN0_LE_SHIFT, 1); \
1385     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_HFCLKLE;                      \
1386   } while (0)
1387 
1388 #define CMU_LFB_SELECT_ULFRCO                   \
1389   do {                                          \
1390     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_ULFRCO; \
1391   } while (0)
1392 
1393 #if defined(CMU_OSCENCMD_PLFRCOEN)
1394 #define CMU_LFB_SELECT_PLFRCO                        \
1395   do {                                               \
1396     CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \
1397     CMU->LFBCLKSEL = _CMU_LFBCLKSEL_LFB_PLFRCO;      \
1398   } while (0)
1399 #endif /* CMU_OSCENCMD_PLFRCOEN */
1400 
1401 #if defined(_CMU_LFCCLKSEL_MASK)
1402 #define CMU_LFC_SELECT_DISABLED                   \
1403   do {                                            \
1404     CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_DISABLED; \
1405   } while (0)
1406 
1407 #define CMU_LFC_SELECT_LFXO                        \
1408   do {                                             \
1409     CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \
1410     CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_LFXO;      \
1411   } while (0)
1412 
1413 #define CMU_LFC_SELECT_LFRCO                        \
1414   do {                                              \
1415     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \
1416     CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_LFRCO;      \
1417   } while (0)
1418 
1419 #define CMU_LFC_SELECT_ULFRCO                   \
1420   do {                                          \
1421     CMU->LFCCLKSEL = _CMU_LFCCLKSEL_LFC_ULFRCO; \
1422   } while (0)
1423 
1424 #endif /* _CMU_LFCCLKSEL_MASK */
1425 
1426 #define CMU_LFE_SELECT_DISABLED                   \
1427   do {                                            \
1428     CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_DISABLED; \
1429   } while (0)
1430 
1431 #define CMU_LFE_SELECT_LFXO                        \
1432   do {                                             \
1433     CMU_OscillatorEnable(cmuOsc_LFXO, true, true); \
1434     CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_LFXO;      \
1435   } while (0)
1436 
1437 #define CMU_LFE_SELECT_LFRCO                        \
1438   do {                                              \
1439     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); \
1440     CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_LFRCO;      \
1441   } while (0)
1442 
1443 #define CMU_LFE_SELECT_ULFRCO                   \
1444   do {                                          \
1445     CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_ULFRCO; \
1446   } while (0)
1447 
1448 #if defined(CMU_OSCENCMD_PLFRCOEN)
1449 #define CMU_LFE_SELECT_PLFRCO                        \
1450   do {                                               \
1451     CMU_OscillatorEnable(cmuOsc_PLFRCO, true, true); \
1452     CMU->LFECLKSEL = _CMU_LFECLKSEL_LFE_PLFRCO;      \
1453   } while (0)
1454 #endif /* CMU_OSCENCMD_PLFRCOEN */
1455 #endif /* _SILICON_LABS_32B_SERIES_1 */
1456 
1457 #if defined(_SILICON_LABS_32B_SERIES_0)
1458 #if defined(_CMU_LFCLKSEL_LFAE_MASK)
1459 #define CMU_LFA_SELECT_DISABLED                                               \
1460   do {                                                                        \
1461     CMU->LFCLKSEL = (CMU->LFCLKSEL                                            \
1462                      & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK))   \
1463                     | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT) \
1464                     | (0 << _CMU_LFCLKSEL_LFAE_SHIFT);                        \
1465   } while (0)
1466 
1467 #define CMU_LFA_SELECT_LFXO                                                 \
1468   do {                                                                      \
1469     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                          \
1470     CMU->LFCLKSEL = (CMU->LFCLKSEL                                          \
1471                      & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \
1472                     | (_CMU_LFCLKSEL_LFA_LFXO << _CMU_LFCLKSEL_LFA_SHIFT)   \
1473                     | (0 << _CMU_LFCLKSEL_LFAE_SHIFT);                      \
1474   } while (0)
1475 
1476 #define CMU_LFA_SELECT_LFRCO                                                \
1477   do {                                                                      \
1478     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                         \
1479     CMU->LFCLKSEL = (CMU->LFCLKSEL                                          \
1480                      & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK)) \
1481                     | (_CMU_LFCLKSEL_LFA_LFRCO << _CMU_LFCLKSEL_LFA_SHIFT)  \
1482                     | (0 << _CMU_LFCLKSEL_LFAE_SHIFT);                      \
1483   } while (0)
1484 
1485 #define CMU_LFA_SELECT_HFCLKLE                                                       \
1486   do {                                                                               \
1487     sli_em_cmu_SetHFLEConfigSystemCoreClock();                                       \
1488     BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1);              \
1489     CMU->LFCLKSEL = (CMU->LFCLKSEL                                                   \
1490                      & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK))          \
1491                     | (_CMU_LFCLKSEL_LFA_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFA_SHIFT) \
1492                     | (0 << _CMU_LFCLKSEL_LFAE_SHIFT);                               \
1493   } while (0)
1494 
1495 #if defined(CMU_LFCLKSEL_LFAE_ULFRCO)
1496 #define CMU_LFA_SELECT_ULFRCO                                                 \
1497   do {                                                                        \
1498     CMU->LFCLKSEL = (CMU->LFCLKSEL                                            \
1499                      & ~(_CMU_LFCLKSEL_LFA_MASK | _CMU_LFCLKSEL_LFAE_MASK))   \
1500                     | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT) \
1501                     | (1 << _CMU_LFCLKSEL_LFAE_SHIFT);                        \
1502   } while (0)
1503 #endif
1504 
1505 #else
1506 #define CMU_LFA_SELECT_DISABLED                                                \
1507   do {                                                                         \
1508     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK)                  \
1509                     | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT); \
1510   } while (0)
1511 
1512 #define CMU_LFA_SELECT_LFXO                                                \
1513   do {                                                                     \
1514     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                         \
1515     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK)              \
1516                     | (_CMU_LFCLKSEL_LFA_LFXO << _CMU_LFCLKSEL_LFA_SHIFT); \
1517   } while (0)
1518 
1519 #define CMU_LFA_SELECT_LFRCO                                                \
1520   do {                                                                      \
1521     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                         \
1522     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK)               \
1523                     | (_CMU_LFCLKSEL_LFA_LFRCO << _CMU_LFCLKSEL_LFA_SHIFT); \
1524   } while (0)
1525 
1526 #define CMU_LFA_SELECT_HFCLKLE                                                        \
1527   do {                                                                                \
1528     sli_em_cmu_SetHFLEConfigSystemCoreClock();                                        \
1529     BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1);               \
1530     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK)                         \
1531                     | (_CMU_LFCLKSEL_LFA_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFA_SHIFT); \
1532   } while (0)
1533 
1534 #if defined(CMU_LFCLKSEL_LFAE_ULFRCO)
1535 #define CMU_LFA_SELECT_ULFRCO                                                  \
1536   do {                                                                         \
1537     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFA_MASK)                  \
1538                     | (_CMU_LFCLKSEL_LFA_DISABLED << _CMU_LFCLKSEL_LFA_SHIFT); \
1539   } while (0)
1540 #endif /* CMU_LFA_SELECT_HFCLKLE */
1541 #endif /* _CMU_LFCLKSEL_LFAE_MASK */
1542 
1543 #if defined(_CMU_LFCLKSEL_LFBE_MASK)
1544 #define CMU_LFB_SELECT_DISABLED                                               \
1545   do {                                                                        \
1546     CMU->LFCLKSEL = (CMU->LFCLKSEL                                            \
1547                      & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK))   \
1548                     | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT) \
1549                     | (0 << _CMU_LFCLKSEL_LFBE_SHIFT);                        \
1550   } while (0)
1551 
1552 #define CMU_LFB_SELECT_LFXO                                                 \
1553   do {                                                                      \
1554     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                          \
1555     CMU->LFCLKSEL = (CMU->LFCLKSEL                                          \
1556                      & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \
1557                     | (_CMU_LFCLKSEL_LFB_LFXO << _CMU_LFCLKSEL_LFB_SHIFT)   \
1558                     | (0 << _CMU_LFCLKSEL_LFBE_SHIFT);                      \
1559   } while (0)
1560 
1561 #define CMU_LFB_SELECT_LFRCO                                                \
1562   do {                                                                      \
1563     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                         \
1564     CMU->LFCLKSEL = (CMU->LFCLKSEL                                          \
1565                      & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK)) \
1566                     | (_CMU_LFCLKSEL_LFB_LFRCO << _CMU_LFCLKSEL_LFB_SHIFT)  \
1567                     | (0 << _CMU_LFCLKSEL_LFBE_SHIFT);                      \
1568   } while (0)
1569 
1570 #define CMU_LFB_SELECT_HFCLKLE                                                       \
1571   do {                                                                               \
1572     sli_em_cmu_SetHFLEConfigSystemCoreClock();                                       \
1573     BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1);              \
1574     CMU->LFCLKSEL = (CMU->LFCLKSEL                                                   \
1575                      & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK))          \
1576                     | (_CMU_LFCLKSEL_LFB_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFB_SHIFT) \
1577                     | (0 << _CMU_LFCLKSEL_LFBE_SHIFT);                               \
1578   } while (0)
1579 
1580 #if defined(CMU_LFCLKSEL_LFBE_ULFRCO)
1581 #define CMU_LFB_SELECT_ULFRCO                                                 \
1582   do {                                                                        \
1583     CMU->LFCLKSEL = (CMU->LFCLKSEL                                            \
1584                      & ~(_CMU_LFCLKSEL_LFB_MASK | _CMU_LFCLKSEL_LFBE_MASK))   \
1585                     | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT) \
1586                     | (1 << _CMU_LFCLKSEL_LFBE_SHIFT);                        \
1587   } while (0)
1588 #endif
1589 
1590 #else
1591 #define CMU_LFB_SELECT_DISABLED                                                \
1592   do {                                                                         \
1593     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK)                  \
1594                     | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT); \
1595   } while (0)
1596 
1597 #define CMU_LFB_SELECT_LFXO                                                \
1598   do {                                                                     \
1599     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                         \
1600     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK)              \
1601                     | (_CMU_LFCLKSEL_LFB_LFXO << _CMU_LFCLKSEL_LFB_SHIFT); \
1602   } while (0)
1603 
1604 #define CMU_LFB_SELECT_LFRCO                                                \
1605   do {                                                                      \
1606     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                         \
1607     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK)               \
1608                     | (_CMU_LFCLKSEL_LFB_LFRCO << _CMU_LFCLKSEL_LFB_SHIFT); \
1609   } while (0)
1610 
1611 #define CMU_LFB_SELECT_HFCLKLE                                                        \
1612   do {                                                                                \
1613     sli_em_cmu_SetHFLEConfigSystemCoreClock();                                        \
1614     BUS_RegBitWrite(&CMU->HFCORECLKEN0, _CMU_HFCORECLKEN0_LE_SHIFT, 1);               \
1615     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK)                         \
1616                     | (_CMU_LFCLKSEL_LFB_HFCORECLKLEDIV2 << _CMU_LFCLKSEL_LFB_SHIFT); \
1617   } while (0)
1618 
1619 #if defined(CMU_LFCLKSEL_LFBE_ULFRCO)
1620 #define CMU_LFB_SELECT_ULFRCO                                                  \
1621   do {                                                                         \
1622     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFB_MASK)                  \
1623                     | (_CMU_LFCLKSEL_LFB_DISABLED << _CMU_LFCLKSEL_LFB_SHIFT); \
1624   } while (0)
1625 #endif /* CMU_LFCLKSEL_LFBE_ULFRCO */
1626 #endif /* _CMU_LFCLKSEL_LFBE_MASK */
1627 
1628 #define CMU_LFC_SELECT_DISABLED                                                \
1629   do {                                                                         \
1630     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK)                  \
1631                     | (_CMU_LFCLKSEL_LFC_DISABLED << _CMU_LFCLKSEL_LFC_SHIFT); \
1632   } while (0)
1633 
1634 #define CMU_LFC_SELECT_LFXO                                                \
1635   do {                                                                     \
1636     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                         \
1637     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK)              \
1638                     | (_CMU_LFCLKSEL_LFC_LFXO << _CMU_LFCLKSEL_LFC_SHIFT); \
1639   } while (0)
1640 
1641 #define CMU_LFC_SELECT_LFRCO                                                \
1642   do {                                                                      \
1643     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                         \
1644     CMU->LFCLKSEL = (CMU->LFCLKSEL & ~_CMU_LFCLKSEL_LFC_MASK)               \
1645                     | (_CMU_LFCLKSEL_LFC_LFRCO << _CMU_LFCLKSEL_LFC_SHIFT); \
1646   } while (0)
1647 #endif /* _SILICON_LABS_32B_SERIES_0 */
1648 
1649 #if defined(_CMU_DBGCLKSEL_DBG_MASK)
1650 #define CMU_DBG_SELECT_AUXHFRCO                  \
1651   do {                                           \
1652     CMU->DBGCLKSEL = CMU_DBGCLKSEL_DBG_AUXHFRCO; \
1653   } while (0)
1654 
1655 #define CMU_DBG_SELECT_HFCLK                  \
1656   do {                                        \
1657     CMU->DBGCLKSEL = CMU_DBGCLKSEL_DBG_HFCLK; \
1658   } while (0)
1659 #endif /* _CMU_DBGCLKSEL_DBG_MASK */
1660 
1661 #if defined(CMU_CTRL_DBGCLK)
1662 #define CMU_DBG_SELECT_AUXHFRCO                        \
1663   do {                                                 \
1664     CMU->CTRL = (CMU->CTRL & ~(_CMU_CTRL_DBGCLK_MASK)) \
1665                 | CMU_CTRL_DBGCLK_AUXHFRCO;            \
1666   } while (0)
1667 
1668 #define CMU_DBG_SELECT_HFCLK                           \
1669   do {                                                 \
1670     CMU->CTRL = (CMU->CTRL & ~(_CMU_CTRL_DBGCLK_MASK)) \
1671                 | CMU_CTRL_DBGCLK_HFCLK;               \
1672   } while (0)
1673 #endif /* CMU_CTRL_DBGCLK */
1674 
1675 #if defined(USB_PRESENT) && defined(_CMU_HFCORECLKEN0_USBC_MASK)
1676 #define CMU_USBC_SELECT_LFXO                               \
1677   do {                                                     \
1678     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);         \
1679     CMU->CMD = CMU_CMD_USBCCLKSEL_LFXO;                    \
1680     while ((CMU->STATUS & CMU_STATUS_USBCLFXOSEL) == 0) {} \
1681   } while (0)
1682 
1683 #define CMU_USBC_SELECT_LFRCO                               \
1684   do {                                                      \
1685     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);         \
1686     CMU->CMD = CMU_CMD_USBCCLKSEL_LFRCO;                    \
1687     while ((CMU->STATUS & CMU_STATUS_USBCLFRCOSEL) == 0) {} \
1688   } while (0)
1689 
1690 #if defined(CMU_STATUS_USBCHFCLKSEL)
1691 #define CMU_USBC_SELECT_HFCLK                               \
1692   do {                                                      \
1693     CMU->CMD = CMU_CMD_USBCCLKSEL_HFCLKNODIV;               \
1694     while ((CMU->STATUS & CMU_STATUS_USBCHFCLKSEL) == 0) {} \
1695   } while (0)
1696 #endif /* CMU_STATUS_USBCHFCLKSEL */
1697 
1698 #if defined(CMU_CMD_USBCCLKSEL_USHFRCO)
1699 #define CMU_USBC_SELECT_USHFRCO                               \
1700   do {                                                        \
1701     CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true);         \
1702     CMU->CMD = CMU_CMD_USBCCLKSEL_USHFRCO;                    \
1703     while ((CMU->STATUS & CMU_STATUS_USBCUSHFRCOSEL) == 0) {} \
1704   } while (0)
1705 #endif /* CMU_CMD_USBCCLKSEL_USHFRCO */
1706 #endif /* USB_PRESENT && _CMU_HFCORECLKEN0_USBC_MASK */
1707 
1708 #if defined(_CMU_ADCCTRL_ADC0CLKSEL_MASK)
1709 #define CMU_ADC0ASYNC_SELECT_DISABLED                                                     \
1710   do {                                                                                    \
1711     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK)                         \
1712                    | (_CMU_ADCCTRL_ADC0CLKSEL_DISABLED << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \
1713   } while (0)
1714 
1715 #define CMU_ADC0ASYNC_SELECT_AUXHFRCO                                                     \
1716   do {                                                                                    \
1717     CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true);                                    \
1718     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK)                         \
1719                    | (_CMU_ADCCTRL_ADC0CLKSEL_AUXHFRCO << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \
1720   } while (0)
1721 
1722 #define CMU_ADC0ASYNC_SELECT_HFXO                                                     \
1723   do {                                                                                \
1724     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                    \
1725     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK)                     \
1726                    | (_CMU_ADCCTRL_ADC0CLKSEL_HFXO << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \
1727   } while (0)
1728 
1729 #define CMU_ADC0ASYNC_SELECT_HFSRCCLK                                                     \
1730   do {                                                                                    \
1731     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC0CLKSEL_MASK)                         \
1732                    | (_CMU_ADCCTRL_ADC0CLKSEL_HFSRCCLK << _CMU_ADCCTRL_ADC0CLKSEL_SHIFT); \
1733   } while (0)
1734 #endif /* _CMU_ADCCTRL_ADC0CLKSEL_MASK */
1735 
1736 #if defined(_CMU_ADCCTRL_ADC1CLKSEL_MASK)
1737 #define CMU_ADC1ASYNC_SELECT_DISABLED                                                     \
1738   do {                                                                                    \
1739     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK)                         \
1740                    | (_CMU_ADCCTRL_ADC1CLKSEL_DISABLED << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \
1741   } while (0)
1742 
1743 #define CMU_ADC1ASYNC_SELECT_AUXHFRCO                                                     \
1744   do {                                                                                    \
1745     CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true);                                    \
1746     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK)                         \
1747                    | (_CMU_ADCCTRL_ADC1CLKSEL_AUXHFRCO << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \
1748   } while (0)
1749 
1750 #define CMU_ADC1ASYNC_SELECT_HFXO                                                     \
1751   do {                                                                                \
1752     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                    \
1753     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK)                     \
1754                    | (_CMU_ADCCTRL_ADC1CLKSEL_HFXO << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \
1755   } while (0)
1756 
1757 #define CMU_ADC1ASYNC_SELECT_HFSRCCLK                                                     \
1758   do {                                                                                    \
1759     CMU->ADCCTRL = (CMU->ADCCTRL & ~_CMU_ADCCTRL_ADC1CLKSEL_MASK)                         \
1760                    | (_CMU_ADCCTRL_ADC1CLKSEL_HFSRCCLK << _CMU_ADCCTRL_ADC1CLKSEL_SHIFT); \
1761   } while (0)
1762 #endif /* _CMU_ADCCTRL_ADC1CLKSEL_MASK */
1763 
1764 #if defined(_CMU_SDIOCTRL_SDIOCLKSEL_MASK)
1765 #define CMU_SDIOREF_SELECT_HFRCO                                                          \
1766   do {                                                                                    \
1767     CMU_OscillatorEnable(cmuOsc_HFRCO, true, true);                                       \
1768     CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK)                      \
1769                     | (_CMU_SDIOCTRL_SDIOCLKSEL_HFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \
1770   } while (0)
1771 
1772 #define CMU_SDIOREF_SELECT_HFXO                                                          \
1773   do {                                                                                   \
1774     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                       \
1775     CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK)                     \
1776                     | (_CMU_SDIOCTRL_SDIOCLKSEL_HFXO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \
1777   } while (0)
1778 
1779 #define CMU_SDIOREF_SELECT_AUXHFRCO                                                          \
1780   do {                                                                                       \
1781     CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true);                                       \
1782     CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK)                         \
1783                     | (_CMU_SDIOCTRL_SDIOCLKSEL_AUXHFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \
1784   } while (0)
1785 
1786 #define CMU_SDIOREF_SELECT_USHFRCO                                                          \
1787   do {                                                                                      \
1788     CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true);                                       \
1789     CMU->SDIOCTRL = (CMU->SDIOCTRL & ~_CMU_SDIOCTRL_SDIOCLKSEL_MASK)                        \
1790                     | (_CMU_SDIOCTRL_SDIOCLKSEL_USHFRCO << _CMU_SDIOCTRL_SDIOCLKSEL_SHIFT); \
1791   } while (0)
1792 #endif /* _CMU_SDIOCTRL_SDIOCLKSEL_MASK */
1793 
1794 #if defined(_CMU_QSPICTRL_QSPI0CLKSEL_MASK)
1795 #define CMU_QSPI0REF_SELECT_HFRCO                                                           \
1796   do {                                                                                      \
1797     CMU_OscillatorEnable(cmuOsc_HFRCO, true, true);                                         \
1798     CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK)                       \
1799                     | (_CMU_QSPICTRL_QSPI0CLKSEL_HFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \
1800   } while (0)
1801 
1802 #define CMU_QSPI0REF_SELECT_HFXO                                                           \
1803   do {                                                                                     \
1804     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                         \
1805     CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK)                      \
1806                     | (_CMU_QSPICTRL_QSPI0CLKSEL_HFXO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \
1807   } while (0)
1808 
1809 #define CMU_QSPI0REF_SELECT_AUXHFRCO                                                           \
1810   do {                                                                                         \
1811     CMU_OscillatorEnable(cmuOsc_AUXHFRCO, true, true);                                         \
1812     CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK)                          \
1813                     | (_CMU_QSPICTRL_QSPI0CLKSEL_AUXHFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \
1814   } while (0)
1815 
1816 #define CMU_QSPI0REF_SELECT_USHFRCO                                                           \
1817   do {                                                                                        \
1818     CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true);                                         \
1819     CMU->QSPICTRL = (CMU->QSPICTRL & ~_CMU_QSPICTRL_QSPI0CLKSEL_MASK)                         \
1820                     | (_CMU_QSPICTRL_QSPI0CLKSEL_USHFRCO << _CMU_QSPICTRL_QSPI0CLKSEL_SHIFT); \
1821   } while (0)
1822 #endif /* _CMU_QSPICTRL_QSPI0CLKSEL_MASK */
1823 
1824 #if defined(_CMU_USBCTRL_USBCLKSEL_MASK)
1825 #define CMU_USBR_SELECT_USHFRCO                                                        \
1826   do {                                                                                 \
1827     CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true);                                  \
1828     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                       \
1829                    | (_CMU_USBCTRL_USBCLKSEL_USHFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1830   } while (0)
1831 
1832 #define CMU_USBR_SELECT_HFXO                                                        \
1833   do {                                                                              \
1834     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                  \
1835     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                    \
1836                    | (_CMU_USBCTRL_USBCLKSEL_HFXO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1837   } while (0)
1838 
1839 #define CMU_USBR_SELECT_HFXOX2                                                        \
1840   do {                                                                                \
1841     EFM_ASSERT(SystemHFXOClockGet() <= 25000000u);                                    \
1842     CMU->HFXOCTRL |= CMU_HFXOCTRL_HFXOX2EN;                                           \
1843     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                    \
1844     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                      \
1845                    | (_CMU_USBCTRL_USBCLKSEL_HFXOX2 << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1846   } while (0)
1847 
1848 #define CMU_USBR_SELECT_HFRCO                                                        \
1849   do {                                                                               \
1850     CMU_OscillatorEnable(cmuOsc_HFRCO, true, true);                                  \
1851     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                     \
1852                    | (_CMU_USBCTRL_USBCLKSEL_HFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1853   } while (0)
1854 
1855 #define CMU_USBR_SELECT_LFXO                                                        \
1856   do {                                                                              \
1857     CMU_OscillatorEnable(cmuOsc_LFXO, true, true);                                  \
1858     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                    \
1859                    | (_CMU_USBCTRL_USBCLKSEL_LFXO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1860   } while (0)
1861 
1862 #define CMU_USBR_SELECT_LFRCO                                                        \
1863   do {                                                                               \
1864     CMU_OscillatorEnable(cmuOsc_LFRCO, true, true);                                  \
1865     CMU->USBCTRL = (CMU->USBCTRL & ~_CMU_USBCTRL_USBCLKSEL_MASK)                     \
1866                    | (_CMU_USBCTRL_USBCLKSEL_LFRCO << _CMU_USBCTRL_USBCLKSEL_SHIFT); \
1867   } while (0)
1868 #endif /* _CMU_USBCTRL_USBCLKSEL_MASK */
1869 
1870 #if defined(_CMU_PDMCTRL_PDMCLKSEL_MASK)
1871 #define CMU_PDMREF_SELECT_USHFRCO                                                      \
1872   do {                                                                                 \
1873     CMU_OscillatorEnable(cmuOsc_USHFRCO, true, true);                                  \
1874     CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK)                       \
1875                    | (_CMU_PDMCTRL_PDMCLKSEL_USHFRCO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \
1876   } while (0)
1877 
1878 #define CMU_PDMREF_SELECT_HFXO                                                      \
1879   do {                                                                              \
1880     CMU_OscillatorEnable(cmuOsc_HFXO, true, true);                                  \
1881     CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK)                    \
1882                    | (_CMU_PDMCTRL_PDMCLKSEL_HFXO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \
1883   } while (0)
1884 
1885 #define CMU_PDMREF_SELECT_HFRCO                                                      \
1886   do {                                                                               \
1887     CMU_OscillatorEnable(cmuOsc_HFRCO, true, true);                                  \
1888     CMU->PDMCTRL = (CMU->PDMCTRL & ~_CMU_PDMCTRL_PDMCLKSEL_MASK)                     \
1889                    | (_CMU_PDMCTRL_PDMCLKSEL_HFRCO << _CMU_PDMCTRL_PDMCLKSEL_SHIFT); \
1890   } while (0)
1891 #endif /* _CMU_PDMCTRL_PDMCLKSEL_MASK */
1892 #endif /* _SILICON_LABS_32B_SERIES_2 */
1893 /** @endcond */
1894 
1895 #ifdef __cplusplus
1896 }
1897 #endif
1898 
1899 #endif /* SLI_EM_CMU_H */
1900