diff --git a/examples/button_int.rs b/examples/button_int.rs index f5f064b..780116c 100644 --- a/examples/button_int.rs +++ b/examples/button_int.rs @@ -6,8 +6,8 @@ extern crate panic_itm; use cortex_m_rt::entry; use stm32f3_discovery::stm32f3xx_hal::interrupt; -use stm32f3_discovery::stm32f3xx_hal::prelude::*; use stm32f3_discovery::stm32f3xx_hal::pac; +use stm32f3_discovery::stm32f3xx_hal::prelude::*; use stm32f3_discovery::wait_for_interrupt; use core::sync::atomic::{AtomicBool, Ordering}; @@ -31,6 +31,7 @@ fn EXTI0() { fn main() -> ! { let device_periphs = pac::Peripherals::take().unwrap(); let mut reset_and_clock_control = device_periphs.RCC.constrain(); + let syscfg = device_periphs.SYSCFG.constrain(&mut reset_and_clock_control.apb2); // initialize user leds let mut gpioe = device_periphs.GPIOE.split(&mut reset_and_clock_control.ahb); @@ -48,11 +49,7 @@ fn main() -> ! { ); let mut status_led = leds.ld3; - button::interrupt::enable( - &device_periphs.EXTI, - &device_periphs.SYSCFG, - TriggerMode::Rising, - ); + button::interrupt::enable(&device_periphs.EXTI, &syscfg, TriggerMode::Rising); loop { // check to see if flag was active and clear it diff --git a/src/button/interrupt.rs b/src/button/interrupt.rs index bdaa3d1..e91dc3d 100644 --- a/src/button/interrupt.rs +++ b/src/button/interrupt.rs @@ -37,7 +37,10 @@ pub enum TriggerMode { /// /// ``` /// let device_periphs = pac::Peripherals::take().unwrap(); -/// button::interrupt::enable(&device_periphs.EXTI, &device_periphs.SYSCFG, TriggerMode::Rising); +/// let mut reset_and_clock_control = device_periphs.RCC.constrain(); +/// let syscfg = device_periphs.SYSCFG.constrain(&mut reset_and_clock_control.apb2) +/// +/// button::interrupt::enable(&device_periphs.EXTI, &syscfg, TriggerMode::Rising); /// ``` pub fn enable(external_interrupts: &EXTI, sysconfig: &SYSCFG, mode: TriggerMode) { // See chapter 14 of the reference manual @@ -59,20 +62,19 @@ pub fn enable(external_interrupts: &EXTI, sysconfig: &SYSCFG, mode: TriggerMode) } fn configure_exti0(interrupt_mask: &IMR1) { - interrupt_mask.modify(|_, w| w.mr0().set_bit()) + interrupt_mask.modify(|_, w| w.mr0().unmasked()) } fn map_exti0_to_pa0(external_interrupt_config: &EXTICR1) { - const PORT_A_CONFIG: u8 = 0x000; - external_interrupt_config.modify(|_, w| unsafe { w.exti0().bits(PORT_A_CONFIG) }); + external_interrupt_config.modify(|_, w| w.exti0().pa0()); } fn configure_rising_edge_trigger(rising_trigger_select: &RTSR1) { - rising_trigger_select.modify(|_, w| w.tr0().set_bit()) + rising_trigger_select.modify(|_, w| w.tr0().enabled()) } fn configure_falling_edge_trigger(falling_trigger_select: &FTSR1) { - falling_trigger_select.modify(|_, w| w.tr0().set_bit()) + falling_trigger_select.modify(|_, w| w.tr0().enabled()) } fn enable_exti0() {