Skip to content

Commit 472b995

Browse files
committed
Update MWDT clock management
1 parent 72cd77b commit 472b995

File tree

15 files changed

+836
-156
lines changed

15 files changed

+836
-156
lines changed

esp-hal/src/soc/esp32c2/clocks.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,3 +643,20 @@ fn configure_timg0_calibration_clock_impl(
643643
})
644644
});
645645
}
646+
647+
// TIMG0_WDT_CLOCK
648+
649+
fn enable_timg0_wdt_clock_impl(_clocks: &mut ClockTree, _en: bool) {
650+
// No separate clock control enable bit.
651+
}
652+
653+
fn configure_timg0_wdt_clock_impl(
654+
_clocks: &mut ClockTree,
655+
_old_selector: Option<Timg0WdtClockConfig>,
656+
new_selector: Timg0WdtClockConfig,
657+
) {
658+
TIMG0::regs().wdtconfig0().modify(|_, w| {
659+
w.wdt_use_xtal()
660+
.bit(new_selector == Timg0WdtClockConfig::XtalClk)
661+
});
662+
}

esp-hal/src/soc/esp32c3/clocks.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,23 @@ fn configure_timg0_calibration_clock_impl(
571571
});
572572
}
573573

574+
// TIMG0_WDT_CLOCK
575+
576+
fn enable_timg0_wdt_clock_impl(_clocks: &mut ClockTree, _en: bool) {
577+
// No separate clock control enable bit.
578+
}
579+
580+
fn configure_timg0_wdt_clock_impl(
581+
_clocks: &mut ClockTree,
582+
_old_selector: Option<Timg0WdtClockConfig>,
583+
new_selector: Timg0WdtClockConfig,
584+
) {
585+
TIMG0::regs().wdtconfig0().modify(|_, w| {
586+
w.wdt_use_xtal()
587+
.bit(new_selector == Timg0WdtClockConfig::XtalClk)
588+
});
589+
}
590+
574591
// TIMG1_FUNCTION_CLOCK
575592

576593
fn enable_timg1_function_clock_impl(_clocks: &mut ClockTree, en: bool) {
@@ -611,3 +628,20 @@ fn configure_timg1_calibration_clock_impl(
611628
})
612629
});
613630
}
631+
632+
// TIMG1_WDT_CLOCK
633+
634+
fn enable_timg1_wdt_clock_impl(_clocks: &mut ClockTree, _en: bool) {
635+
// No separate clock control enable bit.
636+
}
637+
638+
fn configure_timg1_wdt_clock_impl(
639+
_clocks: &mut ClockTree,
640+
_old_selector: Option<Timg0WdtClockConfig>,
641+
new_selector: Timg0WdtClockConfig,
642+
) {
643+
TIMG1::regs().wdtconfig0().modify(|_, w| {
644+
w.wdt_use_xtal()
645+
.bit(new_selector == Timg0WdtClockConfig::XtalClk)
646+
});
647+
}

esp-hal/src/soc/esp32c6/clocks.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,30 @@ fn configure_timg0_calibration_clock_impl(
587587
});
588588
}
589589

590+
// TIMG0_WDT_CLOCK
591+
592+
fn enable_timg0_wdt_clock_impl(_clocks: &mut ClockTree, en: bool) {
593+
PCR::regs()
594+
.timergroup0_wdt_clk_conf()
595+
.modify(|_, w| w.tg0_wdt_clk_en().bit(en));
596+
}
597+
598+
fn configure_timg0_wdt_clock_impl(
599+
_clocks: &mut ClockTree,
600+
_old_selector: Option<Timg0WdtClockConfig>,
601+
new_selector: Timg0WdtClockConfig,
602+
) {
603+
PCR::regs()
604+
.timergroup0_wdt_clk_conf()
605+
.modify(|_, w| unsafe {
606+
w.tg0_wdt_clk_sel().bits(match new_selector {
607+
Timg0WdtClockConfig::XtalClk => 0,
608+
Timg0WdtClockConfig::PllF80m => 1,
609+
Timg0WdtClockConfig::RcFastClk => 2,
610+
})
611+
});
612+
}
613+
590614
// TIMG1_FUNCTION_CLOCK
591615

592616
fn enable_timg1_function_clock_impl(_clocks: &mut ClockTree, en: bool) {
@@ -632,3 +656,27 @@ fn configure_timg1_calibration_clock_impl(
632656
})
633657
});
634658
}
659+
660+
// TIMG1_WDT_CLOCK
661+
662+
fn enable_timg1_wdt_clock_impl(_clocks: &mut ClockTree, en: bool) {
663+
PCR::regs()
664+
.timergroup1_wdt_clk_conf()
665+
.modify(|_, w| w.tg1_wdt_clk_en().bit(en));
666+
}
667+
668+
fn configure_timg1_wdt_clock_impl(
669+
_clocks: &mut ClockTree,
670+
_old_selector: Option<Timg0WdtClockConfig>,
671+
new_selector: Timg0WdtClockConfig,
672+
) {
673+
PCR::regs()
674+
.timergroup1_wdt_clk_conf()
675+
.modify(|_, w| unsafe {
676+
w.tg1_wdt_clk_sel().bits(match new_selector {
677+
Timg0WdtClockConfig::XtalClk => 0,
678+
Timg0WdtClockConfig::PllF80m => 1,
679+
Timg0WdtClockConfig::RcFastClk => 2,
680+
})
681+
});
682+
}

esp-hal/src/soc/esp32h2/clocks.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,30 @@ fn configure_timg0_calibration_clock_impl(
430430
});
431431
}
432432

433+
// TIMG0_WDT_CLOCK
434+
435+
fn enable_timg0_wdt_clock_impl(_clocks: &mut ClockTree, en: bool) {
436+
PCR::regs()
437+
.timergroup0_wdt_clk_conf()
438+
.modify(|_, w| w.tg0_wdt_clk_en().bit(en));
439+
}
440+
441+
fn configure_timg0_wdt_clock_impl(
442+
_clocks: &mut ClockTree,
443+
_old_selector: Option<Timg0WdtClockConfig>,
444+
new_selector: Timg0WdtClockConfig,
445+
) {
446+
PCR::regs()
447+
.timergroup0_wdt_clk_conf()
448+
.modify(|_, w| unsafe {
449+
w.tg0_wdt_clk_sel().bits(match new_selector {
450+
Timg0WdtClockConfig::XtalClk => 0,
451+
Timg0WdtClockConfig::RcFastClk => 1,
452+
Timg0WdtClockConfig::PllF48m => 2,
453+
})
454+
});
455+
}
456+
433457
// TIMG1_FUNCTION_CLOCK
434458

435459
fn enable_timg1_function_clock_impl(_clocks: &mut ClockTree, en: bool) {
@@ -475,3 +499,27 @@ fn configure_timg1_calibration_clock_impl(
475499
})
476500
});
477501
}
502+
503+
// TIMG1_WDT_CLOCK
504+
505+
fn enable_timg1_wdt_clock_impl(_clocks: &mut ClockTree, en: bool) {
506+
PCR::regs()
507+
.timergroup1_wdt_clk_conf()
508+
.modify(|_, w| w.tg1_wdt_clk_en().bit(en));
509+
}
510+
511+
fn configure_timg1_wdt_clock_impl(
512+
_clocks: &mut ClockTree,
513+
_old_selector: Option<Timg0WdtClockConfig>,
514+
new_selector: Timg0WdtClockConfig,
515+
) {
516+
PCR::regs()
517+
.timergroup1_wdt_clk_conf()
518+
.modify(|_, w| unsafe {
519+
w.tg1_wdt_clk_sel().bits(match new_selector {
520+
Timg0WdtClockConfig::XtalClk => 0,
521+
Timg0WdtClockConfig::RcFastClk => 1,
522+
Timg0WdtClockConfig::PllF48m => 2,
523+
})
524+
});
525+
}

0 commit comments

Comments
 (0)