($(#[$attr:meta])* $name:ident <= virtual ($($interrupt:ident: { $bind:ident, $enable:ident, $disable:ident }),*)) => {
/// Binds an interrupt handler to the corresponding interrupt for this peripheral, and enables the interrupt.
/// Very low-level interrupt API. Unless writing drivers, this is probably not the interrupt API to use.
#[doc = concat!("Enables the ", stringify!($interrupt), " peripheral interrupt on the given priority level.")]
/// Very low-level interrupt API. Unless writing drivers, this is probably not the interrupt API to use.
#[cfg_attr(multi_core, doc = "The interrupt handler will be enabled on the core that calls this function.")]
#[cfg_attr(not(feature = "unstable"), doc = "To set up an interrupt handler, create a function that has the same (non-mangled) name as the interrupt to handle.")]
#[cfg_attr(feature = "unstable", doc = concat!("To set up an interrupt handler, use [`Self::", stringify!($bind), "`] or create a function that has the same (non-mangled) name as the interrupt to handle."))]
#[doc = concat!("peripherals.", stringify!($name), ".", stringify!($enable), "(Priority::Priority1);")]
#[doc = concat!("peripherals.", stringify!($name), ".", stringify!($disable), "_on_all_cores();")]
#[doc = concat!("Disables the ", stringify!($interrupt), " peripheral interrupt handler on the current CPU core.")]
/// Very low-level interrupt API. Unless writing drivers, this is probably not the interrupt API to use.
$crate::interrupt::disable($crate::system::Cpu::current(), $crate::peripherals::Interrupt::$interrupt);
#[doc = concat!("Disables the ", stringify!($interrupt), " peripheral interrupt handler on all cores.")]
/// Very low-level interrupt API. Unless writing drivers, this is probably not the interrupt API to use.
(singletons $( ( $(#[$cfg:meta])* $name:ident $(($unstable:ident $(#[$unstable_cfg:meta])*))?) ),*) => {
// We need a way to ignore the "unstable" marker, but macros can't generate attributes or struct fields.
// in the source data. The marker itself is passed through the `ignore` macro so that it doesn't