#![allow(non_snake_case, non_upper_case_globals)]
#![allow(non_camel_case_types)]
use crate::{RORegister, RWRegister, WORegister};
#[cfg(not(feature = "nosync"))]
use core::marker::PhantomData;
pub mod DR {
pub mod DR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod GDIR {
pub mod GDIR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod PSR {
pub mod PSR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ICR1 {
pub mod ICR0 {
pub const offset: u32 = 0;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const LOW_LEVEL: u32 = 0b00;
pub const HIGH_LEVEL: u32 = 0b01;
pub const RISING_EDGE: u32 = 0b10;
pub const FALLING_EDGE: u32 = 0b11;
}
}
pub mod ICR1 {
pub const offset: u32 = 2;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR2 {
pub const offset: u32 = 4;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR3 {
pub const offset: u32 = 6;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR4 {
pub const offset: u32 = 8;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR5 {
pub const offset: u32 = 10;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR6 {
pub const offset: u32 = 12;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR7 {
pub const offset: u32 = 14;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR8 {
pub const offset: u32 = 16;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR9 {
pub const offset: u32 = 18;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR10 {
pub const offset: u32 = 20;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR11 {
pub const offset: u32 = 22;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR12 {
pub const offset: u32 = 24;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR13 {
pub const offset: u32 = 26;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR14 {
pub const offset: u32 = 28;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
pub mod ICR15 {
pub const offset: u32 = 30;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR0::RW;
}
}
pub mod ICR2 {
pub mod ICR16 {
pub const offset: u32 = 0;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const LOW_LEVEL: u32 = 0b00;
pub const HIGH_LEVEL: u32 = 0b01;
pub const RISING_EDGE: u32 = 0b10;
pub const FALLING_EDGE: u32 = 0b11;
}
}
pub mod ICR17 {
pub const offset: u32 = 2;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR18 {
pub const offset: u32 = 4;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR19 {
pub const offset: u32 = 6;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR20 {
pub const offset: u32 = 8;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR21 {
pub const offset: u32 = 10;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR22 {
pub const offset: u32 = 12;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR23 {
pub const offset: u32 = 14;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR24 {
pub const offset: u32 = 16;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR25 {
pub const offset: u32 = 18;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR26 {
pub const offset: u32 = 20;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR27 {
pub const offset: u32 = 22;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR28 {
pub const offset: u32 = 24;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR29 {
pub const offset: u32 = 26;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR30 {
pub const offset: u32 = 28;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
pub mod ICR31 {
pub const offset: u32 = 30;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub use super::ICR16::RW;
}
}
pub mod IMR {
pub mod IMR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ISR {
pub mod ISR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod EDGE_SEL {
pub mod GPIO_EDGE_SEL {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod DR_SET {
pub mod DR_SET {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod DR_CLEAR {
pub mod DR_CLEAR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod DR_TOGGLE {
pub mod DR_TOGGLE {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
#[repr(C)]
pub struct RegisterBlock {
pub DR: RWRegister<u32>,
pub GDIR: RWRegister<u32>,
pub PSR: RORegister<u32>,
pub ICR1: RWRegister<u32>,
pub ICR2: RWRegister<u32>,
pub IMR: RWRegister<u32>,
pub ISR: RWRegister<u32>,
pub EDGE_SEL: RWRegister<u32>,
_reserved1: [u32; 25],
pub DR_SET: WORegister<u32>,
pub DR_CLEAR: WORegister<u32>,
pub DR_TOGGLE: WORegister<u32>,
}
pub struct ResetValues {
pub DR: u32,
pub GDIR: u32,
pub PSR: u32,
pub ICR1: u32,
pub ICR2: u32,
pub IMR: u32,
pub ISR: u32,
pub EDGE_SEL: u32,
pub DR_SET: u32,
pub DR_CLEAR: u32,
pub DR_TOGGLE: 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 = "rtfm")]
unsafe impl Send for Instance {}
pub mod GPIO1 {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x401b8000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
DR: 0x00000000,
GDIR: 0x00000000,
PSR: 0x00000000,
ICR1: 0x00000000,
ICR2: 0x00000000,
IMR: 0x00000000,
ISR: 0x00000000,
EDGE_SEL: 0x00000000,
DR_SET: 0x00000000,
DR_CLEAR: 0x00000000,
DR_TOGGLE: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut GPIO1_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO1_TAKEN {
None
} else {
GPIO1_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO1_TAKEN && inst.addr == INSTANCE.addr {
GPIO1_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
GPIO1_TAKEN = true;
INSTANCE
}
}
pub const GPIO1: *const RegisterBlock = 0x401b8000 as *const _;
pub mod GPIO2 {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x401bc000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
DR: 0x00000000,
GDIR: 0x00000000,
PSR: 0x00000000,
ICR1: 0x00000000,
ICR2: 0x00000000,
IMR: 0x00000000,
ISR: 0x00000000,
EDGE_SEL: 0x00000000,
DR_SET: 0x00000000,
DR_CLEAR: 0x00000000,
DR_TOGGLE: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut GPIO2_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO2_TAKEN {
None
} else {
GPIO2_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO2_TAKEN && inst.addr == INSTANCE.addr {
GPIO2_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
GPIO2_TAKEN = true;
INSTANCE
}
}
pub const GPIO2: *const RegisterBlock = 0x401bc000 as *const _;
pub mod GPIO3 {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x401c0000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
DR: 0x00000000,
GDIR: 0x00000000,
PSR: 0x00000000,
ICR1: 0x00000000,
ICR2: 0x00000000,
IMR: 0x00000000,
ISR: 0x00000000,
EDGE_SEL: 0x00000000,
DR_SET: 0x00000000,
DR_CLEAR: 0x00000000,
DR_TOGGLE: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut GPIO3_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO3_TAKEN {
None
} else {
GPIO3_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO3_TAKEN && inst.addr == INSTANCE.addr {
GPIO3_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
GPIO3_TAKEN = true;
INSTANCE
}
}
pub const GPIO3: *const RegisterBlock = 0x401c0000 as *const _;
pub mod GPIO5 {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x400c0000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
DR: 0x00000000,
GDIR: 0x00000000,
PSR: 0x00000000,
ICR1: 0x00000000,
ICR2: 0x00000000,
IMR: 0x00000000,
ISR: 0x00000000,
EDGE_SEL: 0x00000000,
DR_SET: 0x00000000,
DR_CLEAR: 0x00000000,
DR_TOGGLE: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut GPIO5_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO5_TAKEN {
None
} else {
GPIO5_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if GPIO5_TAKEN && inst.addr == INSTANCE.addr {
GPIO5_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
GPIO5_TAKEN = true;
INSTANCE
}
}
pub const GPIO5: *const RegisterBlock = 0x400c0000 as *const _;