67 lines
2.0 KiB
Rust
67 lines
2.0 KiB
Rust
use crate::{enable_interrupt, pac};
|
|
|
|
#[inline(always)]
|
|
pub fn enable_rom_scrub(syscfg: &mut pac::Sysconfig, counter_reset: u16) {
|
|
syscfg
|
|
.rom_scrub()
|
|
.write(|w| unsafe { w.bits(counter_reset as u32) })
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn enable_ram0_scrub(syscfg: &mut pac::Sysconfig, counter_reset: u16) {
|
|
syscfg
|
|
.ram0_scrub()
|
|
.write(|w| unsafe { w.bits(counter_reset as u32) })
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn enable_ram1_scrub(syscfg: &mut pac::Sysconfig, counter_reset: u16) {
|
|
syscfg
|
|
.ram1_scrub()
|
|
.write(|w| unsafe { w.bits(counter_reset as u32) })
|
|
}
|
|
|
|
/// This function enables the SBE related interrupts. The user should also provide a
|
|
/// [pac::EDAC_SBE] ISR and use [clear_sbe_irq] inside that ISR at the very least.
|
|
#[inline(always)]
|
|
pub fn enable_sbe_irq() {
|
|
unsafe {
|
|
enable_interrupt(pac::Interrupt::EDAC_SBE);
|
|
}
|
|
}
|
|
|
|
/// This function enables the SBE related interrupts. The user should also provide a
|
|
/// [pac::EDAC_MBE] ISR and use [clear_mbe_irq] inside that ISR at the very least.
|
|
#[inline(always)]
|
|
pub fn enable_mbe_irq() {
|
|
unsafe {
|
|
enable_interrupt(pac::Interrupt::EDAC_MBE);
|
|
}
|
|
}
|
|
|
|
/// This function should be called in the user provided [pac::EDAC_SBE] interrupt-service routine
|
|
/// to clear the SBE related interrupts.
|
|
#[inline(always)]
|
|
pub fn clear_sbe_irq() {
|
|
// Safety: This function only clears SBE related IRQs
|
|
let syscfg = unsafe { pac::Sysconfig::steal() };
|
|
syscfg.irq_clr().write(|w| {
|
|
w.romsbe().set_bit();
|
|
w.ram0sbe().set_bit();
|
|
w.ram1sbe().set_bit()
|
|
});
|
|
}
|
|
|
|
/// This function should be called in the user provided [pac::EDAC_MBE] interrupt-service routine
|
|
/// to clear the MBE related interrupts.
|
|
#[inline(always)]
|
|
pub fn clear_mbe_irq() {
|
|
// Safety: This function only clears SBE related IRQs
|
|
let syscfg = unsafe { pac::Sysconfig::steal() };
|
|
syscfg.irq_clr().write(|w| {
|
|
w.rommbe().set_bit();
|
|
w.ram0mbe().set_bit();
|
|
w.ram1mbe().set_bit()
|
|
});
|
|
}
|