va108xx_hal/
sysconfig.rs

1#[derive(PartialEq, Eq, Debug)]
2#[cfg_attr(feature = "defmt", derive(defmt::Format))]
3pub struct InvalidCounterResetVal(pub(crate) ());
4
5/// Enable scrubbing for the ROM
6///
7/// Returns [InvalidCounterResetVal] if the scrub rate is 0
8/// (equivalent to disabling) or larger than 24 bits
9pub fn enable_rom_scrubbing(scrub_rate: u32) -> Result<(), InvalidCounterResetVal> {
10    let syscfg = unsafe { va108xx::Sysconfig::steal() };
11    if scrub_rate == 0 || scrub_rate > u32::pow(2, 24) {
12        return Err(InvalidCounterResetVal(()));
13    }
14    syscfg.rom_scrub().write(|w| unsafe { w.bits(scrub_rate) });
15    Ok(())
16}
17
18pub fn disable_rom_scrubbing() {
19    let syscfg = unsafe { va108xx::Sysconfig::steal() };
20    syscfg.rom_scrub().write(|w| unsafe { w.bits(0) });
21}
22
23/// Enable scrubbing for the RAM
24///
25/// Returns [InvalidCounterResetVal] if the scrub rate is 0
26/// (equivalent to disabling) or larger than 24 bits
27pub fn enable_ram_scrubbing(scrub_rate: u32) -> Result<(), InvalidCounterResetVal> {
28    let syscfg = unsafe { va108xx::Sysconfig::steal() };
29    if scrub_rate == 0 || scrub_rate > u32::pow(2, 24) {
30        return Err(InvalidCounterResetVal(()));
31    }
32    syscfg.ram_scrub().write(|w| unsafe { w.bits(scrub_rate) });
33    Ok(())
34}
35
36pub fn disable_ram_scrubbing() {
37    let syscfg = unsafe { va108xx::Sysconfig::steal() };
38    syscfg.ram_scrub().write(|w| unsafe { w.bits(0) });
39}
40
41pub use vorago_shared_hal::sysconfig::{
42    assert_peripheral_reset, disable_peripheral_clock, enable_peripheral_clock,
43};