#![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 EP0R {
pub mod EA {
pub const offset: u32 = 0;
pub const mask: u32 = 0b1111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod STAT_TX {
pub const offset: u32 = 4;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod DTOG_TX {
pub const offset: u32 = 6;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod CTR_TX {
pub const offset: u32 = 7;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod EP_KIND {
pub const offset: u32 = 8;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod EP_TYPE {
pub const offset: u32 = 9;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod SETUP {
pub const offset: u32 = 11;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod STAT_RX {
pub const offset: u32 = 12;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod DTOG_RX {
pub const offset: u32 = 14;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod CTR_RX {
pub const offset: u32 = 15;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod EP1R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP2R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP3R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP4R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP5R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP6R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod EP7R {
pub use super::EP0R::CTR_RX;
pub use super::EP0R::CTR_TX;
pub use super::EP0R::DTOG_RX;
pub use super::EP0R::DTOG_TX;
pub use super::EP0R::EA;
pub use super::EP0R::EP_KIND;
pub use super::EP0R::EP_TYPE;
pub use super::EP0R::SETUP;
pub use super::EP0R::STAT_RX;
pub use super::EP0R::STAT_TX;
}
pub mod CNTR {
pub mod FRES {
pub const offset: u32 = 0;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod PDWN {
pub const offset: u32 = 1;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod LPMODE {
pub const offset: u32 = 2;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod FSUSP {
pub const offset: u32 = 3;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RESUME {
pub const offset: u32 = 4;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod L1RESUME {
pub const offset: u32 = 5;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod L1REQM {
pub const offset: u32 = 7;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod ESOFM {
pub const offset: u32 = 8;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod SOFM {
pub const offset: u32 = 9;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RESETM {
pub const offset: u32 = 10;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod SUSPM {
pub const offset: u32 = 11;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod WKUPM {
pub const offset: u32 = 12;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod ERRM {
pub const offset: u32 = 13;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod PMAOVRM {
pub const offset: u32 = 14;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod CTRM {
pub const offset: u32 = 15;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod ISTR {
pub mod EP_ID {
pub const offset: u32 = 0;
pub const mask: u32 = 0b1111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod DIR {
pub const offset: u32 = 4;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod L1REQ {
pub const offset: u32 = 7;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod ESOF {
pub const offset: u32 = 8;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod SOF {
pub const offset: u32 = 9;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RESET {
pub const offset: u32 = 10;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod SUSP {
pub const offset: u32 = 11;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod WKUP {
pub const offset: u32 = 12;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod ERR {
pub const offset: u32 = 13;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod PMAOVR {
pub const offset: u32 = 14;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod CTR {
pub const offset: u32 = 15;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod FNR {
pub mod FN {
pub const offset: u32 = 0;
pub const mask: u32 = 0x7ff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod LSOF {
pub const offset: u32 = 11;
pub const mask: u32 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod LCK {
pub const offset: u32 = 13;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RXDM {
pub const offset: u32 = 14;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod RXDP {
pub const offset: u32 = 15;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod DADDR {
pub mod ADD {
pub const offset: u32 = 0;
pub const mask: u32 = 0x7f << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod EF {
pub const offset: u32 = 7;
pub const mask: u32 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod BTABLE {
pub mod BTABLE {
pub const offset: u32 = 3;
pub const mask: u32 = 0x1fff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
#[repr(C)]
pub struct RegisterBlock {
pub EP0R: RWRegister<u32>,
pub EP1R: RWRegister<u32>,
pub EP2R: RWRegister<u32>,
pub EP3R: RWRegister<u32>,
pub EP4R: RWRegister<u32>,
pub EP5R: RWRegister<u32>,
pub EP6R: RWRegister<u32>,
pub EP7R: RWRegister<u32>,
_reserved1: [u8; 32],
pub CNTR: RWRegister<u32>,
pub ISTR: RWRegister<u32>,
pub FNR: RORegister<u32>,
pub DADDR: RWRegister<u32>,
pub BTABLE: RWRegister<u32>,
}
pub struct ResetValues {
pub EP0R: u32,
pub EP1R: u32,
pub EP2R: u32,
pub EP3R: u32,
pub EP4R: u32,
pub EP5R: u32,
pub EP6R: u32,
pub EP7R: u32,
pub CNTR: u32,
pub ISTR: u32,
pub FNR: u32,
pub DADDR: u32,
pub BTABLE: 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 USB {
use super::ResetValues;
#[cfg(not(feature = "nosync"))]
use super::Instance;
#[cfg(not(feature = "nosync"))]
const INSTANCE: Instance = Instance {
addr: 0x40006c00,
_marker: ::core::marker::PhantomData,
};
pub const reset: ResetValues = ResetValues {
EP0R: 0x00000000,
EP1R: 0x00000000,
EP2R: 0x00000000,
EP3R: 0x00000000,
EP4R: 0x00000000,
EP5R: 0x00000000,
EP6R: 0x00000000,
EP7R: 0x00000000,
CNTR: 0x00000003,
ISTR: 0x00000000,
FNR: 0x00000000,
DADDR: 0x00000000,
BTABLE: 0x00000000,
};
#[cfg(not(feature = "nosync"))]
#[allow(renamed_and_removed_lints)]
#[allow(private_no_mangle_statics)]
#[no_mangle]
static mut USB_TAKEN: bool = false;
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn take() -> Option<Instance> {
external_cortex_m::interrupt::free(|_| unsafe {
if USB_TAKEN {
None
} else {
USB_TAKEN = true;
Some(INSTANCE)
}
})
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub fn release(inst: Instance) {
external_cortex_m::interrupt::free(|_| unsafe {
if USB_TAKEN && inst.addr == INSTANCE.addr {
USB_TAKEN = false;
} else {
panic!("Released a peripheral which was not taken");
}
});
}
#[cfg(not(feature = "nosync"))]
#[inline]
pub unsafe fn steal() -> Instance {
USB_TAKEN = true;
INSTANCE
}
}
pub const USB: *const RegisterBlock = 0x40006c00 as *const _;