Module avr_device::interrupt

source ·
Expand description

Chip-Generic Interrupt Utilities

For the most part, crate::interrupt::free is what you want:

avr_device::interrupt::free(|cs| {
    // Interrupts are disabled here
});

To access shared state, Mutex can be used:

use avr_device::interrupt::Mutex;
use core::cell::Cell;

// Use Cell, if the wrapped type is Copy.
// Use RefCell, if the wrapped type is not Copy or if you need a reference to it for other reasons.
static MYGLOBAL: Mutex<Cell<u16>> = Mutex::new(Cell::new(0));

fn my_fun() {
    avr_device::interrupt::free(|cs| {
        // Interrupts are disabled here

        // Acquire mutex to global variable.
        let myglobal_ref = MYGLOBAL.borrow(cs);
        // Write to the global variable.
        myglobal_ref.set(42);
    });
}

Structs§

  • Critical section token.
  • Opaque structure for storing the global interrupt flag status.
  • A “mutex” based on critical sections.

Functions§

  • Disable the global interrupt flag.
  • Disable the global interrupt flag and return an opaque representation of the previous flag status.
  • Enable the global interrupt flag.
  • Execute closure f in an interrupt-free context.
  • Check whether the global interrupt flag is currently enabled (in SREG).
  • Restore the global interrupt flag to its previous state before crate::interrupt::disable_save.