#![allow(non_snake_case, non_upper_case_globals)]
#![allow(non_camel_case_types)]
use crate::{RORegister, RWRegister};
#[cfg(not(feature = "nosync"))]
use core::marker::PhantomData;
pub mod ISER0 {
pub mod SETENA {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ISER1 {
pub use super::ISER0::SETENA;
}
pub mod ICER0 {
pub mod CLRENA {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ICER1 {
pub use super::ICER0::CLRENA;
}
pub mod ISPR0 {
pub mod SETPEND {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ISPR1 {
pub use super::ISPR0::SETPEND;
}
pub mod ICPR0 {
pub mod CLRPEND {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ICPR1 {
pub use super::ICPR0::CLRPEND;
}
pub mod IABR0 {
pub mod ACTIVE {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod IABR1 {
pub use super::IABR0::ACTIVE;
}
pub mod IPR0 {
pub mod IPR_N0 {
pub const offset: u32 = 0;
pub const mask: u32 = 0xff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod IPR_N1 {
pub const offset: u32 = 8;
pub const mask: u32 = 0xff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod IPR_N2 {
pub const offset: u32 = 16;
pub const mask: u32 = 0xff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod IPR_N3 {
pub const offset: u32 = 24;
pub const mask: u32 = 0xff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod IPR1 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR2 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR3 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR4 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR5 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR6 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR7 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR8 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR9 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR10 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR11 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR12 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR13 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR14 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR15 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR16 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
pub mod IPR17 {
pub use super::IPR0::IPR_N0;
pub use super::IPR0::IPR_N1;
pub use super::IPR0::IPR_N2;
pub use super::IPR0::IPR_N3;
}
#[repr(C)]
pub struct RegisterBlock {
pub ISER0: RWRegister<u32>,
pub ISER1: RWRegister<u32>,
_reserved1: [u8; 120],
pub ICER0: RWRegister<u32>,
pub ICER1: RWRegister<u32>,
_reserved2: [u8; 120],
pub ISPR0: RWRegister<u32>,
pub ISPR1: RWRegister<u32>,
_reserved3: [u8; 120],
pub ICPR0: RWRegister<u32>,
pub ICPR1: RWRegister<u32>,
_reserved4: [u8; 120],
pub IABR0: RORegister<u32>,
pub IABR1: RORegister<u32>,
_reserved5: [u8; 248],
pub IPR0: RWRegister<u32>,
pub IPR1: RWRegister<u32>,
pub IPR2: RWRegister<u32>,
pub IPR3: RWRegister<u32>,
pub IPR4: RWRegister<u32>,
pub IPR5: RWRegister<u32>,
pub IPR6: RWRegister<u32>,
pub IPR7: RWRegister<u32>,
pub IPR8: RWRegister<u32>,
pub IPR9: RWRegister<u32>,
pub IPR10: RWRegister<u32>,
pub IPR11: RWRegister<u32>,
pub IPR12: RWRegister<u32>,
pub IPR13: RWRegister<u32>,
pub IPR14: RWRegister<u32>,
pub IPR15: RWRegister<u32>,
pub IPR16: RWRegister<u32>,
pub IPR17: RWRegister<u32>,
}
pub struct ResetValues {
pub ISER0: u32,
pub ISER1: u32,
pub ICER0: u32,
pub ICER1: u32,
pub ISPR0: u32,
pub ISPR1: u32,
pub ICPR0: u32,
pub ICPR1: u32,
pub IABR0: u32,
pub IABR1: u32,
pub IPR0: u32,
pub IPR1: u32,
pub IPR2: u32,
pub IPR3: u32,
pub IPR4: u32,
pub IPR5: u32,
pub IPR6: u32,
pub IPR7: u32,
pub IPR8: u32,
pub IPR9: u32,
pub IPR10: u32,
pub IPR11: u32,
pub IPR12: u32,
pub IPR13: u32,
pub IPR14: u32,
pub IPR15: u32,
pub IPR16: u32,
pub IPR17: u32,
}
#[cfg(not(feature = "nosync"))]
pub struct Instance {
pub(crate) addr: u32,
pub(crate) _marker: PhantomData<*const RegisterBlock>,
}
#[cfg(not(feature = "nosync"))]
impl ::core::ops::Deref for Instance {
type Target = RegisterBlock;
#[inline(always)]
fn deref(&self) -> &RegisterBlock {
unsafe { &*(self.addr as *const _) }
}
}
#[cfg(feature = "rtic")]
unsafe impl Send for Instance {}
pub mod NVIC {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0xe000e100,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
ISER0: 0x00000000,
ISER1: 0x00000000,
ICER0: 0x00000000,
ICER1: 0x00000000,
ISPR0: 0x00000000,
ISPR1: 0x00000000,
ICPR0: 0x00000000,
ICPR1: 0x00000000,
IABR0: 0x00000000,
IABR1: 0x00000000,
IPR0: 0x00000000,
IPR1: 0x00000000,
IPR2: 0x00000000,
IPR3: 0x00000000,
IPR4: 0x00000000,
IPR5: 0x00000000,
IPR6: 0x00000000,
IPR7: 0x00000000,
IPR8: 0x00000000,
IPR9: 0x00000000,
IPR10: 0x00000000,
IPR11: 0x00000000,
IPR12: 0x00000000,
IPR13: 0x00000000,
IPR14: 0x00000000,
IPR15: 0x00000000,
IPR16: 0x00000000,
IPR17: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut NVIC_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if NVIC_TAKEN {
None
} else {
NVIC_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if NVIC_TAKEN && inst.addr == INSTANCE.addr {
NVIC_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
NVIC_TAKEN = true;
INSTANCE
}
}
pub const NVIC: *const RegisterBlock = 0xe000e100 as *const _;