embassy-stm32

Crates

git

Versions

stm32h7a3vg

Flavors

embassy_stm32

Macro bind_interrupts

Source
macro_rules! bind_interrupts {
    ($vis:vis struct $name:ident {
        $(
            $(#[cfg($cond_irq:meta)])?
            $irq:ident => $(
                $(#[cfg($cond_handler:meta)])?
                $handler:ty
            ),*;
        )*
    }) => { ... };
    (@inner $($t:tt)*) => { ... };
}
Expand description

Macro to bind interrupts to handlers.

This defines the right interrupt handlers, and creates a unit struct (like struct Irqs;) and implements the right [Binding]s for it. You can pass this struct to drivers to prove at compile-time that the right interrupts have been bound.

Example of how to bind one interrupt:

use embassy_stm32::{bind_interrupts, usb, peripherals};

bind_interrupts!(struct Irqs {
    OTG_FS => usb::InterruptHandler<peripherals::USB_OTG_FS>;
});

Example of how to bind multiple interrupts, and multiple handlers to each interrupt, in a single macro invocation:

use embassy_stm32::{bind_interrupts, i2c, peripherals};

bind_interrupts!(struct Irqs {
    I2C1 => i2c::EventInterruptHandler<peripherals::I2C1>, i2c::ErrorInterruptHandler<peripherals::I2C1>;
    I2C2_3 => i2c::EventInterruptHandler<peripherals::I2C2>, i2c::ErrorInterruptHandler<peripherals::I2C2>,
        i2c::EventInterruptHandler<peripherals::I2C3>, i2c::ErrorInterruptHandler<peripherals::I2C3>;
});