Skip to main content

ambiq_apollo2_pac/
lib.rs

1#![doc = "Peripheral access API for APOLLO2 microcontrollers (generated using svd2rust v0.17.0)\n\nYou can find an overview of the API [here].\n\n[here]: https://docs.rs/svd2rust/0.17.0/svd2rust/#peripheral-api"]
2#![deny(const_err)]
3#![deny(dead_code)]
4#![deny(improper_ctypes)]
5#![deny(legacy_directory_ownership)]
6#![deny(missing_docs)]
7#![deny(no_mangle_generic_items)]
8#![deny(non_shorthand_field_patterns)]
9#![deny(overflowing_literals)]
10#![deny(path_statements)]
11#![deny(patterns_in_fns_without_body)]
12#![deny(plugin_as_library)]
13#![deny(private_in_public)]
14#![deny(safe_extern_statics)]
15#![deny(unconditional_recursion)]
16#![deny(unions_with_drop_fields)]
17#![deny(unused_allocation)]
18#![deny(unused_comparisons)]
19#![deny(unused_parens)]
20#![deny(while_true)]
21#![allow(non_camel_case_types)]
22#![allow(non_snake_case)]
23#![no_std]
24extern crate bare_metal;
25extern crate cortex_m;
26#[cfg(feature = "rt")]
27extern crate cortex_m_rt;
28extern crate vcell;
29use core::marker::PhantomData;
30use core::ops::Deref;
31#[doc = r"Number available in the NVIC for configuring priority"]
32pub const NVIC_PRIO_BITS: u8 = 3;
33#[cfg(feature = "rt")]
34extern "C" {
35    fn BROWNOUT();
36    fn WDT();
37    fn CLKGEN_RTC();
38    fn VCOMP();
39    fn IOSLAVE();
40    fn IOSLAVEACC();
41    fn IOMSTR0();
42    fn IOMSTR1();
43    fn IOMSTR2();
44    fn IOMSTR3();
45    fn IOMSTR4();
46    fn IOMSTR5();
47    fn GPIO();
48    fn CTIMER();
49    fn UART0();
50    fn UART1();
51    fn ADC();
52    fn PDM();
53    fn STIMER();
54    fn STIMER_CMPR0();
55    fn STIMER_CMPR1();
56    fn STIMER_CMPR2();
57    fn STIMER_CMPR3();
58    fn STIMER_CMPR4();
59    fn STIMER_CMPR5();
60    fn STIMER_CMPR6();
61    fn STIMER_CMPR7();
62}
63#[doc(hidden)]
64pub union Vector {
65    _handler: unsafe extern "C" fn(),
66    _reserved: u32,
67}
68#[cfg(feature = "rt")]
69#[doc(hidden)]
70#[link_section = ".vector_table.interrupts"]
71#[no_mangle]
72pub static __INTERRUPTS: [Vector; 27] = [
73    Vector { _handler: BROWNOUT },
74    Vector { _handler: WDT },
75    Vector {
76        _handler: CLKGEN_RTC,
77    },
78    Vector { _handler: VCOMP },
79    Vector { _handler: IOSLAVE },
80    Vector {
81        _handler: IOSLAVEACC,
82    },
83    Vector { _handler: IOMSTR0 },
84    Vector { _handler: IOMSTR1 },
85    Vector { _handler: IOMSTR2 },
86    Vector { _handler: IOMSTR3 },
87    Vector { _handler: IOMSTR4 },
88    Vector { _handler: IOMSTR5 },
89    Vector { _handler: GPIO },
90    Vector { _handler: CTIMER },
91    Vector { _handler: UART0 },
92    Vector { _handler: UART1 },
93    Vector { _handler: ADC },
94    Vector { _handler: PDM },
95    Vector { _handler: STIMER },
96    Vector {
97        _handler: STIMER_CMPR0,
98    },
99    Vector {
100        _handler: STIMER_CMPR1,
101    },
102    Vector {
103        _handler: STIMER_CMPR2,
104    },
105    Vector {
106        _handler: STIMER_CMPR3,
107    },
108    Vector {
109        _handler: STIMER_CMPR4,
110    },
111    Vector {
112        _handler: STIMER_CMPR5,
113    },
114    Vector {
115        _handler: STIMER_CMPR6,
116    },
117    Vector {
118        _handler: STIMER_CMPR7,
119    },
120];
121#[doc = r"Enumeration of all the interrupts"]
122#[derive(Copy, Clone, Debug)]
123#[repr(u8)]
124pub enum Interrupt {
125    #[doc = "0 - BROWNOUT"]
126    BROWNOUT = 0,
127    #[doc = "1 - WDT"]
128    WDT = 1,
129    #[doc = "2 - CLKGEN_RTC"]
130    CLKGEN_RTC = 2,
131    #[doc = "3 - VCOMP"]
132    VCOMP = 3,
133    #[doc = "4 - IOSLAVE"]
134    IOSLAVE = 4,
135    #[doc = "5 - IOSLAVEACC"]
136    IOSLAVEACC = 5,
137    #[doc = "6 - IOMSTR0"]
138    IOMSTR0 = 6,
139    #[doc = "7 - IOMSTR1"]
140    IOMSTR1 = 7,
141    #[doc = "8 - IOMSTR2"]
142    IOMSTR2 = 8,
143    #[doc = "9 - IOMSTR3"]
144    IOMSTR3 = 9,
145    #[doc = "10 - IOMSTR4"]
146    IOMSTR4 = 10,
147    #[doc = "11 - IOMSTR5"]
148    IOMSTR5 = 11,
149    #[doc = "12 - GPIO"]
150    GPIO = 12,
151    #[doc = "13 - CTIMER"]
152    CTIMER = 13,
153    #[doc = "14 - UART0"]
154    UART0 = 14,
155    #[doc = "15 - UART1"]
156    UART1 = 15,
157    #[doc = "16 - ADC"]
158    ADC = 16,
159    #[doc = "17 - PDM"]
160    PDM = 17,
161    #[doc = "18 - STIMER"]
162    STIMER = 18,
163    #[doc = "19 - STIMER_CMPR0"]
164    STIMER_CMPR0 = 19,
165    #[doc = "20 - STIMER_CMPR1"]
166    STIMER_CMPR1 = 20,
167    #[doc = "21 - STIMER_CMPR2"]
168    STIMER_CMPR2 = 21,
169    #[doc = "22 - STIMER_CMPR3"]
170    STIMER_CMPR3 = 22,
171    #[doc = "23 - STIMER_CMPR4"]
172    STIMER_CMPR4 = 23,
173    #[doc = "24 - STIMER_CMPR5"]
174    STIMER_CMPR5 = 24,
175    #[doc = "25 - STIMER_CMPR6"]
176    STIMER_CMPR6 = 25,
177    #[doc = "26 - STIMER_CMPR7"]
178    STIMER_CMPR7 = 26,
179}
180unsafe impl bare_metal::Nr for Interrupt {
181    #[inline(always)]
182    fn nr(&self) -> u8 {
183        *self as u8
184    }
185}
186#[cfg(feature = "rt")]
187pub use self::Interrupt as interrupt;
188pub use cortex_m::peripheral::Peripherals as CorePeripherals;
189pub use cortex_m::peripheral::{CBP, CPUID, DCB, DWT, FPB, FPU, ITM, MPU, NVIC, SCB, SYST, TPIU};
190#[cfg(feature = "rt")]
191pub use cortex_m_rt::interrupt;
192#[allow(unused_imports)]
193use generic::*;
194#[doc = r"Common register and bit access and modify traits"]
195pub mod generic;
196#[doc = "Analog Digital Converter Control"]
197pub struct ADC {
198    _marker: PhantomData<*const ()>,
199}
200unsafe impl Send for ADC {}
201impl ADC {
202    #[doc = r"Returns a pointer to the register block"]
203    #[inline(always)]
204    pub const fn ptr() -> *const adc::RegisterBlock {
205        0x5001_0000 as *const _
206    }
207}
208impl Deref for ADC {
209    type Target = adc::RegisterBlock;
210    #[inline(always)]
211    fn deref(&self) -> &Self::Target {
212        unsafe { &*ADC::ptr() }
213    }
214}
215#[doc = "Analog Digital Converter Control"]
216pub mod adc;
217#[doc = "Flash Cache Controller"]
218pub struct CACHECTRL {
219    _marker: PhantomData<*const ()>,
220}
221unsafe impl Send for CACHECTRL {}
222impl CACHECTRL {
223    #[doc = r"Returns a pointer to the register block"]
224    #[inline(always)]
225    pub const fn ptr() -> *const cachectrl::RegisterBlock {
226        0x4001_8000 as *const _
227    }
228}
229impl Deref for CACHECTRL {
230    type Target = cachectrl::RegisterBlock;
231    #[inline(always)]
232    fn deref(&self) -> &Self::Target {
233        unsafe { &*CACHECTRL::ptr() }
234    }
235}
236#[doc = "Flash Cache Controller"]
237pub mod cachectrl;
238#[doc = "Clock Generator"]
239pub struct CLKGEN {
240    _marker: PhantomData<*const ()>,
241}
242unsafe impl Send for CLKGEN {}
243impl CLKGEN {
244    #[doc = r"Returns a pointer to the register block"]
245    #[inline(always)]
246    pub const fn ptr() -> *const clkgen::RegisterBlock {
247        0x4000_4000 as *const _
248    }
249}
250impl Deref for CLKGEN {
251    type Target = clkgen::RegisterBlock;
252    #[inline(always)]
253    fn deref(&self) -> &Self::Target {
254        unsafe { &*CLKGEN::ptr() }
255    }
256}
257#[doc = "Clock Generator"]
258pub mod clkgen;
259#[doc = "Counter/Timer"]
260pub struct CTIMER {
261    _marker: PhantomData<*const ()>,
262}
263unsafe impl Send for CTIMER {}
264impl CTIMER {
265    #[doc = r"Returns a pointer to the register block"]
266    #[inline(always)]
267    pub const fn ptr() -> *const ctimer::RegisterBlock {
268        0x4000_8000 as *const _
269    }
270}
271impl Deref for CTIMER {
272    type Target = ctimer::RegisterBlock;
273    #[inline(always)]
274    fn deref(&self) -> &Self::Target {
275        unsafe { &*CTIMER::ptr() }
276    }
277}
278#[doc = "Counter/Timer"]
279pub mod ctimer;
280#[doc = "General Purpose IO"]
281pub struct GPIO {
282    _marker: PhantomData<*const ()>,
283}
284unsafe impl Send for GPIO {}
285impl GPIO {
286    #[doc = r"Returns a pointer to the register block"]
287    #[inline(always)]
288    pub const fn ptr() -> *const gpio::RegisterBlock {
289        0x4001_0000 as *const _
290    }
291}
292impl Deref for GPIO {
293    type Target = gpio::RegisterBlock;
294    #[inline(always)]
295    fn deref(&self) -> &Self::Target {
296        unsafe { &*GPIO::ptr() }
297    }
298}
299#[doc = "General Purpose IO"]
300pub mod gpio;
301#[doc = "I2C/SPI Master"]
302pub struct IOMSTR0 {
303    _marker: PhantomData<*const ()>,
304}
305unsafe impl Send for IOMSTR0 {}
306impl IOMSTR0 {
307    #[doc = r"Returns a pointer to the register block"]
308    #[inline(always)]
309    pub const fn ptr() -> *const iomstr0::RegisterBlock {
310        0x5000_4000 as *const _
311    }
312}
313impl Deref for IOMSTR0 {
314    type Target = iomstr0::RegisterBlock;
315    #[inline(always)]
316    fn deref(&self) -> &Self::Target {
317        unsafe { &*IOMSTR0::ptr() }
318    }
319}
320#[doc = "I2C/SPI Master"]
321pub mod iomstr0;
322#[doc = "I2C/SPI Master"]
323pub struct IOMSTR1 {
324    _marker: PhantomData<*const ()>,
325}
326unsafe impl Send for IOMSTR1 {}
327impl IOMSTR1 {
328    #[doc = r"Returns a pointer to the register block"]
329    #[inline(always)]
330    pub const fn ptr() -> *const iomstr0::RegisterBlock {
331        0x5000_5000 as *const _
332    }
333}
334impl Deref for IOMSTR1 {
335    type Target = iomstr0::RegisterBlock;
336    #[inline(always)]
337    fn deref(&self) -> &Self::Target {
338        unsafe { &*IOMSTR1::ptr() }
339    }
340}
341#[doc = "I2C/SPI Master"]
342pub struct IOMSTR2 {
343    _marker: PhantomData<*const ()>,
344}
345unsafe impl Send for IOMSTR2 {}
346impl IOMSTR2 {
347    #[doc = r"Returns a pointer to the register block"]
348    #[inline(always)]
349    pub const fn ptr() -> *const iomstr0::RegisterBlock {
350        0x5000_6000 as *const _
351    }
352}
353impl Deref for IOMSTR2 {
354    type Target = iomstr0::RegisterBlock;
355    #[inline(always)]
356    fn deref(&self) -> &Self::Target {
357        unsafe { &*IOMSTR2::ptr() }
358    }
359}
360#[doc = "I2C/SPI Master"]
361pub struct IOMSTR3 {
362    _marker: PhantomData<*const ()>,
363}
364unsafe impl Send for IOMSTR3 {}
365impl IOMSTR3 {
366    #[doc = r"Returns a pointer to the register block"]
367    #[inline(always)]
368    pub const fn ptr() -> *const iomstr0::RegisterBlock {
369        0x5000_7000 as *const _
370    }
371}
372impl Deref for IOMSTR3 {
373    type Target = iomstr0::RegisterBlock;
374    #[inline(always)]
375    fn deref(&self) -> &Self::Target {
376        unsafe { &*IOMSTR3::ptr() }
377    }
378}
379#[doc = "I2C/SPI Master"]
380pub struct IOMSTR4 {
381    _marker: PhantomData<*const ()>,
382}
383unsafe impl Send for IOMSTR4 {}
384impl IOMSTR4 {
385    #[doc = r"Returns a pointer to the register block"]
386    #[inline(always)]
387    pub const fn ptr() -> *const iomstr0::RegisterBlock {
388        0x5000_8000 as *const _
389    }
390}
391impl Deref for IOMSTR4 {
392    type Target = iomstr0::RegisterBlock;
393    #[inline(always)]
394    fn deref(&self) -> &Self::Target {
395        unsafe { &*IOMSTR4::ptr() }
396    }
397}
398#[doc = "I2C/SPI Master"]
399pub struct IOMSTR5 {
400    _marker: PhantomData<*const ()>,
401}
402unsafe impl Send for IOMSTR5 {}
403impl IOMSTR5 {
404    #[doc = r"Returns a pointer to the register block"]
405    #[inline(always)]
406    pub const fn ptr() -> *const iomstr0::RegisterBlock {
407        0x5000_9000 as *const _
408    }
409}
410impl Deref for IOMSTR5 {
411    type Target = iomstr0::RegisterBlock;
412    #[inline(always)]
413    fn deref(&self) -> &Self::Target {
414        unsafe { &*IOMSTR5::ptr() }
415    }
416}
417#[doc = "I2C/SPI Slave"]
418pub struct IOSLAVE {
419    _marker: PhantomData<*const ()>,
420}
421unsafe impl Send for IOSLAVE {}
422impl IOSLAVE {
423    #[doc = r"Returns a pointer to the register block"]
424    #[inline(always)]
425    pub const fn ptr() -> *const ioslave::RegisterBlock {
426        0x5000_0000 as *const _
427    }
428}
429impl Deref for IOSLAVE {
430    type Target = ioslave::RegisterBlock;
431    #[inline(always)]
432    fn deref(&self) -> &Self::Target {
433        unsafe { &*IOSLAVE::ptr() }
434    }
435}
436#[doc = "I2C/SPI Slave"]
437pub mod ioslave;
438#[doc = "MCU Miscellaneous Control Logic"]
439pub struct MCUCTRL {
440    _marker: PhantomData<*const ()>,
441}
442unsafe impl Send for MCUCTRL {}
443impl MCUCTRL {
444    #[doc = r"Returns a pointer to the register block"]
445    #[inline(always)]
446    pub const fn ptr() -> *const mcuctrl::RegisterBlock {
447        0x4002_0000 as *const _
448    }
449}
450impl Deref for MCUCTRL {
451    type Target = mcuctrl::RegisterBlock;
452    #[inline(always)]
453    fn deref(&self) -> &Self::Target {
454        unsafe { &*MCUCTRL::ptr() }
455    }
456}
457#[doc = "MCU Miscellaneous Control Logic"]
458pub mod mcuctrl;
459#[doc = "PDM Audio"]
460pub struct PDM {
461    _marker: PhantomData<*const ()>,
462}
463unsafe impl Send for PDM {}
464impl PDM {
465    #[doc = r"Returns a pointer to the register block"]
466    #[inline(always)]
467    pub const fn ptr() -> *const pdm::RegisterBlock {
468        0x5001_1000 as *const _
469    }
470}
471impl Deref for PDM {
472    type Target = pdm::RegisterBlock;
473    #[inline(always)]
474    fn deref(&self) -> &Self::Target {
475        unsafe { &*PDM::ptr() }
476    }
477}
478#[doc = "PDM Audio"]
479pub mod pdm;
480#[doc = "PWR Controller Register Bank"]
481pub struct PWRCTRL {
482    _marker: PhantomData<*const ()>,
483}
484unsafe impl Send for PWRCTRL {}
485impl PWRCTRL {
486    #[doc = r"Returns a pointer to the register block"]
487    #[inline(always)]
488    pub const fn ptr() -> *const pwrctrl::RegisterBlock {
489        0x4002_1000 as *const _
490    }
491}
492impl Deref for PWRCTRL {
493    type Target = pwrctrl::RegisterBlock;
494    #[inline(always)]
495    fn deref(&self) -> &Self::Target {
496        unsafe { &*PWRCTRL::ptr() }
497    }
498}
499#[doc = "PWR Controller Register Bank"]
500pub mod pwrctrl;
501#[doc = "MCU Reset Generator"]
502pub struct RSTGEN {
503    _marker: PhantomData<*const ()>,
504}
505unsafe impl Send for RSTGEN {}
506impl RSTGEN {
507    #[doc = r"Returns a pointer to the register block"]
508    #[inline(always)]
509    pub const fn ptr() -> *const rstgen::RegisterBlock {
510        0x4000_0000 as *const _
511    }
512}
513impl Deref for RSTGEN {
514    type Target = rstgen::RegisterBlock;
515    #[inline(always)]
516    fn deref(&self) -> &Self::Target {
517        unsafe { &*RSTGEN::ptr() }
518    }
519}
520#[doc = "MCU Reset Generator"]
521pub mod rstgen;
522#[doc = "Real Time Clock"]
523pub struct RTC {
524    _marker: PhantomData<*const ()>,
525}
526unsafe impl Send for RTC {}
527impl RTC {
528    #[doc = r"Returns a pointer to the register block"]
529    #[inline(always)]
530    pub const fn ptr() -> *const rtc::RegisterBlock {
531        0x4000_4040 as *const _
532    }
533}
534impl Deref for RTC {
535    type Target = rtc::RegisterBlock;
536    #[inline(always)]
537    fn deref(&self) -> &Self::Target {
538        unsafe { &*RTC::ptr() }
539    }
540}
541#[doc = "Real Time Clock"]
542pub mod rtc;
543#[doc = "Serial UART"]
544pub struct UART0 {
545    _marker: PhantomData<*const ()>,
546}
547unsafe impl Send for UART0 {}
548impl UART0 {
549    #[doc = r"Returns a pointer to the register block"]
550    #[inline(always)]
551    pub const fn ptr() -> *const uart0::RegisterBlock {
552        0x4001_c000 as *const _
553    }
554}
555impl Deref for UART0 {
556    type Target = uart0::RegisterBlock;
557    #[inline(always)]
558    fn deref(&self) -> &Self::Target {
559        unsafe { &*UART0::ptr() }
560    }
561}
562#[doc = "Serial UART"]
563pub mod uart0;
564#[doc = "Serial UART"]
565pub struct UART1 {
566    _marker: PhantomData<*const ()>,
567}
568unsafe impl Send for UART1 {}
569impl UART1 {
570    #[doc = r"Returns a pointer to the register block"]
571    #[inline(always)]
572    pub const fn ptr() -> *const uart0::RegisterBlock {
573        0x4001_d000 as *const _
574    }
575}
576impl Deref for UART1 {
577    type Target = uart0::RegisterBlock;
578    #[inline(always)]
579    fn deref(&self) -> &Self::Target {
580        unsafe { &*UART1::ptr() }
581    }
582}
583#[doc = "Voltage Comparator"]
584pub struct VCOMP {
585    _marker: PhantomData<*const ()>,
586}
587unsafe impl Send for VCOMP {}
588impl VCOMP {
589    #[doc = r"Returns a pointer to the register block"]
590    #[inline(always)]
591    pub const fn ptr() -> *const vcomp::RegisterBlock {
592        0x4000_c000 as *const _
593    }
594}
595impl Deref for VCOMP {
596    type Target = vcomp::RegisterBlock;
597    #[inline(always)]
598    fn deref(&self) -> &Self::Target {
599        unsafe { &*VCOMP::ptr() }
600    }
601}
602#[doc = "Voltage Comparator"]
603pub mod vcomp;
604#[doc = "Watchdog Timer"]
605pub struct WDT {
606    _marker: PhantomData<*const ()>,
607}
608unsafe impl Send for WDT {}
609impl WDT {
610    #[doc = r"Returns a pointer to the register block"]
611    #[inline(always)]
612    pub const fn ptr() -> *const wdt::RegisterBlock {
613        0x4002_4000 as *const _
614    }
615}
616impl Deref for WDT {
617    type Target = wdt::RegisterBlock;
618    #[inline(always)]
619    fn deref(&self) -> &Self::Target {
620        unsafe { &*WDT::ptr() }
621    }
622}
623#[doc = "Watchdog Timer"]
624pub mod wdt;
625#[no_mangle]
626static mut DEVICE_PERIPHERALS: bool = false;
627#[doc = r"All the peripherals"]
628#[allow(non_snake_case)]
629pub struct Peripherals {
630    #[doc = "ADC"]
631    pub ADC: ADC,
632    #[doc = "CACHECTRL"]
633    pub CACHECTRL: CACHECTRL,
634    #[doc = "CLKGEN"]
635    pub CLKGEN: CLKGEN,
636    #[doc = "CTIMER"]
637    pub CTIMER: CTIMER,
638    #[doc = "GPIO"]
639    pub GPIO: GPIO,
640    #[doc = "IOMSTR0"]
641    pub IOMSTR0: IOMSTR0,
642    #[doc = "IOMSTR1"]
643    pub IOMSTR1: IOMSTR1,
644    #[doc = "IOMSTR2"]
645    pub IOMSTR2: IOMSTR2,
646    #[doc = "IOMSTR3"]
647    pub IOMSTR3: IOMSTR3,
648    #[doc = "IOMSTR4"]
649    pub IOMSTR4: IOMSTR4,
650    #[doc = "IOMSTR5"]
651    pub IOMSTR5: IOMSTR5,
652    #[doc = "IOSLAVE"]
653    pub IOSLAVE: IOSLAVE,
654    #[doc = "MCUCTRL"]
655    pub MCUCTRL: MCUCTRL,
656    #[doc = "PDM"]
657    pub PDM: PDM,
658    #[doc = "PWRCTRL"]
659    pub PWRCTRL: PWRCTRL,
660    #[doc = "RSTGEN"]
661    pub RSTGEN: RSTGEN,
662    #[doc = "RTC"]
663    pub RTC: RTC,
664    #[doc = "UART0"]
665    pub UART0: UART0,
666    #[doc = "UART1"]
667    pub UART1: UART1,
668    #[doc = "VCOMP"]
669    pub VCOMP: VCOMP,
670    #[doc = "WDT"]
671    pub WDT: WDT,
672}
673impl Peripherals {
674    #[doc = r"Returns all the peripherals *once*"]
675    #[inline]
676    pub fn take() -> Option<Self> {
677        cortex_m::interrupt::free(|_| {
678            if unsafe { DEVICE_PERIPHERALS } {
679                None
680            } else {
681                Some(unsafe { Peripherals::steal() })
682            }
683        })
684    }
685    #[doc = r"Unchecked version of `Peripherals::take`"]
686    #[inline]
687    pub unsafe fn steal() -> Self {
688        DEVICE_PERIPHERALS = true;
689        Peripherals {
690            ADC: ADC {
691                _marker: PhantomData,
692            },
693            CACHECTRL: CACHECTRL {
694                _marker: PhantomData,
695            },
696            CLKGEN: CLKGEN {
697                _marker: PhantomData,
698            },
699            CTIMER: CTIMER {
700                _marker: PhantomData,
701            },
702            GPIO: GPIO {
703                _marker: PhantomData,
704            },
705            IOMSTR0: IOMSTR0 {
706                _marker: PhantomData,
707            },
708            IOMSTR1: IOMSTR1 {
709                _marker: PhantomData,
710            },
711            IOMSTR2: IOMSTR2 {
712                _marker: PhantomData,
713            },
714            IOMSTR3: IOMSTR3 {
715                _marker: PhantomData,
716            },
717            IOMSTR4: IOMSTR4 {
718                _marker: PhantomData,
719            },
720            IOMSTR5: IOMSTR5 {
721                _marker: PhantomData,
722            },
723            IOSLAVE: IOSLAVE {
724                _marker: PhantomData,
725            },
726            MCUCTRL: MCUCTRL {
727                _marker: PhantomData,
728            },
729            PDM: PDM {
730                _marker: PhantomData,
731            },
732            PWRCTRL: PWRCTRL {
733                _marker: PhantomData,
734            },
735            RSTGEN: RSTGEN {
736                _marker: PhantomData,
737            },
738            RTC: RTC {
739                _marker: PhantomData,
740            },
741            UART0: UART0 {
742                _marker: PhantomData,
743            },
744            UART1: UART1 {
745                _marker: PhantomData,
746            },
747            VCOMP: VCOMP {
748                _marker: PhantomData,
749            },
750            WDT: WDT {
751                _marker: PhantomData,
752            },
753        }
754    }
755}