#![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 MCR {
pub mod FRZ {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const FRZ_0: u32 = 0b0;
pub const FRZ_1: u32 = 0b1;
}
}
pub mod MDIS {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const MDIS_0: u32 = 0b0;
pub const MDIS_1: u32 = 0b1;
}
}
}
pub mod LTMR64H {
pub mod LTH {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod LTMR64L {
pub mod LTL {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod LDVAL0 {
pub mod TSV {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CVAL0 {
pub mod TVL {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod TCTRL0 {
pub mod TEN {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const TEN_0: u32 = 0b0;
pub const TEN_1: u32 = 0b1;
}
}
pub mod TIE {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const TIE_0: u32 = 0b0;
pub const TIE_1: u32 = 0b1;
}
}
pub mod CHN {
pub const offset: u32 = 2;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const CHN_0: u32 = 0b0;
pub const CHN_1: u32 = 0b1;
}
}
}
pub mod TFLG0 {
pub mod TIF {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const TIF_0: u32 = 0b0;
pub const TIF_1: u32 = 0b1;
}
}
}
pub mod LDVAL1 {
pub use super::LDVAL0::TSV;
}
pub mod CVAL1 {
pub use super::CVAL0::TVL;
}
pub mod TCTRL1 {
pub use super::TCTRL0::CHN;
pub use super::TCTRL0::TEN;
pub use super::TCTRL0::TIE;
}
pub mod TFLG1 {
pub use super::TFLG0::TIF;
}
pub mod LDVAL2 {
pub use super::LDVAL0::TSV;
}
pub mod CVAL2 {
pub use super::CVAL0::TVL;
}
pub mod TCTRL2 {
pub use super::TCTRL0::CHN;
pub use super::TCTRL0::TEN;
pub use super::TCTRL0::TIE;
}
pub mod TFLG2 {
pub use super::TFLG0::TIF;
}
pub mod LDVAL3 {
pub use super::LDVAL0::TSV;
}
pub mod CVAL3 {
pub use super::CVAL0::TVL;
}
pub mod TCTRL3 {
pub use super::TCTRL0::CHN;
pub use super::TCTRL0::TEN;
pub use super::TCTRL0::TIE;
}
pub mod TFLG3 {
pub use super::TFLG0::TIF;
}
#[repr(C)]
pub struct RegisterBlock {
pub MCR: RWRegister<u32>,
_reserved1: [u32; 55],
pub LTMR64H: RORegister<u32>,
pub LTMR64L: RORegister<u32>,
_reserved2: [u32; 6],
pub LDVAL0: RWRegister<u32>,
pub CVAL0: RORegister<u32>,
pub TCTRL0: RWRegister<u32>,
pub TFLG0: RWRegister<u32>,
pub LDVAL1: RWRegister<u32>,
pub CVAL1: RORegister<u32>,
pub TCTRL1: RWRegister<u32>,
pub TFLG1: RWRegister<u32>,
pub LDVAL2: RWRegister<u32>,
pub CVAL2: RORegister<u32>,
pub TCTRL2: RWRegister<u32>,
pub TFLG2: RWRegister<u32>,
pub LDVAL3: RWRegister<u32>,
pub CVAL3: RORegister<u32>,
pub TCTRL3: RWRegister<u32>,
pub TFLG3: RWRegister<u32>,
}
pub struct ResetValues {
pub MCR: u32,
pub LTMR64H: u32,
pub LTMR64L: u32,
pub LDVAL0: u32,
pub CVAL0: u32,
pub TCTRL0: u32,
pub TFLG0: u32,
pub LDVAL1: u32,
pub CVAL1: u32,
pub TCTRL1: u32,
pub TFLG1: u32,
pub LDVAL2: u32,
pub CVAL2: u32,
pub TCTRL2: u32,
pub TFLG2: u32,
pub LDVAL3: u32,
pub CVAL3: u32,
pub TCTRL3: u32,
pub TFLG3: 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 PIT {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x40084000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
MCR: 0x00000002,
LTMR64H: 0x00000000,
LTMR64L: 0x00000000,
LDVAL0: 0x00000000,
CVAL0: 0x00000000,
TCTRL0: 0x00000000,
TFLG0: 0x00000000,
LDVAL1: 0x00000000,
CVAL1: 0x00000000,
TCTRL1: 0x00000000,
TFLG1: 0x00000000,
LDVAL2: 0x00000000,
CVAL2: 0x00000000,
TCTRL2: 0x00000000,
TFLG2: 0x00000000,
LDVAL3: 0x00000000,
CVAL3: 0x00000000,
TCTRL3: 0x00000000,
TFLG3: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut PIT_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if PIT_TAKEN {
None
} else {
PIT_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if PIT_TAKEN && inst.addr == INSTANCE.addr {
PIT_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
PIT_TAKEN = true;
INSTANCE
}
}
pub const PIT: *const RegisterBlock = 0x40084000 as *const _;