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