#![allow(non_snake_case, non_upper_case_globals)]
#![allow(non_camel_case_types)]
use crate::RWRegister;
#[cfg(not(feature = "nosync"))]
use core::marker::PhantomData;
pub mod CR {
pub mod IRQE {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const IRQE_0: u32 = 0b0;
pub const IRQE_1: u32 = 0b1;
}
}
pub mod FERR {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const FERR_0: u32 = 0b0;
pub const FERR_1: u32 = 0b1;
}
}
pub mod FSVM {
pub const offset: u32 = 2;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const FSVM_0: u32 = 0b0;
pub const FSVM_1: u32 = 0b1;
}
}
pub mod FLDM {
pub const offset: u32 = 3;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const FLDM_0: u32 = 0b0;
pub const FLDM_1: u32 = 0b1;
}
}
pub mod KBSE {
pub const offset: u32 = 4;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBSE_0: u32 = 0b0;
pub const KBSE_1: u32 = 0b1;
}
}
pub mod KBPE {
pub const offset: u32 = 5;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBPE_0: u32 = 0b0;
pub const KBPE_1: u32 = 0b1;
}
}
pub mod KBCE {
pub const offset: u32 = 6;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBCE_0: u32 = 0b0;
pub const KBCE_1: u32 = 0b1;
}
}
pub mod RRAE {
pub const offset: u32 = 7;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const RRAE_0: u32 = 0b0;
pub const RRAE_1: u32 = 0b1;
}
}
pub mod SKBP {
pub const offset: u32 = 30;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const SKBP_0: u32 = 0b0;
pub const SKBP_1: u32 = 0b1;
}
}
pub mod GE {
pub const offset: u32 = 31;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const GE_0: u32 = 0b0;
pub const GE_1: u32 = 0b1;
}
}
}
pub mod SR {
pub mod KBERR {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBERR_0: u32 = 0b0;
pub const KBERR_1: u32 = 0b1;
}
}
pub mod MDPCP {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod MODE {
pub const offset: u32 = 2;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const MODE_0: u32 = 0b00;
pub const MODE_1: u32 = 0b01;
pub const MODE_2: u32 = 0b10;
pub const MODE_3: u32 = 0b11;
}
}
pub mod NCTX {
pub const offset: u32 = 4;
pub const mask: u32 = 0b1111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod CTXER0 {
pub const offset: u32 = 8;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const NOERROR: u32 = 0b0;
pub const ERROR: u32 = 0b1;
}
}
pub mod CTXER1 {
pub const offset: u32 = 9;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXER0::RW;
}
pub mod CTXER2 {
pub const offset: u32 = 10;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXER0::RW;
}
pub mod CTXER3 {
pub const offset: u32 = 11;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXER0::RW;
}
pub mod CTXIE0 {
pub const offset: u32 = 16;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const NOINTEGRITYERR: u32 = 0b0;
pub const INTEGRITYERR: u32 = 0b1;
}
}
pub mod CTXIE1 {
pub const offset: u32 = 17;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXIE0::RW;
}
pub mod CTXIE2 {
pub const offset: u32 = 18;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXIE0::RW;
}
pub mod CTXIE3 {
pub const offset: u32 = 19;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub use super::CTXIE0::RW;
}
pub mod HRL {
pub const offset: u32 = 24;
pub const mask: u32 = 0b1111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RRAM {
pub const offset: u32 = 28;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const RRAM_0: u32 = 0b0;
pub const RRAM_1: u32 = 0b1;
}
}
pub mod GEM {
pub const offset: u32 = 29;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const GEM_0: u32 = 0b0;
pub const GEM_1: u32 = 0b1;
}
}
pub mod KBPE {
pub const offset: u32 = 30;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBPE_0: u32 = 0b0;
pub const KBPE_1: u32 = 0b1;
}
}
pub mod KBD {
pub const offset: u32 = 31;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const KBD_0: u32 = 0b0;
pub const KBD_1: u32 = 0b1;
}
}
}
pub mod CTX_KEY00 {
pub mod KEY {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CTX_KEY10 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY20 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY30 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_CTR00 {
pub mod CTR {
pub const offset: u32 = 0;
pub const mask: u32 = 0xffffffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CTX_CTR10 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_RGD_W00 {
pub mod SRTADDR {
pub const offset: u32 = 10;
pub const mask: u32 = 0x3fffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CTX_RGD_W10 {
pub mod VLD {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const VLD_0: u32 = 0b0;
pub const VLD_1: u32 = 0b1;
}
}
pub mod ADE {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const ADE_0: u32 = 0b0;
pub const ADE_1: u32 = 0b1;
}
}
pub mod RO {
pub const offset: u32 = 2;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const RO_0: u32 = 0b0;
pub const RO_1: u32 = 0b1;
}
}
pub mod ENDADDR {
pub const offset: u32 = 10;
pub const mask: u32 = 0x3fffff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CTX_KEY01 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY11 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY21 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY31 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_CTR01 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_CTR11 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_RGD_W01 {
pub use super::CTX_RGD_W00::SRTADDR;
}
pub mod CTX_RGD_W11 {
pub use super::CTX_RGD_W10::ADE;
pub use super::CTX_RGD_W10::ENDADDR;
pub use super::CTX_RGD_W10::RO;
pub use super::CTX_RGD_W10::VLD;
}
pub mod CTX_KEY02 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY12 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY22 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY32 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_CTR02 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_CTR12 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_RGD_W02 {
pub use super::CTX_RGD_W00::SRTADDR;
}
pub mod CTX_RGD_W12 {
pub use super::CTX_RGD_W10::ADE;
pub use super::CTX_RGD_W10::ENDADDR;
pub use super::CTX_RGD_W10::RO;
pub use super::CTX_RGD_W10::VLD;
}
pub mod CTX_KEY03 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY13 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY23 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_KEY33 {
pub use super::CTX_KEY00::KEY;
}
pub mod CTX_CTR03 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_CTR13 {
pub use super::CTX_CTR00::CTR;
}
pub mod CTX_RGD_W03 {
pub use super::CTX_RGD_W00::SRTADDR;
}
pub mod CTX_RGD_W13 {
pub use super::CTX_RGD_W10::ADE;
pub use super::CTX_RGD_W10::ENDADDR;
pub use super::CTX_RGD_W10::RO;
pub use super::CTX_RGD_W10::VLD;
}
#[repr(C)]
pub struct RegisterBlock {
_reserved1: [u32; 768],
pub CR: RWRegister<u32>,
pub SR: RWRegister<u32>,
_reserved2: [u32; 62],
pub CTX_KEY00: RWRegister<u32>,
pub CTX_KEY10: RWRegister<u32>,
pub CTX_KEY20: RWRegister<u32>,
pub CTX_KEY30: RWRegister<u32>,
pub CTX_CTR00: RWRegister<u32>,
pub CTX_CTR10: RWRegister<u32>,
pub CTX_RGD_W00: RWRegister<u32>,
pub CTX_RGD_W10: RWRegister<u32>,
_reserved3: [u32; 8],
pub CTX_KEY01: RWRegister<u32>,
pub CTX_KEY11: RWRegister<u32>,
pub CTX_KEY21: RWRegister<u32>,
pub CTX_KEY31: RWRegister<u32>,
pub CTX_CTR01: RWRegister<u32>,
pub CTX_CTR11: RWRegister<u32>,
pub CTX_RGD_W01: RWRegister<u32>,
pub CTX_RGD_W11: RWRegister<u32>,
_reserved4: [u32; 8],
pub CTX_KEY02: RWRegister<u32>,
pub CTX_KEY12: RWRegister<u32>,
pub CTX_KEY22: RWRegister<u32>,
pub CTX_KEY32: RWRegister<u32>,
pub CTX_CTR02: RWRegister<u32>,
pub CTX_CTR12: RWRegister<u32>,
pub CTX_RGD_W02: RWRegister<u32>,
pub CTX_RGD_W12: RWRegister<u32>,
_reserved5: [u32; 8],
pub CTX_KEY03: RWRegister<u32>,
pub CTX_KEY13: RWRegister<u32>,
pub CTX_KEY23: RWRegister<u32>,
pub CTX_KEY33: RWRegister<u32>,
pub CTX_CTR03: RWRegister<u32>,
pub CTX_CTR13: RWRegister<u32>,
pub CTX_RGD_W03: RWRegister<u32>,
pub CTX_RGD_W13: RWRegister<u32>,
}
pub struct ResetValues {
pub CR: u32,
pub SR: u32,
pub CTX_KEY00: u32,
pub CTX_KEY10: u32,
pub CTX_KEY20: u32,
pub CTX_KEY30: u32,
pub CTX_CTR00: u32,
pub CTX_CTR10: u32,
pub CTX_RGD_W00: u32,
pub CTX_RGD_W10: u32,
pub CTX_KEY01: u32,
pub CTX_KEY11: u32,
pub CTX_KEY21: u32,
pub CTX_KEY31: u32,
pub CTX_CTR01: u32,
pub CTX_CTR11: u32,
pub CTX_RGD_W01: u32,
pub CTX_RGD_W11: u32,
pub CTX_KEY02: u32,
pub CTX_KEY12: u32,
pub CTX_KEY22: u32,
pub CTX_KEY32: u32,
pub CTX_CTR02: u32,
pub CTX_CTR12: u32,
pub CTX_RGD_W02: u32,
pub CTX_RGD_W12: u32,
pub CTX_KEY03: u32,
pub CTX_KEY13: u32,
pub CTX_KEY23: u32,
pub CTX_KEY33: u32,
pub CTX_CTR03: u32,
pub CTX_CTR13: u32,
pub CTX_RGD_W03: u32,
pub CTX_RGD_W13: 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 OTFAD {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x400a0000,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
CR: 0x00000000,
SR: 0x00000040,
CTX_KEY00: 0x00000000,
CTX_KEY10: 0x00000000,
CTX_KEY20: 0x00000000,
CTX_KEY30: 0x00000000,
CTX_CTR00: 0x00000000,
CTX_CTR10: 0x00000000,
CTX_RGD_W00: 0x00000000,
CTX_RGD_W10: 0x000003F8,
CTX_KEY01: 0x00000000,
CTX_KEY11: 0x00000000,
CTX_KEY21: 0x00000000,
CTX_KEY31: 0x00000000,
CTX_CTR01: 0x00000000,
CTX_CTR11: 0x00000000,
CTX_RGD_W01: 0x00000000,
CTX_RGD_W11: 0x000003F8,
CTX_KEY02: 0x00000000,
CTX_KEY12: 0x00000000,
CTX_KEY22: 0x00000000,
CTX_KEY32: 0x00000000,
CTX_CTR02: 0x00000000,
CTX_CTR12: 0x00000000,
CTX_RGD_W02: 0x00000000,
CTX_RGD_W12: 0x000003F8,
CTX_KEY03: 0x00000000,
CTX_KEY13: 0x00000000,
CTX_KEY23: 0x00000000,
CTX_KEY33: 0x00000000,
CTX_CTR03: 0x00000000,
CTX_CTR13: 0x00000000,
CTX_RGD_W03: 0x00000000,
CTX_RGD_W13: 0x000003F8,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut OTFAD_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if OTFAD_TAKEN {
None
} else {
OTFAD_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if OTFAD_TAKEN && inst.addr == INSTANCE.addr {
OTFAD_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
OTFAD_TAKEN = true;
INSTANCE
}
}
pub const OTFAD: *const RegisterBlock = 0x400a0000 as *const _;