Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

device.rs

Blame
  • Forked from Per Lindgren / e7020e_2020
    54 commits behind the upstream repository.
    device.rs 1.10 KiB
    //! Using a device crate
    //!
    
    #![no_main]
    #![no_std]
    
    #[allow(unused_extern_crates)]
    extern crate panic_halt;
    
    use cortex_m::{iprint, peripheral::syst::SystClkSource};
    use cortex_m_rt::entry;
    use cortex_m_semihosting::hprintln;
    
    // `svd2rust` generated Peripheral Access Crate (PAC).
    use stm32f4::stm32f401::{interrupt, Interrupt, ITM, NVIC};
    
    #[entry]
    fn main() -> ! {
        let p = cortex_m::Peripherals::take().unwrap();
    
        let mut syst = p.SYST;
        let mut nvic = p.NVIC;
    
        nvic.enable(Interrupt::EXTI0);
    
        // configure the system timer to wrap around every second
        syst.set_clock_source(SystClkSource::Core);
        syst.set_reload(16_000_000); // 1s
        syst.enable_counter();
    
        loop {
            // busy wait until the timer wraps around
            while !syst.has_wrapped() {}
    
            // trigger the `EXTI0` interrupt
    
            NVIC::pend(Interrupt::EXTI0);
        }
    }
    
    // try commenting out this line: you'll end in `default_handler` instead of in `exti0`
    #[interrupt]
    fn EXTI0() {
        hprintln!(".").unwrap();
        let itm = unsafe { &mut *ITM::ptr() };
        let stim = &mut itm.stim[0];
        iprint!(stim, ".");
    }