18#include "pw_clock_tree/clock_tree.h"
26 :
public ClockSource<ElementNonBlockingCannotFail> {
30 : fro_output_(fro_output) {}
35 CLOCK_EnableFroClk(CLKCTL0->FRODIVOEN | fro_output_);
41 CLOCK_EnableFroClk(CLKCTL0->FRODIVOEN & ~fro_output_);
46 const uint32_t fro_output_;
51 :
public ClockSource<ElementNonBlockingCannotFail> {
56 POWER_DisablePD(kPDRUNCFG_PD_LPOSC);
60 CLOCK_EnableLpOscClk();
67 POWER_EnablePD(kPDRUNCFG_PD_LPOSC);
77template <
typename ElementType>
89 CLOCK_SetMclkFreq(frequency_);
119template <
typename ElementType>
131 CLOCK_SetClkinFreq(frequency_);
134 const uint8_t kCLOCK_OscClkIn = CLKCTL0_SYSOSCBYPASS_SEL(1);
135 CLKCTL0->SYSOSCBYPASS = kCLOCK_OscClkIn;
142 CLOCK_SetClkinFreq(0);
145 const uint8_t kCLOCK_OscNone = CLKCTL0_SYSOSCBYPASS_SEL(7);
146 CLKCTL0->SYSOSCBYPASS = kCLOCK_OscNone;
168template <
typename ElementType>
173 const clock_frg_clk_config_t& config)
179 const uint8_t kCLOCK_FrgNone = 7;
183 CLOCK_SetFRGClock(&config_);
189 clock_frg_clk_config_t disable_config = config_;
190 disable_config.sfg_clock_src =
191 static_cast<decltype(disable_config.sfg_clock_src)
>(kCLOCK_FrgNone);
192 CLOCK_SetFRGClock(&disable_config);
197 const clock_frg_clk_config_t config_;
211template <
typename ElementType>
218 clock_attach_id_t selector_enable,
219 clock_attach_id_t selector_disable)
221 selector_enable_(selector_enable),
222 selector_disable_(selector_disable) {}
227 CLOCK_AttachClk(selector_enable_);
233 CLOCK_AttachClk(selector_disable_);
238 clock_attach_id_t selector_enable_;
240 clock_attach_id_t selector_disable_;
256template <
typename ElementType>
262 clock_div_name_t divider_name,
265 divider_name_(divider_name) {}
270 CLOCK_SetClkDiv(divider_name_, this->
divider());
275 clock_div_name_t divider_name_;
297template <
typename ElementType>
302 const clock_audio_pll_config_t& config,
303 uint8_t audio_pfd_divider)
306 audio_pfd_divider_(audio_pfd_divider) {}
310 audio_pll_src_t bypass_source)
320 if (config_ !=
nullptr) {
322 CLOCK_InitAudioPll(config_);
323 CLOCK_InitAudioPfd(kCLOCK_Pfd0, audio_pfd_divider_);
326 CLKCTL1->AUDIOPLL0CLKSEL = bypass_source_;
327 CLKCTL1->AUDIOPLL0CTL0 |= CLKCTL1_AUDIOPLL0CTL0_BYPASS_MASK;
334 if (config_ !=
nullptr) {
336 CLOCK_DeinitAudioPfd(kCLOCK_Pfd0);
340 CLOCK_DeinitAudioPll();
345 const clock_audio_pll_config_t* config_ =
nullptr;
348 const uint8_t audio_pfd_divider_ = 0;
351 const audio_pll_src_t bypass_source_ = kCLOCK_AudioPllNone;
365template <
typename ElementType>
370 const clock_sys_pll_config_t& config,
371 uint8_t sys_pfd0_divider,
372 uint8_t sys_pfd1_divider,
373 uint8_t sys_pfd2_divider,
374 uint8_t sys_pfd3_divider)
377 sys_pfd0_divider_(sys_pfd0_divider),
378 sys_pfd1_divider_(sys_pfd1_divider),
379 sys_pfd2_divider_(sys_pfd2_divider),
380 sys_pfd3_divider_(sys_pfd3_divider) {}
384 sys_pll_src_t bypass_source)
394 if (config_ !=
nullptr) {
396 CLOCK_InitSysPll(config_);
398 if (sys_pfd0_divider_ != 0) {
399 CLOCK_InitSysPfd(kCLOCK_Pfd0, sys_pfd0_divider_);
401 if (sys_pfd1_divider_ != 0) {
402 CLOCK_InitSysPfd(kCLOCK_Pfd1, sys_pfd1_divider_);
404 if (sys_pfd2_divider_ != 0) {
405 CLOCK_InitSysPfd(kCLOCK_Pfd2, sys_pfd2_divider_);
407 if (sys_pfd3_divider_ != 0) {
408 CLOCK_InitSysPfd(kCLOCK_Pfd3, sys_pfd3_divider_);
412 CLKCTL0->SYSPLL0CLKSEL = bypass_source_;
413 CLKCTL0->SYSPLL0CTL0 |= CLKCTL0_SYSPLL0CTL0_BYPASS_MASK;
420 if (config_ !=
nullptr) {
422 CLOCK_DeinitSysPfd(kCLOCK_Pfd0);
423 CLOCK_DeinitSysPfd(kCLOCK_Pfd1);
424 CLOCK_DeinitSysPfd(kCLOCK_Pfd2);
425 CLOCK_DeinitSysPfd(kCLOCK_Pfd3);
429 CLOCK_DeinitSysPll();
434 const clock_sys_pll_config_t* config_ =
nullptr;
437 const uint8_t sys_pfd0_divider_ = 0;
438 const uint8_t sys_pfd1_divider_ = 0;
439 const uint8_t sys_pfd2_divider_ = 0;
440 const uint8_t sys_pfd3_divider_ = 0;
443 const sys_pll_src_t bypass_source_ = kCLOCK_SysPllNone;
467template <
typename ElementType>
479 CLOCK_EnableOsc32K(
true);
486 CLOCK_EnableOsc32K(
false);
507template <
typename ElementType>
518 CLOCK_EnableClock(clock_);
524 CLOCK_DisableClock(clock_);
528 clock_ip_name_t clock_;
Definition: clock_tree.h:414
Definition: clock_tree.h:298
Definition: clock_tree.h:120
Definition: clock_tree.h:508
Definition: clock_tree.h:257
Definition: clock_tree.h:169
Class implementing an FRO clock source.
Definition: clock_tree.h:26
Class implementing the low power oscillator clock source.
Definition: clock_tree.h:51
Definition: clock_tree.h:78
Definition: clock_tree.h:468
Definition: clock_tree.h:212
Definition: clock_tree.h:366
Definition: clock_tree.h:238
Definition: clock_tree.h:299
constexpr ClockMcuxpressoAudioPll(ElementType &source, const clock_audio_pll_config_t &config, uint8_t audio_pfd_divider)
Constructor specifying the configuration for the enabled Audio PLL.
Definition: clock_tree.h:301
Status DoDisable() final
Disable low power oscillator.
Definition: clock_tree.h:65
Status DoDisable() final
Disable 32 kHz RTS oscillator.
Definition: clock_tree.h:484
constexpr ClockMcuxpressoDivider(ElementType &source, clock_div_name_t divider_name, uint32_t divider)
Definition: clock_tree.h:261
Status DoEnable() final
Enable low power oscillator.
Definition: clock_tree.h:54
Status DoEnable() final
Enable selector.
Definition: clock_tree.h:226
Status DoEnable() final
Enable the clock.
Definition: clock_tree.h:517
Status DoDisable() final
Disable the clock.
Definition: clock_tree.h:523
Status DoEnable() final
Set the divider configuration.
Definition: clock_tree.h:269
constexpr ClockMcuxpressoSelector(ElementType &source, clock_attach_id_t selector_enable, clock_attach_id_t selector_disable)
Definition: clock_tree.h:217
Status DoEnable() final
Set MCLK IN clock frequency.
Definition: clock_tree.h:87
constexpr ClockMcuxpressoClockIp(ElementType &source, clock_ip_name_t clock)
Definition: clock_tree.h:512
Status DoDisable() override
Disables the Sys PLL logic.
Definition: clock_tree.h:419
constexpr ClockMcuxpressoMclk(ElementType &source, uint32_t frequency)
Definition: clock_tree.h:82
Status DoEnable() override
Definition: clock_tree.h:316
constexpr ClockMcuxpressoFrg(ElementType &source, const clock_frg_clk_config_t &config)
Constructor specifying the source clock and FRG configuration.
Definition: clock_tree.h:172
constexpr ClockMcuxpressoSysPll(ElementType &source, sys_pll_src_t bypass_source)
Constructor to place the Sys PLL into bypass mode.
Definition: clock_tree.h:383
Status DoDisable() final
Disable selector.
Definition: clock_tree.h:232
constexpr ClockMcuxpressoFro(clock_fro_output_en_t fro_output)
Constructor specifying the FRO divider output to manage.
Definition: clock_tree.h:29
constexpr ClockMcuxpressoAudioPll(ElementType &source, audio_pll_src_t bypass_source)
Constructor to place the Audio PLL into bypass mode.
Definition: clock_tree.h:309
Status DoEnable() override
Definition: clock_tree.h:390
Status DoEnable() final
Enable 32 kHz RTC oscillator.
Definition: clock_tree.h:477
Status DoEnable() final
Set CLK IN clock frequency.
Definition: clock_tree.h:129
constexpr ClockMcuxpressoClkIn(ElementType &source, uint32_t frequency)
Definition: clock_tree.h:124
Status DoDisable() final
Disable this FRO divider.
Definition: clock_tree.h:40
Status DoDisable() final
Disable FRG configuration.
Definition: clock_tree.h:188
Status DoDisable() override
Disables the audio PLL logic.
Definition: clock_tree.h:333
Status DoEnable() final
Enable FRG configuration.
Definition: clock_tree.h:182
constexpr ClockMcuxpressoRtc(ElementType &source)
Definition: clock_tree.h:472
Status DoDisable() final
Set MCLK IN clock frequency to 0 Hz.
Definition: clock_tree.h:94
Status DoDisable() final
Set CLK IN clock frequency to 0 Hz.
Definition: clock_tree.h:140
constexpr ClockMcuxpressoSysPll(ElementType &source, const clock_sys_pll_config_t &config, uint8_t sys_pfd0_divider, uint8_t sys_pfd1_divider, uint8_t sys_pfd2_divider, uint8_t sys_pfd3_divider)
Constructor specifying the configuration for the enabled Sys PLL.
Definition: clock_tree.h:369
Status DoEnable() final
Enable this FRO divider.
Definition: clock_tree.h:34
uint32_t divider() const
Get current divider value.
Definition: clock_tree.h:446
Clock tree management library.
Definition: clock_tree.h:30
constexpr Status OkStatus()
Definition: status.h:235