stm32l1xx-hal 0.1.0

Peripheral access API for STM32L1 series microcontrollers
Documentation
#![deny(warnings)]
#![no_main]
#![no_std]

extern crate cortex_m;
extern crate cortex_m_rt as rt;
extern crate cortex_m_semihosting as sh;
extern crate panic_semihosting;
extern crate stm32l1xx_hal as hal;

use core::cell::RefCell;
use core::ops::DerefMut;

use cortex_m::interrupt::Mutex;
use hal::exti::TriggerEdge;
use hal::prelude::*;
use hal::stm32::{self, interrupt, Interrupt, EXTI};
use rt::entry;
use sh::hprintln;

static INT: Mutex<RefCell<Option<EXTI>>> = Mutex::new(RefCell::new(None));

#[entry]
fn main() -> ! {
    let dp = stm32::Peripherals::take().unwrap();
    let mut cp = cortex_m::Peripherals::take().unwrap();

    cp.NVIC.enable(Interrupt::EXTI0);
    dp.EXTI.listen(0, TriggerEdge::Falling);

    cortex_m::interrupt::free(move |cs| {
        *INT.borrow(cs).borrow_mut() = Some(dp.EXTI);
    });

    loop {}
}

#[interrupt]
fn EXTI0() {
    static mut COUNT: i32 = 0;

    *COUNT += 1;
    hprintln!("CLICK # {}", COUNT).unwrap();

    cortex_m::interrupt::free(|cs| {
        if let &mut Some(ref mut exti) = INT.borrow(cs).borrow_mut().deref_mut() {
            exti.clear_irq(0);
        }
    });
}