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
|
||
|
/// `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
|
||
|
/// `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 `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 `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()
|
||
|
});
|
||
|
}
|