esp32 0.7.0

Peripheral access crate for the ESP32
Documentation
#![doc = "Peripheral access API for ESP32 microcontrollers (generated using svd2rust v0.17.0 (714ed98 2020-06-09))\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.17.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]
extern crate bare_metal;
extern crate vcell;
extern crate xtensa_lx6;
#[cfg(feature = "rt")]
extern crate xtensa_lx6_rt;
use core::marker::PhantomData;
use core::ops::Deref;
#[doc = r"Number available in the NVIC for configuring priority"]
pub const NVIC_PRIO_BITS: u8 = 3;
#[cfg(feature = "rt")]
extern "C" {
    fn WIFI_MAC_INTR();
    fn WIFI_MAC_NMI();
    fn WIFI_BB_INTR();
    fn BT_MAC_INTR();
    fn BT_BB_INTR();
    fn BT_BB_NMI();
    fn RWBT_INTR();
    fn RWBLE_INTR();
    fn RWBT_NMI();
    fn RWBLE_NMI();
    fn SLC0_INTR();
    fn SLC1_INTR();
    fn UHCI0_INTR();
    fn UHCI1_INTR();
    fn TG0_T0_LEVEL_INTR();
    fn TG0_T1_LEVEL_INTR();
    fn TG0_WDT_LEVEL_INTR();
    fn TG0_LACT_LEVEL_INTR();
    fn TG1_T0_LEVEL_INTR();
    fn TG1_T1_LEVEL_INTR();
    fn TG1_WDT_LEVEL_INTR();
    fn TG1_LACT_LEVEL_INTR();
    fn GPIO_INTR();
    fn GPIO_NMI();
    fn FROM_CPU_INTR0();
    fn FROM_CPU_INTR1();
    fn FROM_CPU_INTR2();
    fn FROM_CPU_INTR3();
    fn SPI0_INTR();
    fn SPI1_INTR();
    fn SPI2_INTR();
    fn SPI3_INTR();
    fn I2S0_INTR();
    fn I2S1_INTR();
    fn UART0_INTR();
    fn UART1_INTR();
    fn UART2_INTR();
    fn SDIO_HOST_INTR();
    fn ETH_MAC_INTR();
    fn PWM0_INTR();
    fn PWM1_INTR();
    fn PWM2_INTR();
    fn PWM3_INTR();
    fn LEDC_INTR();
    fn EFUSE_INTR();
    fn CAN_INTR();
    fn RTC_CORE_INTR();
    fn RMT_INTR();
    fn PCNT_INTR();
    fn I2C_EXT0_INTR();
    fn I2C_EXT1_INTR();
    fn RSA_INTR();
    fn SPI1_DMA_INTR();
    fn SPI2_DMA_INTR();
    fn SPI3_DMA_INTR();
    fn WDT_INTR();
    fn TIMER1_INTR();
    fn TIMER2_INTR();
    fn TG0_T0_EDGE_INTR();
    fn TG0_T1_EDGE_INTR();
    fn TG0_WDT_EDGE_INTR();
    fn TG0_LACT_EDGE_INTR();
    fn TG1_T0_EDGE_INTR();
    fn TG1_T1_EDGE_INTR();
    fn TG1_WDT_EDGE_INTR();
    fn TG1_LACT_EDGE_INTR();
    fn MMU_IA_INTR();
    fn MPU_IA_INTR();
    fn CACHE_IA_INTR();
    fn INTERNAL_TIMER0_INTR();
    fn INTERNAL_SOFTWARE_LEVEL_1_INTR();
    fn INTERNAL_PROFILING_INTR();
    fn INTERNAL_TIMER1_INTR();
    fn INTERNAL_TIMER2_INTR();
    fn INTERNAL_SOFTWARE_LEVEL_3_INTR();
}
#[doc(hidden)]
pub union Vector {
    pub _handler: unsafe extern "C" fn(),
    _reserved: u32,
}
#[cfg(feature = "rt")]
#[doc(hidden)]
pub static __INTERRUPTS: [Vector; 75] = [
    Vector {
        _handler: WIFI_MAC_INTR,
    },
    Vector {
        _handler: WIFI_MAC_NMI,
    },
    Vector {
        _handler: WIFI_BB_INTR,
    },
    Vector {
        _handler: BT_MAC_INTR,
    },
    Vector {
        _handler: BT_BB_INTR,
    },
    Vector {
        _handler: BT_BB_NMI,
    },
    Vector {
        _handler: RWBT_INTR,
    },
    Vector {
        _handler: RWBLE_INTR,
    },
    Vector { _handler: RWBT_NMI },
    Vector {
        _handler: RWBLE_NMI,
    },
    Vector {
        _handler: SLC0_INTR,
    },
    Vector {
        _handler: SLC1_INTR,
    },
    Vector {
        _handler: UHCI0_INTR,
    },
    Vector {
        _handler: UHCI1_INTR,
    },
    Vector {
        _handler: TG0_T0_LEVEL_INTR,
    },
    Vector {
        _handler: TG0_T1_LEVEL_INTR,
    },
    Vector {
        _handler: TG0_WDT_LEVEL_INTR,
    },
    Vector {
        _handler: TG0_LACT_LEVEL_INTR,
    },
    Vector {
        _handler: TG1_T0_LEVEL_INTR,
    },
    Vector {
        _handler: TG1_T1_LEVEL_INTR,
    },
    Vector {
        _handler: TG1_WDT_LEVEL_INTR,
    },
    Vector {
        _handler: TG1_LACT_LEVEL_INTR,
    },
    Vector {
        _handler: GPIO_INTR,
    },
    Vector { _handler: GPIO_NMI },
    Vector {
        _handler: FROM_CPU_INTR0,
    },
    Vector {
        _handler: FROM_CPU_INTR1,
    },
    Vector {
        _handler: FROM_CPU_INTR2,
    },
    Vector {
        _handler: FROM_CPU_INTR3,
    },
    Vector {
        _handler: SPI0_INTR,
    },
    Vector {
        _handler: SPI1_INTR,
    },
    Vector {
        _handler: SPI2_INTR,
    },
    Vector {
        _handler: SPI3_INTR,
    },
    Vector {
        _handler: I2S0_INTR,
    },
    Vector {
        _handler: I2S1_INTR,
    },
    Vector {
        _handler: UART0_INTR,
    },
    Vector {
        _handler: UART1_INTR,
    },
    Vector {
        _handler: UART2_INTR,
    },
    Vector {
        _handler: SDIO_HOST_INTR,
    },
    Vector {
        _handler: ETH_MAC_INTR,
    },
    Vector {
        _handler: PWM0_INTR,
    },
    Vector {
        _handler: PWM1_INTR,
    },
    Vector {
        _handler: PWM2_INTR,
    },
    Vector {
        _handler: PWM3_INTR,
    },
    Vector {
        _handler: LEDC_INTR,
    },
    Vector {
        _handler: EFUSE_INTR,
    },
    Vector { _handler: CAN_INTR },
    Vector {
        _handler: RTC_CORE_INTR,
    },
    Vector { _handler: RMT_INTR },
    Vector {
        _handler: PCNT_INTR,
    },
    Vector {
        _handler: I2C_EXT0_INTR,
    },
    Vector {
        _handler: I2C_EXT1_INTR,
    },
    Vector { _handler: RSA_INTR },
    Vector {
        _handler: SPI1_DMA_INTR,
    },
    Vector {
        _handler: SPI2_DMA_INTR,
    },
    Vector {
        _handler: SPI3_DMA_INTR,
    },
    Vector { _handler: WDT_INTR },
    Vector {
        _handler: TIMER1_INTR,
    },
    Vector {
        _handler: TIMER2_INTR,
    },
    Vector {
        _handler: TG0_T0_EDGE_INTR,
    },
    Vector {
        _handler: TG0_T1_EDGE_INTR,
    },
    Vector {
        _handler: TG0_WDT_EDGE_INTR,
    },
    Vector {
        _handler: TG0_LACT_EDGE_INTR,
    },
    Vector {
        _handler: TG1_T0_EDGE_INTR,
    },
    Vector {
        _handler: TG1_T1_EDGE_INTR,
    },
    Vector {
        _handler: TG1_WDT_EDGE_INTR,
    },
    Vector {
        _handler: TG1_LACT_EDGE_INTR,
    },
    Vector {
        _handler: MMU_IA_INTR,
    },
    Vector {
        _handler: MPU_IA_INTR,
    },
    Vector {
        _handler: CACHE_IA_INTR,
    },
    Vector {
        _handler: INTERNAL_TIMER0_INTR,
    },
    Vector {
        _handler: INTERNAL_SOFTWARE_LEVEL_1_INTR,
    },
    Vector {
        _handler: INTERNAL_PROFILING_INTR,
    },
    Vector {
        _handler: INTERNAL_TIMER1_INTR,
    },
    Vector {
        _handler: INTERNAL_TIMER2_INTR,
    },
    Vector {
        _handler: INTERNAL_SOFTWARE_LEVEL_3_INTR,
    },
];
#[doc(hidden)]
pub mod interrupt;
pub use self::interrupt::Interrupt;
#[allow(unused_imports)]
use generic::*;
#[doc = r"Common register and bit access and modify traits"]
pub mod generic;
#[doc = "AES"]
pub struct AES {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for AES {}
impl AES {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const aes::RegisterBlock {
        0x3ff0_1000 as *const _
    }
}
impl Deref for AES {
    type Target = aes::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*AES::ptr() }
    }
}
#[doc = "AES"]
pub mod aes;
#[doc = "HINF"]
pub struct HINF {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for HINF {}
impl HINF {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const hinf::RegisterBlock {
        0x3ff4_b000 as *const _
    }
}
impl Deref for HINF {
    type Target = hinf::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*HINF::ptr() }
    }
}
#[doc = "HINF"]
pub mod hinf;
#[doc = "SPI"]
pub struct SPI {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SPI {}
impl SPI {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const spi::RegisterBlock {
        0 as *const _
    }
}
impl Deref for SPI {
    type Target = spi::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI::ptr() }
    }
}
#[doc = "SPI"]
pub mod spi;
#[doc = "I2C1"]
pub struct I2C1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2C1 {}
impl I2C1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2c::RegisterBlock {
        0x3ff6_7000 as *const _
    }
}
impl Deref for I2C1 {
    type Target = i2c::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C1::ptr() }
    }
}
#[doc = "I2C"]
pub struct I2C {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2C {}
impl I2C {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2c::RegisterBlock {
        0 as *const _
    }
}
impl Deref for I2C {
    type Target = i2c::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C::ptr() }
    }
}
#[doc = "I2C"]
pub mod i2c;
#[doc = "EFUSE"]
pub struct EFUSE {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for EFUSE {}
impl EFUSE {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const efuse::RegisterBlock {
        0x3ff5_a000 as *const _
    }
}
impl Deref for EFUSE {
    type Target = efuse::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*EFUSE::ptr() }
    }
}
#[doc = "EFUSE"]
pub mod efuse;
#[doc = "I2C0"]
pub struct I2C0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2C0 {}
impl I2C0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2c::RegisterBlock {
        0x3ff5_3000 as *const _
    }
}
impl Deref for I2C0 {
    type Target = i2c::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C0::ptr() }
    }
}
#[doc = "PCNT"]
pub struct PCNT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PCNT {}
impl PCNT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const pcnt::RegisterBlock {
        0x3ff5_7000 as *const _
    }
}
impl Deref for PCNT {
    type Target = pcnt::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*PCNT::ptr() }
    }
}
#[doc = "PCNT"]
pub mod pcnt;
#[doc = "RMT"]
pub struct RMT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for RMT {}
impl RMT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const rmt::RegisterBlock {
        0x3ff5_6000 as *const _
    }
}
impl Deref for RMT {
    type Target = rmt::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*RMT::ptr() }
    }
}
#[doc = "RMT"]
pub mod rmt;
#[doc = "GPIO"]
pub struct GPIO {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for GPIO {}
impl GPIO {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const gpio::RegisterBlock {
        0x3ff4_4000 as *const _
    }
}
impl Deref for GPIO {
    type Target = gpio::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*GPIO::ptr() }
    }
}
#[doc = "GPIO"]
pub mod gpio;
#[doc = "UHCI"]
pub struct UHCI {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UHCI {}
impl UHCI {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uhci::RegisterBlock {
        0 as *const _
    }
}
impl Deref for UHCI {
    type Target = uhci::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UHCI::ptr() }
    }
}
#[doc = "UHCI"]
pub mod uhci;
#[doc = "SLCHOST"]
pub struct SLCHOST {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SLCHOST {}
impl SLCHOST {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const slchost::RegisterBlock {
        0x3ff5_5000 as *const _
    }
}
impl Deref for SLCHOST {
    type Target = slchost::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SLCHOST::ptr() }
    }
}
#[doc = "SLCHOST"]
pub mod slchost;
#[doc = "SLC"]
pub struct SLC {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SLC {}
impl SLC {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const slc::RegisterBlock {
        0x3ff5_8000 as *const _
    }
}
impl Deref for SLC {
    type Target = slc::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SLC::ptr() }
    }
}
#[doc = "SLC"]
pub mod slc;
#[doc = "TIMG1"]
pub struct TIMG1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for TIMG1 {}
impl TIMG1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const timg::RegisterBlock {
        0x3ff6_0000 as *const _
    }
}
impl Deref for TIMG1 {
    type Target = timg::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*TIMG1::ptr() }
    }
}
#[doc = "PWM1"]
pub struct PWM1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PWM1 {}
impl PWM1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mcpwm::RegisterBlock {
        0x3ff6_c000 as *const _
    }
}
impl Deref for PWM1 {
    type Target = mcpwm::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*PWM1::ptr() }
    }
}
#[doc = "RTCCNTL"]
pub struct RTCCNTL {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for RTCCNTL {}
impl RTCCNTL {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const rtccntl::RegisterBlock {
        0x3ff4_8000 as *const _
    }
}
impl Deref for RTCCNTL {
    type Target = rtccntl::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*RTCCNTL::ptr() }
    }
}
#[doc = "RTCCNTL"]
pub mod rtccntl;
#[doc = "PWM2"]
pub struct PWM2 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PWM2 {}
impl PWM2 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mcpwm::RegisterBlock {
        0x3ff6_f000 as *const _
    }
}
impl Deref for PWM2 {
    type Target = mcpwm::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*PWM2::ptr() }
    }
}
#[doc = "UHCI0"]
pub struct UHCI0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UHCI0 {}
impl UHCI0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uhci::RegisterBlock {
        0x3ff5_4000 as *const _
    }
}
impl Deref for UHCI0 {
    type Target = uhci::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UHCI0::ptr() }
    }
}
#[doc = "SENS"]
pub struct SENS {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SENS {}
impl SENS {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const sens::RegisterBlock {
        0x3ff4_8800 as *const _
    }
}
impl Deref for SENS {
    type Target = sens::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SENS::ptr() }
    }
}
#[doc = "SENS"]
pub mod sens;
#[doc = "RTCIO"]
pub struct RTCIO {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for RTCIO {}
impl RTCIO {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const rtcio::RegisterBlock {
        0x3ff4_8400 as *const _
    }
}
impl Deref for RTCIO {
    type Target = rtcio::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*RTCIO::ptr() }
    }
}
#[doc = "RTCIO"]
pub mod rtcio;
#[doc = "DPORT"]
pub struct DPORT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for DPORT {}
impl DPORT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const dport::RegisterBlock {
        0x3ff0_0000 as *const _
    }
}
impl Deref for DPORT {
    type Target = dport::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*DPORT::ptr() }
    }
}
#[doc = "DPORT"]
pub mod dport;
#[doc = "SPI3"]
pub struct SPI3 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SPI3 {}
impl SPI3 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const spi::RegisterBlock {
        0x3ff6_5000 as *const _
    }
}
impl Deref for SPI3 {
    type Target = spi::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI3::ptr() }
    }
}
#[doc = "UART2"]
pub struct UART2 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UART2 {}
impl UART2 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uart::RegisterBlock {
        0x3ff6_e000 as *const _
    }
}
impl Deref for UART2 {
    type Target = uart::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UART2::ptr() }
    }
}
#[doc = "TIMG"]
pub struct TIMG {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for TIMG {}
impl TIMG {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const timg::RegisterBlock {
        0 as *const _
    }
}
impl Deref for TIMG {
    type Target = timg::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*TIMG::ptr() }
    }
}
#[doc = "TIMG"]
pub mod timg;
#[doc = "PWM3"]
pub struct PWM3 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PWM3 {}
impl PWM3 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mcpwm::RegisterBlock {
        0x3ff7_0000 as *const _
    }
}
impl Deref for PWM3 {
    type Target = mcpwm::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*PWM3::ptr() }
    }
}
#[doc = "TIMG0"]
pub struct TIMG0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for TIMG0 {}
impl TIMG0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const timg::RegisterBlock {
        0x3ff5_f000 as *const _
    }
}
impl Deref for TIMG0 {
    type Target = timg::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*TIMG0::ptr() }
    }
}
#[doc = "GPIO_SD"]
pub struct GPIO_SD {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for GPIO_SD {}
impl GPIO_SD {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const gpio_sd::RegisterBlock {
        0x3ff4_4f00 as *const _
    }
}
impl Deref for GPIO_SD {
    type Target = gpio_sd::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*GPIO_SD::ptr() }
    }
}
#[doc = "GPIO_SD"]
pub mod gpio_sd;
#[doc = "SPI0"]
pub struct SPI0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SPI0 {}
impl SPI0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const spi::RegisterBlock {
        0x3ff4_3000 as *const _
    }
}
impl Deref for SPI0 {
    type Target = spi::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI0::ptr() }
    }
}
#[doc = "PWM0"]
pub struct PWM0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PWM0 {}
impl PWM0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mcpwm::RegisterBlock {
        0x3ff5_e000 as *const _
    }
}
impl Deref for PWM0 {
    type Target = mcpwm::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*PWM0::ptr() }
    }
}
#[doc = "UHCI1"]
pub struct UHCI1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UHCI1 {}
impl UHCI1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uhci::RegisterBlock {
        0x3ff4_c000 as *const _
    }
}
impl Deref for UHCI1 {
    type Target = uhci::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UHCI1::ptr() }
    }
}
#[doc = "IO_MUX"]
pub struct IO_MUX {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for IO_MUX {}
impl IO_MUX {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const io_mux::RegisterBlock {
        0x3ff4_9000 as *const _
    }
}
impl Deref for IO_MUX {
    type Target = io_mux::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*IO_MUX::ptr() }
    }
}
#[doc = "IO_MUX"]
pub mod io_mux;
#[doc = "I2S"]
pub struct I2S {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2S {}
impl I2S {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2s::RegisterBlock {
        0x3ff4_f000 as *const _
    }
}
impl Deref for I2S {
    type Target = i2s::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2S::ptr() }
    }
}
#[doc = "I2S"]
pub mod i2s;
#[doc = "SPI2"]
pub struct SPI2 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SPI2 {}
impl SPI2 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const spi::RegisterBlock {
        0x3ff6_4000 as *const _
    }
}
impl Deref for SPI2 {
    type Target = spi::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI2::ptr() }
    }
}
#[doc = "APB_CTRL"]
pub struct APB_CTRL {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for APB_CTRL {}
impl APB_CTRL {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const apb_ctrl::RegisterBlock {
        0x3ff6_6000 as *const _
    }
}
impl Deref for APB_CTRL {
    type Target = apb_ctrl::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*APB_CTRL::ptr() }
    }
}
#[doc = "APB_CTRL"]
pub mod apb_ctrl;
#[doc = "SYSCON"]
pub struct SYSCON {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SYSCON {}
impl SYSCON {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const syscon::RegisterBlock {
        0x3ff6_6000 as *const _
    }
}
impl Deref for SYSCON {
    type Target = syscon::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SYSCON::ptr() }
    }
}
#[doc = "SYSCON"]
pub mod syscon;
#[doc = "RTC_I2C"]
pub struct RTC_I2C {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for RTC_I2C {}
impl RTC_I2C {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const rtc_i2c::RegisterBlock {
        0x3ff4_8c00 as *const _
    }
}
impl Deref for RTC_I2C {
    type Target = rtc_i2c::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*RTC_I2C::ptr() }
    }
}
#[doc = "RTC_I2C"]
pub mod rtc_i2c;
#[doc = "UART"]
pub struct UART {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UART {}
impl UART {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uart::RegisterBlock {
        0x3ff4_0000 as *const _
    }
}
impl Deref for UART {
    type Target = uart::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UART::ptr() }
    }
}
#[doc = "UART"]
pub mod uart;
#[doc = "LEDC"]
pub struct LEDC {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for LEDC {}
impl LEDC {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const ledc::RegisterBlock {
        0x3ff5_9000 as *const _
    }
}
impl Deref for LEDC {
    type Target = ledc::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*LEDC::ptr() }
    }
}
#[doc = "LEDC"]
pub mod ledc;
#[doc = "MCPWM"]
pub struct MCPWM {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for MCPWM {}
impl MCPWM {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mcpwm::RegisterBlock {
        0 as *const _
    }
}
impl Deref for MCPWM {
    type Target = mcpwm::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*MCPWM::ptr() }
    }
}
#[doc = "MCPWM"]
pub mod mcpwm;
#[doc = "UART1"]
pub struct UART1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UART1 {}
impl UART1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uart::RegisterBlock {
        0x3ff5_0000 as *const _
    }
}
impl Deref for UART1 {
    type Target = uart::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UART1::ptr() }
    }
}
#[doc = "SPI1"]
pub struct SPI1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SPI1 {}
impl SPI1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const spi::RegisterBlock {
        0x3ff4_2000 as *const _
    }
}
impl Deref for SPI1 {
    type Target = spi::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI1::ptr() }
    }
}
#[doc = "UART0"]
pub struct UART0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for UART0 {}
impl UART0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const uart::RegisterBlock {
        0x3ff4_0000 as *const _
    }
}
impl Deref for UART0 {
    type Target = uart::RegisterBlock;
    #[inline(always)]
    fn deref(&self) -> &Self::Target {
        unsafe { &*UART0::ptr() }
    }
}
#[no_mangle]
static mut DEVICE_PERIPHERALS: bool = false;
#[doc = r"All the peripherals"]
#[allow(non_snake_case)]
pub struct Peripherals {
    #[doc = "AES"]
    pub AES: AES,
    #[doc = "HINF"]
    pub HINF: HINF,
    #[doc = "SPI"]
    pub SPI: SPI,
    #[doc = "I2C1"]
    pub I2C1: I2C1,
    #[doc = "I2C"]
    pub I2C: I2C,
    #[doc = "EFUSE"]
    pub EFUSE: EFUSE,
    #[doc = "I2C0"]
    pub I2C0: I2C0,
    #[doc = "PCNT"]
    pub PCNT: PCNT,
    #[doc = "RMT"]
    pub RMT: RMT,
    #[doc = "GPIO"]
    pub GPIO: GPIO,
    #[doc = "UHCI"]
    pub UHCI: UHCI,
    #[doc = "SLCHOST"]
    pub SLCHOST: SLCHOST,
    #[doc = "SLC"]
    pub SLC: SLC,
    #[doc = "TIMG1"]
    pub TIMG1: TIMG1,
    #[doc = "PWM1"]
    pub PWM1: PWM1,
    #[doc = "RTCCNTL"]
    pub RTCCNTL: RTCCNTL,
    #[doc = "PWM2"]
    pub PWM2: PWM2,
    #[doc = "UHCI0"]
    pub UHCI0: UHCI0,
    #[doc = "SENS"]
    pub SENS: SENS,
    #[doc = "RTCIO"]
    pub RTCIO: RTCIO,
    #[doc = "DPORT"]
    pub DPORT: DPORT,
    #[doc = "SPI3"]
    pub SPI3: SPI3,
    #[doc = "UART2"]
    pub UART2: UART2,
    #[doc = "TIMG"]
    pub TIMG: TIMG,
    #[doc = "PWM3"]
    pub PWM3: PWM3,
    #[doc = "TIMG0"]
    pub TIMG0: TIMG0,
    #[doc = "GPIO_SD"]
    pub GPIO_SD: GPIO_SD,
    #[doc = "SPI0"]
    pub SPI0: SPI0,
    #[doc = "PWM0"]
    pub PWM0: PWM0,
    #[doc = "UHCI1"]
    pub UHCI1: UHCI1,
    #[doc = "IO_MUX"]
    pub IO_MUX: IO_MUX,
    #[doc = "I2S"]
    pub I2S: I2S,
    #[doc = "SPI2"]
    pub SPI2: SPI2,
    #[doc = "APB_CTRL"]
    pub APB_CTRL: APB_CTRL,
    #[doc = "SYSCON"]
    pub SYSCON: SYSCON,
    #[doc = "RTC_I2C"]
    pub RTC_I2C: RTC_I2C,
    #[doc = "UART"]
    pub UART: UART,
    #[doc = "LEDC"]
    pub LEDC: LEDC,
    #[doc = "MCPWM"]
    pub MCPWM: MCPWM,
    #[doc = "UART1"]
    pub UART1: UART1,
    #[doc = "SPI1"]
    pub SPI1: SPI1,
    #[doc = "UART0"]
    pub UART0: UART0,
}
impl Peripherals {
    #[doc = r"Returns all the peripherals *once*"]
    #[inline]
    pub fn take() -> Option<Self> {
        xtensa_lx6::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 {
            AES: AES {
                _marker: PhantomData,
            },
            HINF: HINF {
                _marker: PhantomData,
            },
            SPI: SPI {
                _marker: PhantomData,
            },
            I2C1: I2C1 {
                _marker: PhantomData,
            },
            I2C: I2C {
                _marker: PhantomData,
            },
            EFUSE: EFUSE {
                _marker: PhantomData,
            },
            I2C0: I2C0 {
                _marker: PhantomData,
            },
            PCNT: PCNT {
                _marker: PhantomData,
            },
            RMT: RMT {
                _marker: PhantomData,
            },
            GPIO: GPIO {
                _marker: PhantomData,
            },
            UHCI: UHCI {
                _marker: PhantomData,
            },
            SLCHOST: SLCHOST {
                _marker: PhantomData,
            },
            SLC: SLC {
                _marker: PhantomData,
            },
            TIMG1: TIMG1 {
                _marker: PhantomData,
            },
            PWM1: PWM1 {
                _marker: PhantomData,
            },
            RTCCNTL: RTCCNTL {
                _marker: PhantomData,
            },
            PWM2: PWM2 {
                _marker: PhantomData,
            },
            UHCI0: UHCI0 {
                _marker: PhantomData,
            },
            SENS: SENS {
                _marker: PhantomData,
            },
            RTCIO: RTCIO {
                _marker: PhantomData,
            },
            DPORT: DPORT {
                _marker: PhantomData,
            },
            SPI3: SPI3 {
                _marker: PhantomData,
            },
            UART2: UART2 {
                _marker: PhantomData,
            },
            TIMG: TIMG {
                _marker: PhantomData,
            },
            PWM3: PWM3 {
                _marker: PhantomData,
            },
            TIMG0: TIMG0 {
                _marker: PhantomData,
            },
            GPIO_SD: GPIO_SD {
                _marker: PhantomData,
            },
            SPI0: SPI0 {
                _marker: PhantomData,
            },
            PWM0: PWM0 {
                _marker: PhantomData,
            },
            UHCI1: UHCI1 {
                _marker: PhantomData,
            },
            IO_MUX: IO_MUX {
                _marker: PhantomData,
            },
            I2S: I2S {
                _marker: PhantomData,
            },
            SPI2: SPI2 {
                _marker: PhantomData,
            },
            APB_CTRL: APB_CTRL {
                _marker: PhantomData,
            },
            SYSCON: SYSCON {
                _marker: PhantomData,
            },
            RTC_I2C: RTC_I2C {
                _marker: PhantomData,
            },
            UART: UART {
                _marker: PhantomData,
            },
            LEDC: LEDC {
                _marker: PhantomData,
            },
            MCPWM: MCPWM {
                _marker: PhantomData,
            },
            UART1: UART1 {
                _marker: PhantomData,
            },
            SPI1: SPI1 {
                _marker: PhantomData,
            },
            UART0: UART0 {
                _marker: PhantomData,
            },
        }
    }
}