diff options
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 1836 |
1 files changed, 1836 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..dc48ca2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,1836 @@ +#![doc = "Peripheral access API for ATSAMC21N18A microcontrollers (generated using svd2rust v0.19.0 ( ))\n\nYou can find an overview of the generated API [here].\n\nAPI features to be included in the [next] +svd2rust release can be generated by cloning the svd2rust [repository], checking out the above commit, and running `cargo doc --open`.\n\n[here]: https://docs.rs/svd2rust/0.19.0/svd2rust/#peripheral-api\n[next]: https://github.com/rust-embedded/svd2rust/blob/master/CHANGELOG.md#unreleased\n[repository]: https://github.com/rust-embedded/svd2rust"] +#![deny(const_err)] +#![deny(dead_code)] +#![deny(improper_ctypes)] +#![deny(missing_docs)] +#![deny(no_mangle_generic_items)] +#![deny(non_shorthand_field_patterns)] +#![deny(overflowing_literals)] +#![deny(path_statements)] +#![deny(patterns_in_fns_without_body)] +#![deny(private_in_public)] +#![deny(unconditional_recursion)] +#![deny(unused_allocation)] +#![deny(unused_comparisons)] +#![deny(unused_parens)] +#![deny(while_true)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![no_std] +use core::marker::PhantomData; +use core::ops::Deref; +#[doc = r"Number available in the NVIC for configuring priority"] +pub const NVIC_PRIO_BITS: u8 = 2; +#[cfg(feature = "rt")] +pub use self::Interrupt as interrupt; +pub use cortex_m::peripheral::Peripherals as CorePeripherals; +pub use cortex_m::peripheral::{CBP, CPUID, DCB, DWT, FPB, ITM, MPU, NVIC, SCB, SYST, TPIU}; +#[cfg(feature = "rt")] +pub use cortex_m_rt::interrupt; +#[allow(unused_imports)] +use generic::*; +#[doc = r"Common register and bit access and modify traits"] +pub mod generic; +#[cfg(feature = "rt")] +extern "C" { + fn WDT(); + fn RTC(); + fn EIC(); + fn FREQM(); + fn TSENS(); + fn NVMCTRL(); + fn DMAC(); + fn EVSYS(); + fn SERCOM2(); + fn SERCOM3(); + fn SERCOM4(); + fn SERCOM5(); + fn CAN0(); + fn CAN1(); + fn TCC0(); + fn TCC1(); + fn TCC2(); + fn TC3(); + fn TC4(); + fn ADC0(); + fn ADC1(); + fn AC(); + fn DAC(); + fn SDADC(); + fn PTC(); +} +#[doc(hidden)] +pub union Vector { + _handler: unsafe extern "C" fn(), + _reserved: u32, +} +#[cfg(feature = "rt")] +#[doc(hidden)] +#[link_section = ".vector_table.interrupts"] +#[no_mangle] +pub static __INTERRUPTS: [Vector; 31] = [ + Vector { _reserved: 0 }, + Vector { _handler: WDT }, + Vector { _handler: RTC }, + Vector { _handler: EIC }, + Vector { _handler: FREQM }, + Vector { _handler: TSENS }, + Vector { _handler: NVMCTRL }, + Vector { _handler: DMAC }, + Vector { _handler: EVSYS }, + Vector { _reserved: 0 }, + Vector { _reserved: 0 }, + Vector { _handler: SERCOM2 }, + Vector { _handler: SERCOM3 }, + Vector { _handler: SERCOM4 }, + Vector { _handler: SERCOM5 }, + Vector { _handler: CAN0 }, + Vector { _handler: CAN1 }, + Vector { _handler: TCC0 }, + Vector { _handler: TCC1 }, + Vector { _handler: TCC2 }, + Vector { _reserved: 0 }, + Vector { _reserved: 0 }, + Vector { _reserved: 0 }, + Vector { _handler: TC3 }, + Vector { _handler: TC4 }, + Vector { _handler: ADC0 }, + Vector { _handler: ADC1 }, + Vector { _handler: AC }, + Vector { _handler: DAC }, + Vector { _handler: SDADC }, + Vector { _handler: PTC }, +]; +#[doc = r"Enumeration of all the interrupts."] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +#[repr(u16)] +pub enum Interrupt { + #[doc = "1 - WDT"] + WDT = 1, + #[doc = "2 - RTC"] + RTC = 2, + #[doc = "3 - EIC"] + EIC = 3, + #[doc = "4 - FREQM"] + FREQM = 4, + #[doc = "5 - TSENS"] + TSENS = 5, + #[doc = "6 - NVMCTRL"] + NVMCTRL = 6, + #[doc = "7 - DMAC"] + DMAC = 7, + #[doc = "8 - EVSYS"] + EVSYS = 8, + #[doc = "11 - SERCOM2"] + SERCOM2 = 11, + #[doc = "12 - SERCOM3"] + SERCOM3 = 12, + #[doc = "13 - SERCOM4"] + SERCOM4 = 13, + #[doc = "14 - SERCOM5"] + SERCOM5 = 14, + #[doc = "15 - CAN0"] + CAN0 = 15, + #[doc = "16 - CAN1"] + CAN1 = 16, + #[doc = "17 - TCC0"] + TCC0 = 17, + #[doc = "18 - TCC1"] + TCC1 = 18, + #[doc = "19 - TCC2"] + TCC2 = 19, + #[doc = "23 - TC3"] + TC3 = 23, + #[doc = "24 - TC4"] + TC4 = 24, + #[doc = "25 - ADC0"] + ADC0 = 25, + #[doc = "26 - ADC1"] + ADC1 = 26, + #[doc = "27 - AC"] + AC = 27, + #[doc = "28 - DAC"] + DAC = 28, + #[doc = "29 - SDADC"] + SDADC = 29, + #[doc = "30 - PTC"] + PTC = 30, +} +unsafe impl cortex_m::interrupt::InterruptNumber for Interrupt { + #[inline(always)] + fn number(self) -> u16 { + self as u16 + } +} +#[doc = "Analog Comparators"] +pub struct AC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for AC {} +impl AC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const ac::RegisterBlock = 0x4200_5000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const ac::RegisterBlock { + Self::PTR + } +} +impl Deref for AC { + type Target = ac::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for AC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("AC").finish() + } +} +#[doc = "Analog Comparators"] +pub mod ac; +#[doc = "Analog Digital Converter"] +pub struct ADC0 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for ADC0 {} +impl ADC0 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const adc0::RegisterBlock = 0x4200_4400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const adc0::RegisterBlock { + Self::PTR + } +} +impl Deref for ADC0 { + type Target = adc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for ADC0 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("ADC0").finish() + } +} +#[doc = "Analog Digital Converter"] +pub mod adc0; +#[doc = "Analog Digital Converter"] +pub struct ADC1 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for ADC1 {} +impl ADC1 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const adc0::RegisterBlock = 0x4200_4800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const adc0::RegisterBlock { + Self::PTR + } +} +impl Deref for ADC1 { + type Target = adc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for ADC1 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("ADC1").finish() + } +} +#[doc = "Control Area Network"] +pub struct CAN0 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for CAN0 {} +impl CAN0 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const can0::RegisterBlock = 0x4200_1c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const can0::RegisterBlock { + Self::PTR + } +} +impl Deref for CAN0 { + type Target = can0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for CAN0 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("CAN0").finish() + } +} +#[doc = "Control Area Network"] +pub mod can0; +#[doc = "Control Area Network"] +pub struct CAN1 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for CAN1 {} +impl CAN1 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const can0::RegisterBlock = 0x4200_2000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const can0::RegisterBlock { + Self::PTR + } +} +impl Deref for CAN1 { + type Target = can0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for CAN1 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("CAN1").finish() + } +} +#[doc = "Configurable Custom Logic"] +pub struct CCL { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for CCL {} +impl CCL { + #[doc = r"Pointer to the register block"] + pub const PTR: *const ccl::RegisterBlock = 0x4200_5c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const ccl::RegisterBlock { + Self::PTR + } +} +impl Deref for CCL { + type Target = ccl::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for CCL { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("CCL").finish() + } +} +#[doc = "Configurable Custom Logic"] +pub mod ccl; +#[doc = "Digital Analog Converter"] +pub struct DAC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for DAC {} +impl DAC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const dac::RegisterBlock = 0x4200_5400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const dac::RegisterBlock { + Self::PTR + } +} +impl Deref for DAC { + type Target = dac::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for DAC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("DAC").finish() + } +} +#[doc = "Digital Analog Converter"] +pub mod dac; +#[doc = "Divide and Square Root Accelerator"] +pub struct DIVAS { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for DIVAS {} +impl DIVAS { + #[doc = r"Pointer to the register block"] + pub const PTR: *const divas::RegisterBlock = 0x4800_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const divas::RegisterBlock { + Self::PTR + } +} +impl Deref for DIVAS { + type Target = divas::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for DIVAS { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("DIVAS").finish() + } +} +#[doc = "Divide and Square Root Accelerator"] +pub mod divas; +#[doc = "Direct Memory Access Controller"] +pub struct DMAC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for DMAC {} +impl DMAC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const dmac::RegisterBlock = 0x4100_6000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const dmac::RegisterBlock { + Self::PTR + } +} +impl Deref for DMAC { + type Target = dmac::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for DMAC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("DMAC").finish() + } +} +#[doc = "Direct Memory Access Controller"] +pub mod dmac; +#[doc = "Device Service Unit"] +pub struct DSU { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for DSU {} +impl DSU { + #[doc = r"Pointer to the register block"] + pub const PTR: *const dsu::RegisterBlock = 0x4100_2000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const dsu::RegisterBlock { + Self::PTR + } +} +impl Deref for DSU { + type Target = dsu::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for DSU { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("DSU").finish() + } +} +#[doc = "Device Service Unit"] +pub mod dsu; +#[doc = "External Interrupt Controller"] +pub struct EIC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for EIC {} +impl EIC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const eic::RegisterBlock = 0x4000_2800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const eic::RegisterBlock { + Self::PTR + } +} +impl Deref for EIC { + type Target = eic::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for EIC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("EIC").finish() + } +} +#[doc = "External Interrupt Controller"] +pub mod eic; +#[doc = "Event System Interface"] +pub struct EVSYS { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for EVSYS {} +impl EVSYS { + #[doc = r"Pointer to the register block"] + pub const PTR: *const evsys::RegisterBlock = 0x4200_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const evsys::RegisterBlock { + Self::PTR + } +} +impl Deref for EVSYS { + type Target = evsys::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for EVSYS { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("EVSYS").finish() + } +} +#[doc = "Event System Interface"] +pub mod evsys; +#[doc = "Frequency Meter"] +pub struct FREQM { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for FREQM {} +impl FREQM { + #[doc = r"Pointer to the register block"] + pub const PTR: *const freqm::RegisterBlock = 0x4000_2c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const freqm::RegisterBlock { + Self::PTR + } +} +impl Deref for FREQM { + type Target = freqm::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for FREQM { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("FREQM").finish() + } +} +#[doc = "Frequency Meter"] +pub mod freqm; +#[doc = "Generic Clock Generator"] +pub struct GCLK { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for GCLK {} +impl GCLK { + #[doc = r"Pointer to the register block"] + pub const PTR: *const gclk::RegisterBlock = 0x4000_1c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const gclk::RegisterBlock { + Self::PTR + } +} +impl Deref for GCLK { + type Target = gclk::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for GCLK { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("GCLK").finish() + } +} +#[doc = "Generic Clock Generator"] +pub mod gclk; +#[doc = "HSB Matrix"] +pub struct HMATRIXHS { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for HMATRIXHS {} +impl HMATRIXHS { + #[doc = r"Pointer to the register block"] + pub const PTR: *const hmatrixhs::RegisterBlock = 0x4100_a000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const hmatrixhs::RegisterBlock { + Self::PTR + } +} +impl Deref for HMATRIXHS { + type Target = hmatrixhs::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for HMATRIXHS { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("HMATRIXHS").finish() + } +} +#[doc = "HSB Matrix"] +pub mod hmatrixhs; +#[doc = "Main Clock"] +pub struct MCLK { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for MCLK {} +impl MCLK { + #[doc = r"Pointer to the register block"] + pub const PTR: *const mclk::RegisterBlock = 0x4000_0800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const mclk::RegisterBlock { + Self::PTR + } +} +impl Deref for MCLK { + type Target = mclk::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for MCLK { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("MCLK").finish() + } +} +#[doc = "Main Clock"] +pub mod mclk; +#[doc = "Cortex-M0+ Micro-Trace Buffer"] +pub struct MTB { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for MTB {} +impl MTB { + #[doc = r"Pointer to the register block"] + pub const PTR: *const mtb::RegisterBlock = 0x4100_8000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const mtb::RegisterBlock { + Self::PTR + } +} +impl Deref for MTB { + type Target = mtb::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for MTB { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("MTB").finish() + } +} +#[doc = "Cortex-M0+ Micro-Trace Buffer"] +pub mod mtb; +#[doc = "Non-Volatile Memory Controller"] +pub struct NVMCTRL { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for NVMCTRL {} +impl NVMCTRL { + #[doc = r"Pointer to the register block"] + pub const PTR: *const nvmctrl::RegisterBlock = 0x4100_4000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const nvmctrl::RegisterBlock { + Self::PTR + } +} +impl Deref for NVMCTRL { + type Target = nvmctrl::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for NVMCTRL { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("NVMCTRL").finish() + } +} +#[doc = "Non-Volatile Memory Controller"] +pub mod nvmctrl; +#[doc = "Oscillators Control"] +pub struct OSCCTRL { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for OSCCTRL {} +impl OSCCTRL { + #[doc = r"Pointer to the register block"] + pub const PTR: *const oscctrl::RegisterBlock = 0x4000_1000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const oscctrl::RegisterBlock { + Self::PTR + } +} +impl Deref for OSCCTRL { + type Target = oscctrl::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for OSCCTRL { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("OSCCTRL").finish() + } +} +#[doc = "Oscillators Control"] +pub mod oscctrl; +#[doc = "32k Oscillators Control"] +pub struct OSC32KCTRL { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for OSC32KCTRL {} +impl OSC32KCTRL { + #[doc = r"Pointer to the register block"] + pub const PTR: *const osc32kctrl::RegisterBlock = 0x4000_1400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const osc32kctrl::RegisterBlock { + Self::PTR + } +} +impl Deref for OSC32KCTRL { + type Target = osc32kctrl::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for OSC32KCTRL { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("OSC32KCTRL").finish() + } +} +#[doc = "32k Oscillators Control"] +pub mod osc32kctrl; +#[doc = "Peripheral Access Controller"] +pub struct PAC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for PAC {} +impl PAC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const pac::RegisterBlock = 0x4000_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const pac::RegisterBlock { + Self::PTR + } +} +impl Deref for PAC { + type Target = pac::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for PAC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("PAC").finish() + } +} +#[doc = "Peripheral Access Controller"] +pub mod pac; +#[doc = "Power Manager"] +pub struct PM { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for PM {} +impl PM { + #[doc = r"Pointer to the register block"] + pub const PTR: *const pm::RegisterBlock = 0x4000_0400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const pm::RegisterBlock { + Self::PTR + } +} +impl Deref for PM { + type Target = pm::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for PM { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("PM").finish() + } +} +#[doc = "Power Manager"] +pub mod pm; +#[doc = "Port Module"] +pub struct PORT { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for PORT {} +impl PORT { + #[doc = r"Pointer to the register block"] + pub const PTR: *const port::RegisterBlock = 0x4100_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const port::RegisterBlock { + Self::PTR + } +} +impl Deref for PORT { + type Target = port::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for PORT { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("PORT").finish() + } +} +#[doc = "Port Module"] +pub mod port; +#[doc = "Port Module"] +pub struct PORT_IOBUS { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for PORT_IOBUS {} +impl PORT_IOBUS { + #[doc = r"Pointer to the register block"] + pub const PTR: *const port::RegisterBlock = 0x6000_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const port::RegisterBlock { + Self::PTR + } +} +impl Deref for PORT_IOBUS { + type Target = port::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for PORT_IOBUS { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("PORT_IOBUS").finish() + } +} +#[doc = "Reset Controller"] +pub struct RSTC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for RSTC {} +impl RSTC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const rstc::RegisterBlock = 0x4000_0c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const rstc::RegisterBlock { + Self::PTR + } +} +impl Deref for RSTC { + type Target = rstc::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for RSTC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("RSTC").finish() + } +} +#[doc = "Reset Controller"] +pub mod rstc; +#[doc = "Real-Time Counter"] +pub struct RTC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for RTC {} +impl RTC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const rtc::RegisterBlock = 0x4000_2400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const rtc::RegisterBlock { + Self::PTR + } +} +impl Deref for RTC { + type Target = rtc::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for RTC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("RTC").finish() + } +} +#[doc = "Real-Time Counter"] +pub mod rtc; +#[doc = "Sigma-Delta Analog Digital Converter"] +pub struct SDADC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SDADC {} +impl SDADC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sdadc::RegisterBlock = 0x4200_4c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sdadc::RegisterBlock { + Self::PTR + } +} +impl Deref for SDADC { + type Target = sdadc::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SDADC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SDADC").finish() + } +} +#[doc = "Sigma-Delta Analog Digital Converter"] +pub mod sdadc; +#[doc = "Serial Communication Interface"] +pub struct SERCOM0 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM0 {} +impl SERCOM0 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_0400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM0 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM0 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM0").finish() + } +} +#[doc = "Serial Communication Interface"] +pub mod sercom0; +#[doc = "Serial Communication Interface"] +pub struct SERCOM1 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM1 {} +impl SERCOM1 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_0800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM1 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM1 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM1").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM2 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM2 {} +impl SERCOM2 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_0c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM2 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM2 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM2").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM3 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM3 {} +impl SERCOM3 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_1000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM3 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM3 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM3").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM4 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM4 {} +impl SERCOM4 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_1400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM4 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM4 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM4").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM5 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM5 {} +impl SERCOM5 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4200_1800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM5 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM5 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM5").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM6 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM6 {} +impl SERCOM6 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4300_0000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM6 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM6 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM6").finish() + } +} +#[doc = "Serial Communication Interface"] +pub struct SERCOM7 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SERCOM7 {} +impl SERCOM7 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sercom0::RegisterBlock = 0x4300_0400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sercom0::RegisterBlock { + Self::PTR + } +} +impl Deref for SERCOM7 { + type Target = sercom0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SERCOM7 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SERCOM7").finish() + } +} +#[doc = "Supply Controller"] +pub struct SUPC { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SUPC {} +impl SUPC { + #[doc = r"Pointer to the register block"] + pub const PTR: *const supc::RegisterBlock = 0x4000_1800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const supc::RegisterBlock { + Self::PTR + } +} +impl Deref for SUPC { + type Target = supc::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SUPC { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SUPC").finish() + } +} +#[doc = "Supply Controller"] +pub mod supc; +#[doc = "Basic Timer Counter"] +pub struct TC0 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC0 {} +impl TC0 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4200_3000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC0 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC0 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC0").finish() + } +} +#[doc = "Basic Timer Counter"] +pub mod tc0; +#[doc = "Basic Timer Counter"] +pub struct TC1 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC1 {} +impl TC1 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4200_3400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC1 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC1 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC1").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC2 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC2 {} +impl TC2 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4200_3800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC2 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC2 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC2").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC3 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC3 {} +impl TC3 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4200_3c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC3 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC3 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC3").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC4 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC4 {} +impl TC4 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4200_4000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC4 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC4 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC4").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC5 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC5 {} +impl TC5 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4300_0800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC5 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC5 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC5").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC6 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC6 {} +impl TC6 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4300_0c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC6 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC6 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC6").finish() + } +} +#[doc = "Basic Timer Counter"] +pub struct TC7 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TC7 {} +impl TC7 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tc0::RegisterBlock = 0x4300_1000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TC7 { + type Target = tc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TC7 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TC7").finish() + } +} +#[doc = "Timer Counter Control"] +pub struct TCC0 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TCC0 {} +impl TCC0 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tcc0::RegisterBlock = 0x4200_2400 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tcc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TCC0 { + type Target = tcc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TCC0 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TCC0").finish() + } +} +#[doc = "Timer Counter Control"] +pub mod tcc0; +#[doc = "Timer Counter Control"] +pub struct TCC1 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TCC1 {} +impl TCC1 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tcc0::RegisterBlock = 0x4200_2800 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tcc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TCC1 { + type Target = tcc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TCC1 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TCC1").finish() + } +} +#[doc = "Timer Counter Control"] +pub struct TCC2 { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TCC2 {} +impl TCC2 { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tcc0::RegisterBlock = 0x4200_2c00 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tcc0::RegisterBlock { + Self::PTR + } +} +impl Deref for TCC2 { + type Target = tcc0::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TCC2 { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TCC2").finish() + } +} +#[doc = "Temperature Sensor"] +pub struct TSENS { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for TSENS {} +impl TSENS { + #[doc = r"Pointer to the register block"] + pub const PTR: *const tsens::RegisterBlock = 0x4000_3000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const tsens::RegisterBlock { + Self::PTR + } +} +impl Deref for TSENS { + type Target = tsens::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for TSENS { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("TSENS").finish() + } +} +#[doc = "Temperature Sensor"] +pub mod tsens; +#[doc = "Watchdog Timer"] +pub struct WDT { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for WDT {} +impl WDT { + #[doc = r"Pointer to the register block"] + pub const PTR: *const wdt::RegisterBlock = 0x4000_2000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const wdt::RegisterBlock { + Self::PTR + } +} +impl Deref for WDT { + type Target = wdt::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for WDT { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("WDT").finish() + } +} +#[doc = "Watchdog Timer"] +pub mod wdt; +#[doc = "System timer"] +pub struct SYSTICK { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SYSTICK {} +impl SYSTICK { + #[doc = r"Pointer to the register block"] + pub const PTR: *const sys_tick::RegisterBlock = 0xe000_e010 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const sys_tick::RegisterBlock { + Self::PTR + } +} +impl Deref for SYSTICK { + type Target = sys_tick::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SYSTICK { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SYSTICK").finish() + } +} +#[doc = "System timer"] +pub mod sys_tick; +#[doc = "System Control Registers"] +pub struct SYSTEMCONTROL { + _marker: PhantomData<*const ()>, +} +unsafe impl Send for SYSTEMCONTROL {} +impl SYSTEMCONTROL { + #[doc = r"Pointer to the register block"] + pub const PTR: *const system_control::RegisterBlock = 0xe000_e000 as *const _; + #[doc = r"Return the pointer to the register block"] + #[inline(always)] + pub const fn ptr() -> *const system_control::RegisterBlock { + Self::PTR + } +} +impl Deref for SYSTEMCONTROL { + type Target = system_control::RegisterBlock; + #[inline(always)] + fn deref(&self) -> &Self::Target { + unsafe { &*Self::PTR } + } +} +impl core::fmt::Debug for SYSTEMCONTROL { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.debug_struct("SYSTEMCONTROL").finish() + } +} +#[doc = "System Control Registers"] +pub mod system_control; +#[no_mangle] +static mut DEVICE_PERIPHERALS: bool = false; +#[doc = r"All the peripherals"] +#[allow(non_snake_case)] +pub struct Peripherals { + #[doc = "AC"] + pub AC: AC, + #[doc = "ADC0"] + pub ADC0: ADC0, + #[doc = "ADC1"] + pub ADC1: ADC1, + #[doc = "CAN0"] + pub CAN0: CAN0, + #[doc = "CAN1"] + pub CAN1: CAN1, + #[doc = "CCL"] + pub CCL: CCL, + #[doc = "DAC"] + pub DAC: DAC, + #[doc = "DIVAS"] + pub DIVAS: DIVAS, + #[doc = "DMAC"] + pub DMAC: DMAC, + #[doc = "DSU"] + pub DSU: DSU, + #[doc = "EIC"] + pub EIC: EIC, + #[doc = "EVSYS"] + pub EVSYS: EVSYS, + #[doc = "FREQM"] + pub FREQM: FREQM, + #[doc = "GCLK"] + pub GCLK: GCLK, + #[doc = "HMATRIXHS"] + pub HMATRIXHS: HMATRIXHS, + #[doc = "MCLK"] + pub MCLK: MCLK, + #[doc = "MTB"] + pub MTB: MTB, + #[doc = "NVMCTRL"] + pub NVMCTRL: NVMCTRL, + #[doc = "OSCCTRL"] + pub OSCCTRL: OSCCTRL, + #[doc = "OSC32KCTRL"] + pub OSC32KCTRL: OSC32KCTRL, + #[doc = "PAC"] + pub PAC: PAC, + #[doc = "PM"] + pub PM: PM, + #[doc = "PORT"] + pub PORT: PORT, + #[doc = "PORT_IOBUS"] + pub PORT_IOBUS: PORT_IOBUS, + #[doc = "RSTC"] + pub RSTC: RSTC, + #[doc = "RTC"] + pub RTC: RTC, + #[doc = "SDADC"] + pub SDADC: SDADC, + #[doc = "SERCOM0"] + pub SERCOM0: SERCOM0, + #[doc = "SERCOM1"] + pub SERCOM1: SERCOM1, + #[doc = "SERCOM2"] + pub SERCOM2: SERCOM2, + #[doc = "SERCOM3"] + pub SERCOM3: SERCOM3, + #[doc = "SERCOM4"] + pub SERCOM4: SERCOM4, + #[doc = "SERCOM5"] + pub SERCOM5: SERCOM5, + #[doc = "SERCOM6"] + pub SERCOM6: SERCOM6, + #[doc = "SERCOM7"] + pub SERCOM7: SERCOM7, + #[doc = "SUPC"] + pub SUPC: SUPC, + #[doc = "TC0"] + pub TC0: TC0, + #[doc = "TC1"] + pub TC1: TC1, + #[doc = "TC2"] + pub TC2: TC2, + #[doc = "TC3"] + pub TC3: TC3, + #[doc = "TC4"] + pub TC4: TC4, + #[doc = "TC5"] + pub TC5: TC5, + #[doc = "TC6"] + pub TC6: TC6, + #[doc = "TC7"] + pub TC7: TC7, + #[doc = "TCC0"] + pub TCC0: TCC0, + #[doc = "TCC1"] + pub TCC1: TCC1, + #[doc = "TCC2"] + pub TCC2: TCC2, + #[doc = "TSENS"] + pub TSENS: TSENS, + #[doc = "WDT"] + pub WDT: WDT, + #[doc = "SYSTICK"] + pub SYSTICK: SYSTICK, + #[doc = "SYSTEMCONTROL"] + pub SYSTEMCONTROL: SYSTEMCONTROL, +} +impl Peripherals { + #[doc = r"Returns all the peripherals *once*"] + #[inline] + pub fn take() -> Option<Self> { + cortex_m::interrupt::free(|_| { + if unsafe { DEVICE_PERIPHERALS } { + None + } else { + Some(unsafe { Peripherals::steal() }) + } + }) + } + #[doc = r"Unchecked version of `Peripherals::take`"] + #[inline] + pub unsafe fn steal() -> Self { + DEVICE_PERIPHERALS = true; + Peripherals { + AC: AC { + _marker: PhantomData, + }, + ADC0: ADC0 { + _marker: PhantomData, + }, + ADC1: ADC1 { + _marker: PhantomData, + }, + CAN0: CAN0 { + _marker: PhantomData, + }, + CAN1: CAN1 { + _marker: PhantomData, + }, + CCL: CCL { + _marker: PhantomData, + }, + DAC: DAC { + _marker: PhantomData, + }, + DIVAS: DIVAS { + _marker: PhantomData, + }, + DMAC: DMAC { + _marker: PhantomData, + }, + DSU: DSU { + _marker: PhantomData, + }, + EIC: EIC { + _marker: PhantomData, + }, + EVSYS: EVSYS { + _marker: PhantomData, + }, + FREQM: FREQM { + _marker: PhantomData, + }, + GCLK: GCLK { + _marker: PhantomData, + }, + HMATRIXHS: HMATRIXHS { + _marker: PhantomData, + }, + MCLK: MCLK { + _marker: PhantomData, + }, + MTB: MTB { + _marker: PhantomData, + }, + NVMCTRL: NVMCTRL { + _marker: PhantomData, + }, + OSCCTRL: OSCCTRL { + _marker: PhantomData, + }, + OSC32KCTRL: OSC32KCTRL { + _marker: PhantomData, + }, + PAC: PAC { + _marker: PhantomData, + }, + PM: PM { + _marker: PhantomData, + }, + PORT: PORT { + _marker: PhantomData, + }, + PORT_IOBUS: PORT_IOBUS { + _marker: PhantomData, + }, + RSTC: RSTC { + _marker: PhantomData, + }, + RTC: RTC { + _marker: PhantomData, + }, + SDADC: SDADC { + _marker: PhantomData, + }, + SERCOM0: SERCOM0 { + _marker: PhantomData, + }, + SERCOM1: SERCOM1 { + _marker: PhantomData, + }, + SERCOM2: SERCOM2 { + _marker: PhantomData, + }, + SERCOM3: SERCOM3 { + _marker: PhantomData, + }, + SERCOM4: SERCOM4 { + _marker: PhantomData, + }, + SERCOM5: SERCOM5 { + _marker: PhantomData, + }, + SERCOM6: SERCOM6 { + _marker: PhantomData, + }, + SERCOM7: SERCOM7 { + _marker: PhantomData, + }, + SUPC: SUPC { + _marker: PhantomData, + }, + TC0: TC0 { + _marker: PhantomData, + }, + TC1: TC1 { + _marker: PhantomData, + }, + TC2: TC2 { + _marker: PhantomData, + }, + TC3: TC3 { + _marker: PhantomData, + }, + TC4: TC4 { + _marker: PhantomData, + }, + TC5: TC5 { + _marker: PhantomData, + }, + TC6: TC6 { + _marker: PhantomData, + }, + TC7: TC7 { + _marker: PhantomData, + }, + TCC0: TCC0 { + _marker: PhantomData, + }, + TCC1: TCC1 { + _marker: PhantomData, + }, + TCC2: TCC2 { + _marker: PhantomData, + }, + TSENS: TSENS { + _marker: PhantomData, + }, + WDT: WDT { + _marker: PhantomData, + }, + SYSTICK: SYSTICK { + _marker: PhantomData, + }, + SYSTEMCONTROL: SYSTEMCONTROL { + _marker: PhantomData, + }, + } + } +} |
