lpc845-pac 0.3.0

Low-level register mappings for the NXP LPC845 series of ARM Cortex-M0+ microcontrollers
Documentation
#![doc = "Peripheral access API for LPC845 microcontrollers (generated using svd2rust v0.16.1)\n\nYou can find an overview of the API [here].\n\n[here]: https://docs.rs/svd2rust/0.16.1/svd2rust/#peripheral-api"]
#![deny(missing_docs)]
#![deny(warnings)]
#![allow(non_camel_case_types)]
#![no_std]
extern crate bare_metal;
extern crate cortex_m;
#[cfg(feature = "rt")]
extern crate cortex_m_rt;
extern crate vcell;
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")]
extern "C" {
    fn SPI0();
    fn SPI1();
    fn DAC0();
    fn USART0();
    fn USART1();
    fn USART2();
    fn I2C1();
    fn I2C0();
    fn SCT0();
    fn MRT0();
    fn CMP_CAPT();
    fn WDT();
    fn BOD();
    fn FLASH();
    fn WKT();
    fn ADC0_SEQA();
    fn ADC0_SEQB();
    fn ADC0_THCMP();
    fn ADC0_OVR();
    fn DMA0();
    fn I2C2();
    fn I2C3();
    fn CTIMER0();
    fn PIN_INT0();
    fn PIN_INT1();
    fn PIN_INT2();
    fn PIN_INT3();
    fn PIN_INT4();
    fn PIN_INT5_DAC1();
    fn PIN_INT6_USART3();
    fn PIN_INT7_USART4();
}
#[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; 32] = [
    Vector { _handler: SPI0 },
    Vector { _handler: SPI1 },
    Vector { _handler: DAC0 },
    Vector { _handler: USART0 },
    Vector { _handler: USART1 },
    Vector { _handler: USART2 },
    Vector { _reserved: 0 },
    Vector { _handler: I2C1 },
    Vector { _handler: I2C0 },
    Vector { _handler: SCT0 },
    Vector { _handler: MRT0 },
    Vector { _handler: CMP_CAPT },
    Vector { _handler: WDT },
    Vector { _handler: BOD },
    Vector { _handler: FLASH },
    Vector { _handler: WKT },
    Vector {
        _handler: ADC0_SEQA,
    },
    Vector {
        _handler: ADC0_SEQB,
    },
    Vector {
        _handler: ADC0_THCMP,
    },
    Vector { _handler: ADC0_OVR },
    Vector { _handler: DMA0 },
    Vector { _handler: I2C2 },
    Vector { _handler: I2C3 },
    Vector { _handler: CTIMER0 },
    Vector { _handler: PIN_INT0 },
    Vector { _handler: PIN_INT1 },
    Vector { _handler: PIN_INT2 },
    Vector { _handler: PIN_INT3 },
    Vector { _handler: PIN_INT4 },
    Vector {
        _handler: PIN_INT5_DAC1,
    },
    Vector {
        _handler: PIN_INT6_USART3,
    },
    Vector {
        _handler: PIN_INT7_USART4,
    },
];
#[doc = r"Enumeration of all the interrupts"]
#[derive(Copy, Clone, Debug)]
pub enum Interrupt {
    #[doc = "0 - SPI0"]
    SPI0,
    #[doc = "1 - SPI1"]
    SPI1,
    #[doc = "2 - DAC0"]
    DAC0,
    #[doc = "3 - USART0"]
    USART0,
    #[doc = "4 - USART1"]
    USART1,
    #[doc = "5 - USART2"]
    USART2,
    #[doc = "7 - I2C1"]
    I2C1,
    #[doc = "8 - I2C0"]
    I2C0,
    #[doc = "9 - SCT0"]
    SCT0,
    #[doc = "10 - MRT0"]
    MRT0,
    #[doc = "11 - CMP_CAPT"]
    CMP_CAPT,
    #[doc = "12 - WDT"]
    WDT,
    #[doc = "13 - BOD"]
    BOD,
    #[doc = "14 - FLASH"]
    FLASH,
    #[doc = "15 - WKT"]
    WKT,
    #[doc = "16 - ADC0_SEQA"]
    ADC0_SEQA,
    #[doc = "17 - ADC0_SEQB"]
    ADC0_SEQB,
    #[doc = "18 - ADC0_THCMP"]
    ADC0_THCMP,
    #[doc = "19 - ADC0_OVR"]
    ADC0_OVR,
    #[doc = "20 - DMA0"]
    DMA0,
    #[doc = "21 - I2C2"]
    I2C2,
    #[doc = "22 - I2C3"]
    I2C3,
    #[doc = "23 - CTIMER0"]
    CTIMER0,
    #[doc = "24 - PIN_INT0"]
    PIN_INT0,
    #[doc = "25 - PIN_INT1"]
    PIN_INT1,
    #[doc = "26 - PIN_INT2"]
    PIN_INT2,
    #[doc = "27 - PIN_INT3"]
    PIN_INT3,
    #[doc = "28 - PIN_INT4"]
    PIN_INT4,
    #[doc = "29 - PIN_INT5_DAC1"]
    PIN_INT5_DAC1,
    #[doc = "30 - PIN_INT6_USART3"]
    PIN_INT6_USART3,
    #[doc = "31 - PIN_INT7_USART4"]
    PIN_INT7_USART4,
}
unsafe impl bare_metal::Nr for Interrupt {
    #[inline]
    fn nr(&self) -> u8 {
        match *self {
            Interrupt::SPI0 => 0,
            Interrupt::SPI1 => 1,
            Interrupt::DAC0 => 2,
            Interrupt::USART0 => 3,
            Interrupt::USART1 => 4,
            Interrupt::USART2 => 5,
            Interrupt::I2C1 => 7,
            Interrupt::I2C0 => 8,
            Interrupt::SCT0 => 9,
            Interrupt::MRT0 => 10,
            Interrupt::CMP_CAPT => 11,
            Interrupt::WDT => 12,
            Interrupt::BOD => 13,
            Interrupt::FLASH => 14,
            Interrupt::WKT => 15,
            Interrupt::ADC0_SEQA => 16,
            Interrupt::ADC0_SEQB => 17,
            Interrupt::ADC0_THCMP => 18,
            Interrupt::ADC0_OVR => 19,
            Interrupt::DMA0 => 20,
            Interrupt::I2C2 => 21,
            Interrupt::I2C3 => 22,
            Interrupt::CTIMER0 => 23,
            Interrupt::PIN_INT0 => 24,
            Interrupt::PIN_INT1 => 25,
            Interrupt::PIN_INT2 => 26,
            Interrupt::PIN_INT3 => 27,
            Interrupt::PIN_INT4 => 28,
            Interrupt::PIN_INT5_DAC1 => 29,
            Interrupt::PIN_INT6_USART3 => 30,
            Interrupt::PIN_INT7_USART4 => 31,
        }
    }
}
#[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;
#[doc = "LPC84x Windowed Watchdog Timer (WWDT)"]
pub struct WWDT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for WWDT {}
impl WWDT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const wwdt::RegisterBlock {
        0x4000_0000 as *const _
    }
}
impl Deref for WWDT {
    type Target = wwdt::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*WWDT::ptr() }
    }
}
#[doc = "LPC84x Windowed Watchdog Timer (WWDT)"]
pub mod wwdt;
#[doc = "LPC84x Multi-Rate Timer (MRT)"]
pub struct MRT0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for MRT0 {}
impl MRT0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mrt0::RegisterBlock {
        0x4000_4000 as *const _
    }
}
impl Deref for MRT0 {
    type Target = mrt0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*MRT0::ptr() }
    }
}
#[doc = "LPC84x Multi-Rate Timer (MRT)"]
pub mod mrt0;
#[doc = "LPC84x Wake Up Timer(WKT)"]
pub struct WKT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for WKT {}
impl WKT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const wkt::RegisterBlock {
        0x4000_8000 as *const _
    }
}
impl Deref for WKT {
    type Target = wkt::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*WKT::ptr() }
    }
}
#[doc = "LPC84x Wake Up Timer(WKT)"]
pub mod wkt;
#[doc = "LPC84x SWM"]
pub struct SWM0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SWM0 {}
impl SWM0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const swm0::RegisterBlock {
        0x4000_c000 as *const _
    }
}
impl Deref for SWM0 {
    type Target = swm0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*SWM0::ptr() }
    }
}
#[doc = "LPC84x SWM"]
pub mod swm0;
#[doc = "LPC84x 10-bit DAC controller (DAC)"]
pub struct DAC0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for DAC0 {}
impl DAC0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const dac0::RegisterBlock {
        0x4001_4000 as *const _
    }
}
impl Deref for DAC0 {
    type Target = dac0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*DAC0::ptr() }
    }
}
#[doc = "LPC84x 10-bit DAC controller (DAC)"]
pub mod dac0;
#[doc = "LPC84x 10-bit DAC controller (DAC)"]
pub struct DAC1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for DAC1 {}
impl DAC1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const dac0::RegisterBlock {
        0x4001_8000 as *const _
    }
}
impl Deref for DAC1 {
    type Target = dac0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*DAC1::ptr() }
    }
}
#[doc = "LPC84x 12-bit ADC controller (ADC)"]
pub struct ADC0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for ADC0 {}
impl ADC0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const adc0::RegisterBlock {
        0x4001_c000 as *const _
    }
}
impl Deref for ADC0 {
    type Target = adc0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*ADC0::ptr() }
    }
}
#[doc = "LPC84x 12-bit ADC controller (ADC)"]
pub mod adc0;
#[doc = "LPC84x PMU"]
pub struct PMU {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PMU {}
impl PMU {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const pmu::RegisterBlock {
        0x4002_0000 as *const _
    }
}
impl Deref for PMU {
    type Target = pmu::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*PMU::ptr() }
    }
}
#[doc = "LPC84x PMU"]
pub mod pmu;
#[doc = "LPC84x analog comparator"]
pub struct ACOMP {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for ACOMP {}
impl ACOMP {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const acomp::RegisterBlock {
        0x4002_4000 as *const _
    }
}
impl Deref for ACOMP {
    type Target = acomp::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*ACOMP::ptr() }
    }
}
#[doc = "LPC84x analog comparator"]
pub mod acomp;
#[doc = "LPC84x Input multiplexing (INPUT MUX)"]
pub struct INPUTMUX {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for INPUTMUX {}
impl INPUTMUX {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const inputmux::RegisterBlock {
        0x4002_c000 as *const _
    }
}
impl Deref for INPUTMUX {
    type Target = inputmux::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*INPUTMUX::ptr() }
    }
}
#[doc = "LPC84x Input multiplexing (INPUT MUX)"]
pub mod inputmux;
#[doc = "LPC184 Standard counter/timer"]
pub struct CTIMER0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for CTIMER0 {}
impl CTIMER0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const ctimer0::RegisterBlock {
        0x4003_8000 as *const _
    }
}
impl Deref for CTIMER0 {
    type Target = ctimer0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*CTIMER0::ptr() }
    }
}
#[doc = "LPC184 Standard counter/timer"]
pub mod ctimer0;
#[doc = "LPC84x NVMC flash controller"]
pub struct FLASH_CTRL {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for FLASH_CTRL {}
impl FLASH_CTRL {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const flash_ctrl::RegisterBlock {
        0x4004_0000 as *const _
    }
}
impl Deref for FLASH_CTRL {
    type Target = flash_ctrl::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*FLASH_CTRL::ptr() }
    }
}
#[doc = "LPC84x NVMC flash controller"]
pub mod flash_ctrl;
#[doc = "LPC84x I/O pin configuration (IOCON)"]
pub struct IOCON {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for IOCON {}
impl IOCON {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const iocon::RegisterBlock {
        0x4004_4000 as *const _
    }
}
impl Deref for IOCON {
    type Target = iocon::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*IOCON::ptr() }
    }
}
#[doc = "LPC84x I/O pin configuration (IOCON)"]
pub mod iocon;
#[doc = "LPC84x System configuration (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 {
        0x4004_8000 as *const _
    }
}
impl Deref for SYSCON {
    type Target = syscon::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*SYSCON::ptr() }
    }
}
#[doc = "LPC84x System configuration (SYSCON)"]
pub mod syscon;
#[doc = "LPC84x I2C-bus interfaces"]
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 i2c0::RegisterBlock {
        0x4005_0000 as *const _
    }
}
impl Deref for I2C0 {
    type Target = i2c0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C0::ptr() }
    }
}
#[doc = "LPC84x I2C-bus interfaces"]
pub mod i2c0;
#[doc = "LPC84x I2C-bus interfaces"]
pub struct I2C2 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2C2 {}
impl I2C2 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2c0::RegisterBlock {
        0x4003_0000 as *const _
    }
}
impl Deref for I2C2 {
    type Target = i2c0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C2::ptr() }
    }
}
#[doc = "LPC84x I2C-bus interfaces"]
pub struct I2C3 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for I2C3 {}
impl I2C3 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const i2c0::RegisterBlock {
        0x4003_4000 as *const _
    }
}
impl Deref for I2C3 {
    type Target = i2c0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C3::ptr() }
    }
}
#[doc = "LPC84x I2C-bus interfaces"]
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 i2c0::RegisterBlock {
        0x4005_4000 as *const _
    }
}
impl Deref for I2C1 {
    type Target = i2c0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*I2C1::ptr() }
    }
}
#[doc = "LPC84x Serial Peripheral Interfaces (SPI)"]
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 spi0::RegisterBlock {
        0x4005_8000 as *const _
    }
}
impl Deref for SPI0 {
    type Target = spi0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI0::ptr() }
    }
}
#[doc = "LPC84x Serial Peripheral Interfaces (SPI)"]
pub mod spi0;
#[doc = "LPC84x Serial Peripheral Interfaces (SPI)"]
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 spi0::RegisterBlock {
        0x4005_c000 as *const _
    }
}
impl Deref for SPI1 {
    type Target = spi0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*SPI1::ptr() }
    }
}
#[doc = "LPC84x Capacitive Touch"]
pub struct CAPT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for CAPT {}
impl CAPT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const capt::RegisterBlock {
        0x4006_0000 as *const _
    }
}
impl Deref for CAPT {
    type Target = capt::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*CAPT::ptr() }
    }
}
#[doc = "LPC84x Capacitive Touch"]
pub mod capt;
#[doc = "LPC84x USARTs"]
pub struct USART0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for USART0 {}
impl USART0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const usart0::RegisterBlock {
        0x4006_4000 as *const _
    }
}
impl Deref for USART0 {
    type Target = usart0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*USART0::ptr() }
    }
}
#[doc = "LPC84x USARTs"]
pub mod usart0;
#[doc = "LPC84x USARTs"]
pub struct USART1 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for USART1 {}
impl USART1 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const usart0::RegisterBlock {
        0x4006_8000 as *const _
    }
}
impl Deref for USART1 {
    type Target = usart0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*USART1::ptr() }
    }
}
#[doc = "LPC84x USARTs"]
pub struct USART2 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for USART2 {}
impl USART2 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const usart0::RegisterBlock {
        0x4006_c000 as *const _
    }
}
impl Deref for USART2 {
    type Target = usart0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*USART2::ptr() }
    }
}
#[doc = "LPC84x USARTs"]
pub struct USART3 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for USART3 {}
impl USART3 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const usart0::RegisterBlock {
        0x4007_0000 as *const _
    }
}
impl Deref for USART3 {
    type Target = usart0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*USART3::ptr() }
    }
}
#[doc = "LPC84x USARTs"]
pub struct USART4 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for USART4 {}
impl USART4 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const usart0::RegisterBlock {
        0x4007_4000 as *const _
    }
}
impl Deref for USART4 {
    type Target = usart0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*USART4::ptr() }
    }
}
#[doc = "LPC5411x CRC engine"]
pub struct CRC {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for CRC {}
impl CRC {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const crc::RegisterBlock {
        0x5000_0000 as *const _
    }
}
impl Deref for CRC {
    type Target = crc::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*CRC::ptr() }
    }
}
#[doc = "LPC5411x CRC engine"]
pub mod crc;
#[doc = "LPC84x SCTimer/PWM (SCT)"]
pub struct SCT0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for SCT0 {}
impl SCT0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const sct0::RegisterBlock {
        0x5000_4000 as *const _
    }
}
impl Deref for SCT0 {
    type Target = sct0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*SCT0::ptr() }
    }
}
#[doc = "LPC84x SCTimer/PWM (SCT)"]
pub mod sct0;
#[doc = "LPC84x DMA controller"]
pub struct DMA0 {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for DMA0 {}
impl DMA0 {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const dma0::RegisterBlock {
        0x5000_8000 as *const _
    }
}
impl Deref for DMA0 {
    type Target = dma0::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*DMA0::ptr() }
    }
}
#[doc = "LPC84x DMA controller"]
pub mod dma0;
#[doc = "LPC84x Micro Trace Buffer"]
pub struct MTB_SFR {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for MTB_SFR {}
impl MTB_SFR {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const mtb_sfr::RegisterBlock {
        0x5000_c000 as *const _
    }
}
impl Deref for MTB_SFR {
    type Target = mtb_sfr::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*MTB_SFR::ptr() }
    }
}
#[doc = "LPC84x Micro Trace Buffer"]
pub mod mtb_sfr;
#[doc = "LPC84x General Purpose I/O (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 {
        0xa000_0000 as *const _
    }
}
impl Deref for GPIO {
    type Target = gpio::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*GPIO::ptr() }
    }
}
#[doc = "LPC84x General Purpose I/O (GPIO)"]
pub mod gpio;
#[doc = "LPC84x Pin interrupt and pattern match (PINT)"]
pub struct PINT {
    _marker: PhantomData<*const ()>,
}
unsafe impl Send for PINT {}
impl PINT {
    #[doc = r"Returns a pointer to the register block"]
    #[inline(always)]
    pub const fn ptr() -> *const pint::RegisterBlock {
        0xa000_4000 as *const _
    }
}
impl Deref for PINT {
    type Target = pint::RegisterBlock;
    fn deref(&self) -> &Self::Target {
        unsafe { &*PINT::ptr() }
    }
}
#[doc = "LPC84x Pin interrupt and pattern match (PINT)"]
pub mod pint;
#[no_mangle]
static mut DEVICE_PERIPHERALS: bool = false;
#[doc = r"All the peripherals"]
#[allow(non_snake_case)]
pub struct Peripherals {
    #[doc = "WWDT"]
    pub WWDT: WWDT,
    #[doc = "MRT0"]
    pub MRT0: MRT0,
    #[doc = "WKT"]
    pub WKT: WKT,
    #[doc = "SWM0"]
    pub SWM0: SWM0,
    #[doc = "DAC0"]
    pub DAC0: DAC0,
    #[doc = "DAC1"]
    pub DAC1: DAC1,
    #[doc = "ADC0"]
    pub ADC0: ADC0,
    #[doc = "PMU"]
    pub PMU: PMU,
    #[doc = "ACOMP"]
    pub ACOMP: ACOMP,
    #[doc = "INPUTMUX"]
    pub INPUTMUX: INPUTMUX,
    #[doc = "CTIMER0"]
    pub CTIMER0: CTIMER0,
    #[doc = "FLASH_CTRL"]
    pub FLASH_CTRL: FLASH_CTRL,
    #[doc = "IOCON"]
    pub IOCON: IOCON,
    #[doc = "SYSCON"]
    pub SYSCON: SYSCON,
    #[doc = "I2C0"]
    pub I2C0: I2C0,
    #[doc = "I2C2"]
    pub I2C2: I2C2,
    #[doc = "I2C3"]
    pub I2C3: I2C3,
    #[doc = "I2C1"]
    pub I2C1: I2C1,
    #[doc = "SPI0"]
    pub SPI0: SPI0,
    #[doc = "SPI1"]
    pub SPI1: SPI1,
    #[doc = "CAPT"]
    pub CAPT: CAPT,
    #[doc = "USART0"]
    pub USART0: USART0,
    #[doc = "USART1"]
    pub USART1: USART1,
    #[doc = "USART2"]
    pub USART2: USART2,
    #[doc = "USART3"]
    pub USART3: USART3,
    #[doc = "USART4"]
    pub USART4: USART4,
    #[doc = "CRC"]
    pub CRC: CRC,
    #[doc = "SCT0"]
    pub SCT0: SCT0,
    #[doc = "DMA0"]
    pub DMA0: DMA0,
    #[doc = "MTB_SFR"]
    pub MTB_SFR: MTB_SFR,
    #[doc = "GPIO"]
    pub GPIO: GPIO,
    #[doc = "PINT"]
    pub PINT: PINT,
}
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`"]
    pub unsafe fn steal() -> Self {
        DEVICE_PERIPHERALS = true;
        Peripherals {
            WWDT: WWDT {
                _marker: PhantomData,
            },
            MRT0: MRT0 {
                _marker: PhantomData,
            },
            WKT: WKT {
                _marker: PhantomData,
            },
            SWM0: SWM0 {
                _marker: PhantomData,
            },
            DAC0: DAC0 {
                _marker: PhantomData,
            },
            DAC1: DAC1 {
                _marker: PhantomData,
            },
            ADC0: ADC0 {
                _marker: PhantomData,
            },
            PMU: PMU {
                _marker: PhantomData,
            },
            ACOMP: ACOMP {
                _marker: PhantomData,
            },
            INPUTMUX: INPUTMUX {
                _marker: PhantomData,
            },
            CTIMER0: CTIMER0 {
                _marker: PhantomData,
            },
            FLASH_CTRL: FLASH_CTRL {
                _marker: PhantomData,
            },
            IOCON: IOCON {
                _marker: PhantomData,
            },
            SYSCON: SYSCON {
                _marker: PhantomData,
            },
            I2C0: I2C0 {
                _marker: PhantomData,
            },
            I2C2: I2C2 {
                _marker: PhantomData,
            },
            I2C3: I2C3 {
                _marker: PhantomData,
            },
            I2C1: I2C1 {
                _marker: PhantomData,
            },
            SPI0: SPI0 {
                _marker: PhantomData,
            },
            SPI1: SPI1 {
                _marker: PhantomData,
            },
            CAPT: CAPT {
                _marker: PhantomData,
            },
            USART0: USART0 {
                _marker: PhantomData,
            },
            USART1: USART1 {
                _marker: PhantomData,
            },
            USART2: USART2 {
                _marker: PhantomData,
            },
            USART3: USART3 {
                _marker: PhantomData,
            },
            USART4: USART4 {
                _marker: PhantomData,
            },
            CRC: CRC {
                _marker: PhantomData,
            },
            SCT0: SCT0 {
                _marker: PhantomData,
            },
            DMA0: DMA0 {
                _marker: PhantomData,
            },
            MTB_SFR: MTB_SFR {
                _marker: PhantomData,
            },
            GPIO: GPIO {
                _marker: PhantomData,
            },
            PINT: PINT {
                _marker: PhantomData,
            },
        }
    }
}