Skip to content
Snippets Groups Projects
Select Git revision
  • dd06f5c20f282c13d7c1e94827479c423a1fa1c8
  • master default protected
2 results

mips_program.objdump

Blame
  • exception_itm_raw.rs 1.15 KiB
    //! Overriding an exception handler
    //!
    //! You can override an exception handler using the [`#[exception]`][1] attribute.
    //!
    //! [1]: https://rust-embedded.github.io/cortex-m-rt/0.6.1/cortex_m_rt_macros/fn.exception.html
    //!
    
    #![no_main]
    #![no_std]
    
    use panic_halt as _;
    
    use cortex_m::peripheral::{syst::SystClkSource, ITM};
    use cortex_m::{iprint, iprintln, Peripherals};
    use cortex_m_rt::{entry, exception};
    
    #[entry]
    fn main() -> ! {
        let mut p = Peripherals::take().unwrap();
        let mut syst = p.SYST;
        let stim = &mut p.ITM.stim[0];
        iprintln!(stim, "exception_itm_raw");
    
        // configures the system timer to trigger a SysTick exception every second
        syst.set_clock_source(SystClkSource::Core);
        syst.set_reload(16_000_000); // period = 1s
        syst.enable_counter();
        syst.enable_interrupt();
    
        loop {
            continue;
        }
    }
    
    #[exception]
    fn SysTick() {
        // here we access `ITM` using a *raw* pointer
        // this is unsafe, as there may be other tasks accessing the peripheral
        // simultaneously (and that might cause a conflict/race)
        let itm = unsafe { &mut *ITM::ptr() };
        let stim = &mut itm.stim[0];
        iprint!(stim, ".");
    }