Skip to content

Instantly share code, notes, and snippets.

@Emilgardis
Created July 18, 2017 00:57
Show Gist options
  • Save Emilgardis/ca36823f1bb591d4637ff438cb8902b0 to your computer and use it in GitHub Desktop.
Save Emilgardis/ca36823f1bb591d4637ff438cb8902b0 to your computer and use it in GitHub Desktop.
extern crate cortex_m;
extern crate cortex_m_rt;
#[macro_use]
extern crate cortex_m_rtfm;
extern crate pac; // Our peripheral access crate
use rtfm::{C1, P0, P1, Resource, T0, T1, TMax};
peripherals! {
GPIOA: Peripheral {
register_block: GPIOA,
ceiling: C1,
},
EXTI: Peripheral {
register_block: EXTI,
ceiling: C1,
},
}
fn init(prio: T0, thres: &TMax) {
// setup exti on PA2 ...
}
fn exti_pa2(mut task: EXTI0, ref prio: P1, ref thres: T1) {
let exti = EXTI.access(prio, thres);
let gpioa = GPIOA.access(prio, thres);
// Clear pending exti and change led PA5
}
fn idle(ref prio: T0, ref thres: T0) -> ! {
let gpioa_ro = pac::GPIOA.get();
loop {
if unsafe { (*gpioa_ro).idr.read().idr1().is_set() } {
thres.raise(&GPIOA, |threshold: &T1| {
let gpioa = GPIOA.access(prio, threshold);
// Change state of led on PA5
}
}
}
}
extern crate cortex_m;
extern crate cortex_m_rt;
#[macro_use]
extern crate cortex_m_rtfm;
extern crate pac; // Our peripheral access crate
use rtfm::{C1, P0, P1, Resource, T0, T1, TMax};
peripherals! {
GPIOA: Peripheral {
register_block: GPIOA,
ceiling: C1,
},
EXTI: Peripheral {
register_block: EXTI,
ceiling: C1,
},
}
fn init(prio: T0, thres: &TMax) {
// setup exti on PA2 ...
}
fn exti_pa2(mut task: EXTI0, ref prio: P1, ref thres: T1) {
let exti = EXTI.access(prio, thres);
let gpioa = GPIOA.access(prio, thres);
// Clear pending exti and change led PA5
}
registers_ro! {
GPIOA: [IDR,],
}
fn idle(ref prio: T0, ref thres: T0) -> ! {
let gpioa_idr = GPIOA.access_read::<GPIOA_IDR>();
loop {
if gpio_idr.read().idr1().is_set() {
thres.raise(&GPIOA, |threshold: &T1| {
let gpioa = GPIOA.access(prio, threshold);
// Change state of led on PA5
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment