atsaml21e18a/
lib.rs

1#![doc = "Peripheral access API for ATSAML21E18A microcontrollers (generated using svd2rust v0.27.2 ( ))\n\nYou can find an overview of the generated API [here].\n\nAPI features to be included in the [next]
2svd2rust 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.27.2/svd2rust/#peripheral-api\n[next]: https://github.com/rust-embedded/svd2rust/blob/master/CHANGELOG.md#unreleased\n[repository]: https://github.com/rust-embedded/svd2rust"]
3#![deny(dead_code)]
4#![deny(improper_ctypes)]
5#![deny(missing_docs)]
6#![deny(no_mangle_generic_items)]
7#![deny(non_shorthand_field_patterns)]
8#![deny(overflowing_literals)]
9#![deny(path_statements)]
10#![deny(patterns_in_fns_without_body)]
11#![deny(private_in_public)]
12#![deny(unconditional_recursion)]
13#![deny(unused_allocation)]
14#![deny(unused_comparisons)]
15#![deny(unused_parens)]
16#![deny(while_true)]
17#![allow(non_camel_case_types)]
18#![allow(non_snake_case)]
19#![no_std]
20use core::marker::PhantomData;
21use core::ops::Deref;
22#[doc = r"Number available in the NVIC for configuring priority"]
23pub const NVIC_PRIO_BITS: u8 = 2;
24#[cfg(feature = "rt")]
25pub use self::Interrupt as interrupt;
26pub use cortex_m::peripheral::Peripherals as CorePeripherals;
27pub use cortex_m::peripheral::{CBP, CPUID, DCB, DWT, FPB, ITM, MPU, NVIC, SCB, SYST, TPIU};
28#[cfg(feature = "rt")]
29pub use cortex_m_rt::interrupt;
30#[allow(unused_imports)]
31use generic::*;
32#[doc = r"Common register and bit access and modify traits"]
33pub mod generic;
34#[cfg(feature = "rt")]
35extern "C" {
36    fn SYSTEM();
37    fn WDT();
38    fn RTC();
39    fn EIC();
40    fn NVMCTRL();
41    fn DMAC();
42    fn USB();
43    fn EVSYS();
44    fn SERCOM0();
45    fn SERCOM1();
46    fn SERCOM2();
47    fn SERCOM3();
48    fn TCC0();
49    fn TCC1();
50    fn TCC2();
51    fn TC0();
52    fn TC1();
53    fn TC4();
54    fn ADC();
55    fn AC();
56    fn DAC();
57    fn AES();
58    fn TRNG();
59}
60#[doc(hidden)]
61pub union Vector {
62    _handler: unsafe extern "C" fn(),
63    _reserved: u32,
64}
65#[cfg(feature = "rt")]
66#[doc(hidden)]
67#[link_section = ".vector_table.interrupts"]
68#[no_mangle]
69pub static __INTERRUPTS: [Vector; 28] = [
70    Vector { _handler: SYSTEM },
71    Vector { _handler: WDT },
72    Vector { _handler: RTC },
73    Vector { _handler: EIC },
74    Vector { _handler: NVMCTRL },
75    Vector { _handler: DMAC },
76    Vector { _handler: USB },
77    Vector { _handler: EVSYS },
78    Vector { _handler: SERCOM0 },
79    Vector { _handler: SERCOM1 },
80    Vector { _handler: SERCOM2 },
81    Vector { _handler: SERCOM3 },
82    Vector { _reserved: 0 },
83    Vector { _reserved: 0 },
84    Vector { _handler: TCC0 },
85    Vector { _handler: TCC1 },
86    Vector { _handler: TCC2 },
87    Vector { _handler: TC0 },
88    Vector { _handler: TC1 },
89    Vector { _reserved: 0 },
90    Vector { _reserved: 0 },
91    Vector { _handler: TC4 },
92    Vector { _handler: ADC },
93    Vector { _handler: AC },
94    Vector { _handler: DAC },
95    Vector { _reserved: 0 },
96    Vector { _handler: AES },
97    Vector { _handler: TRNG },
98];
99#[doc = r"Enumeration of all the interrupts."]
100#[derive(Copy, Clone, Debug, PartialEq, Eq)]
101#[repr(u16)]
102pub enum Interrupt {
103    #[doc = "0 - SYSTEM"]
104    SYSTEM = 0,
105    #[doc = "1 - WDT"]
106    WDT = 1,
107    #[doc = "2 - RTC"]
108    RTC = 2,
109    #[doc = "3 - EIC"]
110    EIC = 3,
111    #[doc = "4 - NVMCTRL"]
112    NVMCTRL = 4,
113    #[doc = "5 - DMAC"]
114    DMAC = 5,
115    #[doc = "6 - USB"]
116    USB = 6,
117    #[doc = "7 - EVSYS"]
118    EVSYS = 7,
119    #[doc = "8 - SERCOM0"]
120    SERCOM0 = 8,
121    #[doc = "9 - SERCOM1"]
122    SERCOM1 = 9,
123    #[doc = "10 - SERCOM2"]
124    SERCOM2 = 10,
125    #[doc = "11 - SERCOM3"]
126    SERCOM3 = 11,
127    #[doc = "14 - TCC0"]
128    TCC0 = 14,
129    #[doc = "15 - TCC1"]
130    TCC1 = 15,
131    #[doc = "16 - TCC2"]
132    TCC2 = 16,
133    #[doc = "17 - TC0"]
134    TC0 = 17,
135    #[doc = "18 - TC1"]
136    TC1 = 18,
137    #[doc = "21 - TC4"]
138    TC4 = 21,
139    #[doc = "22 - ADC"]
140    ADC = 22,
141    #[doc = "23 - AC"]
142    AC = 23,
143    #[doc = "24 - DAC"]
144    DAC = 24,
145    #[doc = "26 - AES"]
146    AES = 26,
147    #[doc = "27 - TRNG"]
148    TRNG = 27,
149}
150unsafe impl cortex_m::interrupt::InterruptNumber for Interrupt {
151    #[inline(always)]
152    fn number(self) -> u16 {
153        self as u16
154    }
155}
156#[doc = "Analog Comparators"]
157pub struct AC {
158    _marker: PhantomData<*const ()>,
159}
160unsafe impl Send for AC {}
161impl AC {
162    #[doc = r"Pointer to the register block"]
163    pub const PTR: *const ac::RegisterBlock = 0x4300_1000 as *const _;
164    #[doc = r"Return the pointer to the register block"]
165    #[inline(always)]
166    pub const fn ptr() -> *const ac::RegisterBlock {
167        Self::PTR
168    }
169}
170impl Deref for AC {
171    type Target = ac::RegisterBlock;
172    #[inline(always)]
173    fn deref(&self) -> &Self::Target {
174        unsafe { &*Self::PTR }
175    }
176}
177impl core::fmt::Debug for AC {
178    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
179        f.debug_struct("AC").finish()
180    }
181}
182#[doc = "Analog Comparators"]
183pub mod ac;
184#[doc = "Analog Digital Converter"]
185pub struct ADC {
186    _marker: PhantomData<*const ()>,
187}
188unsafe impl Send for ADC {}
189impl ADC {
190    #[doc = r"Pointer to the register block"]
191    pub const PTR: *const adc::RegisterBlock = 0x4300_0c00 as *const _;
192    #[doc = r"Return the pointer to the register block"]
193    #[inline(always)]
194    pub const fn ptr() -> *const adc::RegisterBlock {
195        Self::PTR
196    }
197}
198impl Deref for ADC {
199    type Target = adc::RegisterBlock;
200    #[inline(always)]
201    fn deref(&self) -> &Self::Target {
202        unsafe { &*Self::PTR }
203    }
204}
205impl core::fmt::Debug for ADC {
206    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
207        f.debug_struct("ADC").finish()
208    }
209}
210#[doc = "Analog Digital Converter"]
211pub mod adc;
212#[doc = "Advanced Encryption Standard"]
213pub struct AES {
214    _marker: PhantomData<*const ()>,
215}
216unsafe impl Send for AES {}
217impl AES {
218    #[doc = r"Pointer to the register block"]
219    pub const PTR: *const aes::RegisterBlock = 0x4200_3400 as *const _;
220    #[doc = r"Return the pointer to the register block"]
221    #[inline(always)]
222    pub const fn ptr() -> *const aes::RegisterBlock {
223        Self::PTR
224    }
225}
226impl Deref for AES {
227    type Target = aes::RegisterBlock;
228    #[inline(always)]
229    fn deref(&self) -> &Self::Target {
230        unsafe { &*Self::PTR }
231    }
232}
233impl core::fmt::Debug for AES {
234    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
235        f.debug_struct("AES").finish()
236    }
237}
238#[doc = "Advanced Encryption Standard"]
239pub mod aes;
240#[doc = "Configurable Custom Logic"]
241pub struct CCL {
242    _marker: PhantomData<*const ()>,
243}
244unsafe impl Send for CCL {}
245impl CCL {
246    #[doc = r"Pointer to the register block"]
247    pub const PTR: *const ccl::RegisterBlock = 0x4300_1c00 as *const _;
248    #[doc = r"Return the pointer to the register block"]
249    #[inline(always)]
250    pub const fn ptr() -> *const ccl::RegisterBlock {
251        Self::PTR
252    }
253}
254impl Deref for CCL {
255    type Target = ccl::RegisterBlock;
256    #[inline(always)]
257    fn deref(&self) -> &Self::Target {
258        unsafe { &*Self::PTR }
259    }
260}
261impl core::fmt::Debug for CCL {
262    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
263        f.debug_struct("CCL").finish()
264    }
265}
266#[doc = "Configurable Custom Logic"]
267pub mod ccl;
268#[doc = "Digital-to-Analog Converter"]
269pub struct DAC {
270    _marker: PhantomData<*const ()>,
271}
272unsafe impl Send for DAC {}
273impl DAC {
274    #[doc = r"Pointer to the register block"]
275    pub const PTR: *const dac::RegisterBlock = 0x4200_3000 as *const _;
276    #[doc = r"Return the pointer to the register block"]
277    #[inline(always)]
278    pub const fn ptr() -> *const dac::RegisterBlock {
279        Self::PTR
280    }
281}
282impl Deref for DAC {
283    type Target = dac::RegisterBlock;
284    #[inline(always)]
285    fn deref(&self) -> &Self::Target {
286        unsafe { &*Self::PTR }
287    }
288}
289impl core::fmt::Debug for DAC {
290    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
291        f.debug_struct("DAC").finish()
292    }
293}
294#[doc = "Digital-to-Analog Converter"]
295pub mod dac;
296#[doc = "Direct Memory Access Controller"]
297pub struct DMAC {
298    _marker: PhantomData<*const ()>,
299}
300unsafe impl Send for DMAC {}
301impl DMAC {
302    #[doc = r"Pointer to the register block"]
303    pub const PTR: *const dmac::RegisterBlock = 0x4400_0400 as *const _;
304    #[doc = r"Return the pointer to the register block"]
305    #[inline(always)]
306    pub const fn ptr() -> *const dmac::RegisterBlock {
307        Self::PTR
308    }
309}
310impl Deref for DMAC {
311    type Target = dmac::RegisterBlock;
312    #[inline(always)]
313    fn deref(&self) -> &Self::Target {
314        unsafe { &*Self::PTR }
315    }
316}
317impl core::fmt::Debug for DMAC {
318    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
319        f.debug_struct("DMAC").finish()
320    }
321}
322#[doc = "Direct Memory Access Controller"]
323pub mod dmac;
324#[doc = "Device Service Unit"]
325pub struct DSU {
326    _marker: PhantomData<*const ()>,
327}
328unsafe impl Send for DSU {}
329impl DSU {
330    #[doc = r"Pointer to the register block"]
331    pub const PTR: *const dsu::RegisterBlock = 0x4100_2000 as *const _;
332    #[doc = r"Return the pointer to the register block"]
333    #[inline(always)]
334    pub const fn ptr() -> *const dsu::RegisterBlock {
335        Self::PTR
336    }
337}
338impl Deref for DSU {
339    type Target = dsu::RegisterBlock;
340    #[inline(always)]
341    fn deref(&self) -> &Self::Target {
342        unsafe { &*Self::PTR }
343    }
344}
345impl core::fmt::Debug for DSU {
346    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
347        f.debug_struct("DSU").finish()
348    }
349}
350#[doc = "Device Service Unit"]
351pub mod dsu;
352#[doc = "External Interrupt Controller"]
353pub struct EIC {
354    _marker: PhantomData<*const ()>,
355}
356unsafe impl Send for EIC {}
357impl EIC {
358    #[doc = r"Pointer to the register block"]
359    pub const PTR: *const eic::RegisterBlock = 0x4000_2400 as *const _;
360    #[doc = r"Return the pointer to the register block"]
361    #[inline(always)]
362    pub const fn ptr() -> *const eic::RegisterBlock {
363        Self::PTR
364    }
365}
366impl Deref for EIC {
367    type Target = eic::RegisterBlock;
368    #[inline(always)]
369    fn deref(&self) -> &Self::Target {
370        unsafe { &*Self::PTR }
371    }
372}
373impl core::fmt::Debug for EIC {
374    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
375        f.debug_struct("EIC").finish()
376    }
377}
378#[doc = "External Interrupt Controller"]
379pub mod eic;
380#[doc = "Event System Interface"]
381pub struct EVSYS {
382    _marker: PhantomData<*const ()>,
383}
384unsafe impl Send for EVSYS {}
385impl EVSYS {
386    #[doc = r"Pointer to the register block"]
387    pub const PTR: *const evsys::RegisterBlock = 0x4300_0000 as *const _;
388    #[doc = r"Return the pointer to the register block"]
389    #[inline(always)]
390    pub const fn ptr() -> *const evsys::RegisterBlock {
391        Self::PTR
392    }
393}
394impl Deref for EVSYS {
395    type Target = evsys::RegisterBlock;
396    #[inline(always)]
397    fn deref(&self) -> &Self::Target {
398        unsafe { &*Self::PTR }
399    }
400}
401impl core::fmt::Debug for EVSYS {
402    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
403        f.debug_struct("EVSYS").finish()
404    }
405}
406#[doc = "Event System Interface"]
407pub mod evsys;
408#[doc = "Generic Clock Generator"]
409pub struct GCLK {
410    _marker: PhantomData<*const ()>,
411}
412unsafe impl Send for GCLK {}
413impl GCLK {
414    #[doc = r"Pointer to the register block"]
415    pub const PTR: *const gclk::RegisterBlock = 0x4000_1800 as *const _;
416    #[doc = r"Return the pointer to the register block"]
417    #[inline(always)]
418    pub const fn ptr() -> *const gclk::RegisterBlock {
419        Self::PTR
420    }
421}
422impl Deref for GCLK {
423    type Target = gclk::RegisterBlock;
424    #[inline(always)]
425    fn deref(&self) -> &Self::Target {
426        unsafe { &*Self::PTR }
427    }
428}
429impl core::fmt::Debug for GCLK {
430    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
431        f.debug_struct("GCLK").finish()
432    }
433}
434#[doc = "Generic Clock Generator"]
435pub mod gclk;
436#[doc = "Main Clock"]
437pub struct MCLK {
438    _marker: PhantomData<*const ()>,
439}
440unsafe impl Send for MCLK {}
441impl MCLK {
442    #[doc = r"Pointer to the register block"]
443    pub const PTR: *const mclk::RegisterBlock = 0x4000_0400 as *const _;
444    #[doc = r"Return the pointer to the register block"]
445    #[inline(always)]
446    pub const fn ptr() -> *const mclk::RegisterBlock {
447        Self::PTR
448    }
449}
450impl Deref for MCLK {
451    type Target = mclk::RegisterBlock;
452    #[inline(always)]
453    fn deref(&self) -> &Self::Target {
454        unsafe { &*Self::PTR }
455    }
456}
457impl core::fmt::Debug for MCLK {
458    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
459        f.debug_struct("MCLK").finish()
460    }
461}
462#[doc = "Main Clock"]
463pub mod mclk;
464#[doc = "Cortex-M0+ Micro-Trace Buffer"]
465pub struct MTB {
466    _marker: PhantomData<*const ()>,
467}
468unsafe impl Send for MTB {}
469impl MTB {
470    #[doc = r"Pointer to the register block"]
471    pub const PTR: *const mtb::RegisterBlock = 0x4100_6000 as *const _;
472    #[doc = r"Return the pointer to the register block"]
473    #[inline(always)]
474    pub const fn ptr() -> *const mtb::RegisterBlock {
475        Self::PTR
476    }
477}
478impl Deref for MTB {
479    type Target = mtb::RegisterBlock;
480    #[inline(always)]
481    fn deref(&self) -> &Self::Target {
482        unsafe { &*Self::PTR }
483    }
484}
485impl core::fmt::Debug for MTB {
486    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
487        f.debug_struct("MTB").finish()
488    }
489}
490#[doc = "Cortex-M0+ Micro-Trace Buffer"]
491pub mod mtb;
492#[doc = "Non-Volatile Memory Controller"]
493pub struct NVMCTRL {
494    _marker: PhantomData<*const ()>,
495}
496unsafe impl Send for NVMCTRL {}
497impl NVMCTRL {
498    #[doc = r"Pointer to the register block"]
499    pub const PTR: *const nvmctrl::RegisterBlock = 0x4100_4000 as *const _;
500    #[doc = r"Return the pointer to the register block"]
501    #[inline(always)]
502    pub const fn ptr() -> *const nvmctrl::RegisterBlock {
503        Self::PTR
504    }
505}
506impl Deref for NVMCTRL {
507    type Target = nvmctrl::RegisterBlock;
508    #[inline(always)]
509    fn deref(&self) -> &Self::Target {
510        unsafe { &*Self::PTR }
511    }
512}
513impl core::fmt::Debug for NVMCTRL {
514    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
515        f.debug_struct("NVMCTRL").finish()
516    }
517}
518#[doc = "Non-Volatile Memory Controller"]
519pub mod nvmctrl;
520#[doc = "Operational Amplifier"]
521pub struct OPAMP {
522    _marker: PhantomData<*const ()>,
523}
524unsafe impl Send for OPAMP {}
525impl OPAMP {
526    #[doc = r"Pointer to the register block"]
527    pub const PTR: *const opamp::RegisterBlock = 0x4300_1800 as *const _;
528    #[doc = r"Return the pointer to the register block"]
529    #[inline(always)]
530    pub const fn ptr() -> *const opamp::RegisterBlock {
531        Self::PTR
532    }
533}
534impl Deref for OPAMP {
535    type Target = opamp::RegisterBlock;
536    #[inline(always)]
537    fn deref(&self) -> &Self::Target {
538        unsafe { &*Self::PTR }
539    }
540}
541impl core::fmt::Debug for OPAMP {
542    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
543        f.debug_struct("OPAMP").finish()
544    }
545}
546#[doc = "Operational Amplifier"]
547pub mod opamp;
548#[doc = "Oscillators Control"]
549pub struct OSCCTRL {
550    _marker: PhantomData<*const ()>,
551}
552unsafe impl Send for OSCCTRL {}
553impl OSCCTRL {
554    #[doc = r"Pointer to the register block"]
555    pub const PTR: *const oscctrl::RegisterBlock = 0x4000_0c00 as *const _;
556    #[doc = r"Return the pointer to the register block"]
557    #[inline(always)]
558    pub const fn ptr() -> *const oscctrl::RegisterBlock {
559        Self::PTR
560    }
561}
562impl Deref for OSCCTRL {
563    type Target = oscctrl::RegisterBlock;
564    #[inline(always)]
565    fn deref(&self) -> &Self::Target {
566        unsafe { &*Self::PTR }
567    }
568}
569impl core::fmt::Debug for OSCCTRL {
570    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
571        f.debug_struct("OSCCTRL").finish()
572    }
573}
574#[doc = "Oscillators Control"]
575pub mod oscctrl;
576#[doc = "32k Oscillators Control"]
577pub struct OSC32KCTRL {
578    _marker: PhantomData<*const ()>,
579}
580unsafe impl Send for OSC32KCTRL {}
581impl OSC32KCTRL {
582    #[doc = r"Pointer to the register block"]
583    pub const PTR: *const osc32kctrl::RegisterBlock = 0x4000_1000 as *const _;
584    #[doc = r"Return the pointer to the register block"]
585    #[inline(always)]
586    pub const fn ptr() -> *const osc32kctrl::RegisterBlock {
587        Self::PTR
588    }
589}
590impl Deref for OSC32KCTRL {
591    type Target = osc32kctrl::RegisterBlock;
592    #[inline(always)]
593    fn deref(&self) -> &Self::Target {
594        unsafe { &*Self::PTR }
595    }
596}
597impl core::fmt::Debug for OSC32KCTRL {
598    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
599        f.debug_struct("OSC32KCTRL").finish()
600    }
601}
602#[doc = "32k Oscillators Control"]
603pub mod osc32kctrl;
604#[doc = "Peripheral Access Controller"]
605pub struct PAC {
606    _marker: PhantomData<*const ()>,
607}
608unsafe impl Send for PAC {}
609impl PAC {
610    #[doc = r"Pointer to the register block"]
611    pub const PTR: *const pac::RegisterBlock = 0x4400_0000 as *const _;
612    #[doc = r"Return the pointer to the register block"]
613    #[inline(always)]
614    pub const fn ptr() -> *const pac::RegisterBlock {
615        Self::PTR
616    }
617}
618impl Deref for PAC {
619    type Target = pac::RegisterBlock;
620    #[inline(always)]
621    fn deref(&self) -> &Self::Target {
622        unsafe { &*Self::PTR }
623    }
624}
625impl core::fmt::Debug for PAC {
626    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
627        f.debug_struct("PAC").finish()
628    }
629}
630#[doc = "Peripheral Access Controller"]
631pub mod pac;
632#[doc = "Power Manager"]
633pub struct PM {
634    _marker: PhantomData<*const ()>,
635}
636unsafe impl Send for PM {}
637impl PM {
638    #[doc = r"Pointer to the register block"]
639    pub const PTR: *const pm::RegisterBlock = 0x4000_0000 as *const _;
640    #[doc = r"Return the pointer to the register block"]
641    #[inline(always)]
642    pub const fn ptr() -> *const pm::RegisterBlock {
643        Self::PTR
644    }
645}
646impl Deref for PM {
647    type Target = pm::RegisterBlock;
648    #[inline(always)]
649    fn deref(&self) -> &Self::Target {
650        unsafe { &*Self::PTR }
651    }
652}
653impl core::fmt::Debug for PM {
654    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
655        f.debug_struct("PM").finish()
656    }
657}
658#[doc = "Power Manager"]
659pub mod pm;
660#[doc = "Port Module"]
661pub struct PORT {
662    _marker: PhantomData<*const ()>,
663}
664unsafe impl Send for PORT {}
665impl PORT {
666    #[doc = r"Pointer to the register block"]
667    pub const PTR: *const port::RegisterBlock = 0x4000_2800 as *const _;
668    #[doc = r"Return the pointer to the register block"]
669    #[inline(always)]
670    pub const fn ptr() -> *const port::RegisterBlock {
671        Self::PTR
672    }
673}
674impl Deref for PORT {
675    type Target = port::RegisterBlock;
676    #[inline(always)]
677    fn deref(&self) -> &Self::Target {
678        unsafe { &*Self::PTR }
679    }
680}
681impl core::fmt::Debug for PORT {
682    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
683        f.debug_struct("PORT").finish()
684    }
685}
686#[doc = "Port Module"]
687pub mod port;
688#[doc = "Port Module (IOBUS)"]
689pub struct PORT_IOBUS {
690    _marker: PhantomData<*const ()>,
691}
692unsafe impl Send for PORT_IOBUS {}
693impl PORT_IOBUS {
694    #[doc = r"Pointer to the register block"]
695    pub const PTR: *const port::RegisterBlock = 0x6000_0000 as *const _;
696    #[doc = r"Return the pointer to the register block"]
697    #[inline(always)]
698    pub const fn ptr() -> *const port::RegisterBlock {
699        Self::PTR
700    }
701}
702impl Deref for PORT_IOBUS {
703    type Target = port::RegisterBlock;
704    #[inline(always)]
705    fn deref(&self) -> &Self::Target {
706        unsafe { &*Self::PTR }
707    }
708}
709impl core::fmt::Debug for PORT_IOBUS {
710    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
711        f.debug_struct("PORT_IOBUS").finish()
712    }
713}
714#[doc = "Port Module (IOBUS)"]
715pub use self::port as port_iobus;
716#[doc = "Reset Controller"]
717pub struct RSTC {
718    _marker: PhantomData<*const ()>,
719}
720unsafe impl Send for RSTC {}
721impl RSTC {
722    #[doc = r"Pointer to the register block"]
723    pub const PTR: *const rstc::RegisterBlock = 0x4000_0800 as *const _;
724    #[doc = r"Return the pointer to the register block"]
725    #[inline(always)]
726    pub const fn ptr() -> *const rstc::RegisterBlock {
727        Self::PTR
728    }
729}
730impl Deref for RSTC {
731    type Target = rstc::RegisterBlock;
732    #[inline(always)]
733    fn deref(&self) -> &Self::Target {
734        unsafe { &*Self::PTR }
735    }
736}
737impl core::fmt::Debug for RSTC {
738    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
739        f.debug_struct("RSTC").finish()
740    }
741}
742#[doc = "Reset Controller"]
743pub mod rstc;
744#[doc = "Real-Time Counter"]
745pub struct RTC {
746    _marker: PhantomData<*const ()>,
747}
748unsafe impl Send for RTC {}
749impl RTC {
750    #[doc = r"Pointer to the register block"]
751    pub const PTR: *const rtc::RegisterBlock = 0x4000_2000 as *const _;
752    #[doc = r"Return the pointer to the register block"]
753    #[inline(always)]
754    pub const fn ptr() -> *const rtc::RegisterBlock {
755        Self::PTR
756    }
757}
758impl Deref for RTC {
759    type Target = rtc::RegisterBlock;
760    #[inline(always)]
761    fn deref(&self) -> &Self::Target {
762        unsafe { &*Self::PTR }
763    }
764}
765impl core::fmt::Debug for RTC {
766    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
767        f.debug_struct("RTC").finish()
768    }
769}
770#[doc = "Real-Time Counter"]
771pub mod rtc;
772#[doc = "Serial Communication Interface 0"]
773pub struct SERCOM0 {
774    _marker: PhantomData<*const ()>,
775}
776unsafe impl Send for SERCOM0 {}
777impl SERCOM0 {
778    #[doc = r"Pointer to the register block"]
779    pub const PTR: *const sercom0::RegisterBlock = 0x4200_0000 as *const _;
780    #[doc = r"Return the pointer to the register block"]
781    #[inline(always)]
782    pub const fn ptr() -> *const sercom0::RegisterBlock {
783        Self::PTR
784    }
785}
786impl Deref for SERCOM0 {
787    type Target = sercom0::RegisterBlock;
788    #[inline(always)]
789    fn deref(&self) -> &Self::Target {
790        unsafe { &*Self::PTR }
791    }
792}
793impl core::fmt::Debug for SERCOM0 {
794    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
795        f.debug_struct("SERCOM0").finish()
796    }
797}
798#[doc = "Serial Communication Interface 0"]
799pub mod sercom0;
800#[doc = "Serial Communication Interface 1"]
801pub struct SERCOM1 {
802    _marker: PhantomData<*const ()>,
803}
804unsafe impl Send for SERCOM1 {}
805impl SERCOM1 {
806    #[doc = r"Pointer to the register block"]
807    pub const PTR: *const sercom0::RegisterBlock = 0x4200_0400 as *const _;
808    #[doc = r"Return the pointer to the register block"]
809    #[inline(always)]
810    pub const fn ptr() -> *const sercom0::RegisterBlock {
811        Self::PTR
812    }
813}
814impl Deref for SERCOM1 {
815    type Target = sercom0::RegisterBlock;
816    #[inline(always)]
817    fn deref(&self) -> &Self::Target {
818        unsafe { &*Self::PTR }
819    }
820}
821impl core::fmt::Debug for SERCOM1 {
822    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
823        f.debug_struct("SERCOM1").finish()
824    }
825}
826#[doc = "Serial Communication Interface 1"]
827pub use self::sercom0 as sercom1;
828#[doc = "Serial Communication Interface 2"]
829pub struct SERCOM2 {
830    _marker: PhantomData<*const ()>,
831}
832unsafe impl Send for SERCOM2 {}
833impl SERCOM2 {
834    #[doc = r"Pointer to the register block"]
835    pub const PTR: *const sercom0::RegisterBlock = 0x4200_0800 as *const _;
836    #[doc = r"Return the pointer to the register block"]
837    #[inline(always)]
838    pub const fn ptr() -> *const sercom0::RegisterBlock {
839        Self::PTR
840    }
841}
842impl Deref for SERCOM2 {
843    type Target = sercom0::RegisterBlock;
844    #[inline(always)]
845    fn deref(&self) -> &Self::Target {
846        unsafe { &*Self::PTR }
847    }
848}
849impl core::fmt::Debug for SERCOM2 {
850    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
851        f.debug_struct("SERCOM2").finish()
852    }
853}
854#[doc = "Serial Communication Interface 2"]
855pub use self::sercom0 as sercom2;
856#[doc = "Serial Communication Interface 3"]
857pub struct SERCOM3 {
858    _marker: PhantomData<*const ()>,
859}
860unsafe impl Send for SERCOM3 {}
861impl SERCOM3 {
862    #[doc = r"Pointer to the register block"]
863    pub const PTR: *const sercom0::RegisterBlock = 0x4200_0c00 as *const _;
864    #[doc = r"Return the pointer to the register block"]
865    #[inline(always)]
866    pub const fn ptr() -> *const sercom0::RegisterBlock {
867        Self::PTR
868    }
869}
870impl Deref for SERCOM3 {
871    type Target = sercom0::RegisterBlock;
872    #[inline(always)]
873    fn deref(&self) -> &Self::Target {
874        unsafe { &*Self::PTR }
875    }
876}
877impl core::fmt::Debug for SERCOM3 {
878    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
879        f.debug_struct("SERCOM3").finish()
880    }
881}
882#[doc = "Serial Communication Interface 3"]
883pub use self::sercom0 as sercom3;
884#[doc = "Supply Controller"]
885pub struct SUPC {
886    _marker: PhantomData<*const ()>,
887}
888unsafe impl Send for SUPC {}
889impl SUPC {
890    #[doc = r"Pointer to the register block"]
891    pub const PTR: *const supc::RegisterBlock = 0x4000_1400 as *const _;
892    #[doc = r"Return the pointer to the register block"]
893    #[inline(always)]
894    pub const fn ptr() -> *const supc::RegisterBlock {
895        Self::PTR
896    }
897}
898impl Deref for SUPC {
899    type Target = supc::RegisterBlock;
900    #[inline(always)]
901    fn deref(&self) -> &Self::Target {
902        unsafe { &*Self::PTR }
903    }
904}
905impl core::fmt::Debug for SUPC {
906    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
907        f.debug_struct("SUPC").finish()
908    }
909}
910#[doc = "Supply Controller"]
911pub mod supc;
912#[doc = "Basic Timer Counter 0"]
913pub struct TC0 {
914    _marker: PhantomData<*const ()>,
915}
916unsafe impl Send for TC0 {}
917impl TC0 {
918    #[doc = r"Pointer to the register block"]
919    pub const PTR: *const tc0::RegisterBlock = 0x4200_2000 as *const _;
920    #[doc = r"Return the pointer to the register block"]
921    #[inline(always)]
922    pub const fn ptr() -> *const tc0::RegisterBlock {
923        Self::PTR
924    }
925}
926impl Deref for TC0 {
927    type Target = tc0::RegisterBlock;
928    #[inline(always)]
929    fn deref(&self) -> &Self::Target {
930        unsafe { &*Self::PTR }
931    }
932}
933impl core::fmt::Debug for TC0 {
934    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
935        f.debug_struct("TC0").finish()
936    }
937}
938#[doc = "Basic Timer Counter 0"]
939pub mod tc0;
940#[doc = "Basic Timer Counter 1"]
941pub struct TC1 {
942    _marker: PhantomData<*const ()>,
943}
944unsafe impl Send for TC1 {}
945impl TC1 {
946    #[doc = r"Pointer to the register block"]
947    pub const PTR: *const tc0::RegisterBlock = 0x4200_2400 as *const _;
948    #[doc = r"Return the pointer to the register block"]
949    #[inline(always)]
950    pub const fn ptr() -> *const tc0::RegisterBlock {
951        Self::PTR
952    }
953}
954impl Deref for TC1 {
955    type Target = tc0::RegisterBlock;
956    #[inline(always)]
957    fn deref(&self) -> &Self::Target {
958        unsafe { &*Self::PTR }
959    }
960}
961impl core::fmt::Debug for TC1 {
962    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
963        f.debug_struct("TC1").finish()
964    }
965}
966#[doc = "Basic Timer Counter 1"]
967pub use self::tc0 as tc1;
968#[doc = "Basic Timer Counter 4"]
969pub struct TC4 {
970    _marker: PhantomData<*const ()>,
971}
972unsafe impl Send for TC4 {}
973impl TC4 {
974    #[doc = r"Pointer to the register block"]
975    pub const PTR: *const tc0::RegisterBlock = 0x4300_0800 as *const _;
976    #[doc = r"Return the pointer to the register block"]
977    #[inline(always)]
978    pub const fn ptr() -> *const tc0::RegisterBlock {
979        Self::PTR
980    }
981}
982impl Deref for TC4 {
983    type Target = tc0::RegisterBlock;
984    #[inline(always)]
985    fn deref(&self) -> &Self::Target {
986        unsafe { &*Self::PTR }
987    }
988}
989impl core::fmt::Debug for TC4 {
990    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
991        f.debug_struct("TC4").finish()
992    }
993}
994#[doc = "Basic Timer Counter 4"]
995pub use self::tc0 as tc4;
996#[doc = "Timer Counter Control 0"]
997pub struct TCC0 {
998    _marker: PhantomData<*const ()>,
999}
1000unsafe impl Send for TCC0 {}
1001impl TCC0 {
1002    #[doc = r"Pointer to the register block"]
1003    pub const PTR: *const tcc0::RegisterBlock = 0x4200_1400 as *const _;
1004    #[doc = r"Return the pointer to the register block"]
1005    #[inline(always)]
1006    pub const fn ptr() -> *const tcc0::RegisterBlock {
1007        Self::PTR
1008    }
1009}
1010impl Deref for TCC0 {
1011    type Target = tcc0::RegisterBlock;
1012    #[inline(always)]
1013    fn deref(&self) -> &Self::Target {
1014        unsafe { &*Self::PTR }
1015    }
1016}
1017impl core::fmt::Debug for TCC0 {
1018    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1019        f.debug_struct("TCC0").finish()
1020    }
1021}
1022#[doc = "Timer Counter Control 0"]
1023pub mod tcc0;
1024#[doc = "Timer Counter Control 1"]
1025pub struct TCC1 {
1026    _marker: PhantomData<*const ()>,
1027}
1028unsafe impl Send for TCC1 {}
1029impl TCC1 {
1030    #[doc = r"Pointer to the register block"]
1031    pub const PTR: *const tcc0::RegisterBlock = 0x4200_1800 as *const _;
1032    #[doc = r"Return the pointer to the register block"]
1033    #[inline(always)]
1034    pub const fn ptr() -> *const tcc0::RegisterBlock {
1035        Self::PTR
1036    }
1037}
1038impl Deref for TCC1 {
1039    type Target = tcc0::RegisterBlock;
1040    #[inline(always)]
1041    fn deref(&self) -> &Self::Target {
1042        unsafe { &*Self::PTR }
1043    }
1044}
1045impl core::fmt::Debug for TCC1 {
1046    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1047        f.debug_struct("TCC1").finish()
1048    }
1049}
1050#[doc = "Timer Counter Control 1"]
1051pub use self::tcc0 as tcc1;
1052#[doc = "Timer Counter Control 2"]
1053pub struct TCC2 {
1054    _marker: PhantomData<*const ()>,
1055}
1056unsafe impl Send for TCC2 {}
1057impl TCC2 {
1058    #[doc = r"Pointer to the register block"]
1059    pub const PTR: *const tcc0::RegisterBlock = 0x4200_1c00 as *const _;
1060    #[doc = r"Return the pointer to the register block"]
1061    #[inline(always)]
1062    pub const fn ptr() -> *const tcc0::RegisterBlock {
1063        Self::PTR
1064    }
1065}
1066impl Deref for TCC2 {
1067    type Target = tcc0::RegisterBlock;
1068    #[inline(always)]
1069    fn deref(&self) -> &Self::Target {
1070        unsafe { &*Self::PTR }
1071    }
1072}
1073impl core::fmt::Debug for TCC2 {
1074    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1075        f.debug_struct("TCC2").finish()
1076    }
1077}
1078#[doc = "Timer Counter Control 2"]
1079pub use self::tcc0 as tcc2;
1080#[doc = "True Random Generator"]
1081pub struct TRNG {
1082    _marker: PhantomData<*const ()>,
1083}
1084unsafe impl Send for TRNG {}
1085impl TRNG {
1086    #[doc = r"Pointer to the register block"]
1087    pub const PTR: *const trng::RegisterBlock = 0x4200_3800 as *const _;
1088    #[doc = r"Return the pointer to the register block"]
1089    #[inline(always)]
1090    pub const fn ptr() -> *const trng::RegisterBlock {
1091        Self::PTR
1092    }
1093}
1094impl Deref for TRNG {
1095    type Target = trng::RegisterBlock;
1096    #[inline(always)]
1097    fn deref(&self) -> &Self::Target {
1098        unsafe { &*Self::PTR }
1099    }
1100}
1101impl core::fmt::Debug for TRNG {
1102    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1103        f.debug_struct("TRNG").finish()
1104    }
1105}
1106#[doc = "True Random Generator"]
1107pub mod trng;
1108#[doc = "Universal Serial Bus"]
1109pub struct USB {
1110    _marker: PhantomData<*const ()>,
1111}
1112unsafe impl Send for USB {}
1113impl USB {
1114    #[doc = r"Pointer to the register block"]
1115    pub const PTR: *const usb::RegisterBlock = 0x4100_0000 as *const _;
1116    #[doc = r"Return the pointer to the register block"]
1117    #[inline(always)]
1118    pub const fn ptr() -> *const usb::RegisterBlock {
1119        Self::PTR
1120    }
1121}
1122impl Deref for USB {
1123    type Target = usb::RegisterBlock;
1124    #[inline(always)]
1125    fn deref(&self) -> &Self::Target {
1126        unsafe { &*Self::PTR }
1127    }
1128}
1129impl core::fmt::Debug for USB {
1130    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1131        f.debug_struct("USB").finish()
1132    }
1133}
1134#[doc = "Universal Serial Bus"]
1135pub mod usb;
1136#[doc = "Watchdog Timer"]
1137pub struct WDT {
1138    _marker: PhantomData<*const ()>,
1139}
1140unsafe impl Send for WDT {}
1141impl WDT {
1142    #[doc = r"Pointer to the register block"]
1143    pub const PTR: *const wdt::RegisterBlock = 0x4000_1c00 as *const _;
1144    #[doc = r"Return the pointer to the register block"]
1145    #[inline(always)]
1146    pub const fn ptr() -> *const wdt::RegisterBlock {
1147        Self::PTR
1148    }
1149}
1150impl Deref for WDT {
1151    type Target = wdt::RegisterBlock;
1152    #[inline(always)]
1153    fn deref(&self) -> &Self::Target {
1154        unsafe { &*Self::PTR }
1155    }
1156}
1157impl core::fmt::Debug for WDT {
1158    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
1159        f.debug_struct("WDT").finish()
1160    }
1161}
1162#[doc = "Watchdog Timer"]
1163pub mod wdt;
1164#[no_mangle]
1165static mut DEVICE_PERIPHERALS: bool = false;
1166#[doc = r" All the peripherals."]
1167#[allow(non_snake_case)]
1168pub struct Peripherals {
1169    #[doc = "AC"]
1170    pub AC: AC,
1171    #[doc = "ADC"]
1172    pub ADC: ADC,
1173    #[doc = "AES"]
1174    pub AES: AES,
1175    #[doc = "CCL"]
1176    pub CCL: CCL,
1177    #[doc = "DAC"]
1178    pub DAC: DAC,
1179    #[doc = "DMAC"]
1180    pub DMAC: DMAC,
1181    #[doc = "DSU"]
1182    pub DSU: DSU,
1183    #[doc = "EIC"]
1184    pub EIC: EIC,
1185    #[doc = "EVSYS"]
1186    pub EVSYS: EVSYS,
1187    #[doc = "GCLK"]
1188    pub GCLK: GCLK,
1189    #[doc = "MCLK"]
1190    pub MCLK: MCLK,
1191    #[doc = "MTB"]
1192    pub MTB: MTB,
1193    #[doc = "NVMCTRL"]
1194    pub NVMCTRL: NVMCTRL,
1195    #[doc = "OPAMP"]
1196    pub OPAMP: OPAMP,
1197    #[doc = "OSCCTRL"]
1198    pub OSCCTRL: OSCCTRL,
1199    #[doc = "OSC32KCTRL"]
1200    pub OSC32KCTRL: OSC32KCTRL,
1201    #[doc = "PAC"]
1202    pub PAC: PAC,
1203    #[doc = "PM"]
1204    pub PM: PM,
1205    #[doc = "PORT"]
1206    pub PORT: PORT,
1207    #[doc = "PORT_IOBUS"]
1208    pub PORT_IOBUS: PORT_IOBUS,
1209    #[doc = "RSTC"]
1210    pub RSTC: RSTC,
1211    #[doc = "RTC"]
1212    pub RTC: RTC,
1213    #[doc = "SERCOM0"]
1214    pub SERCOM0: SERCOM0,
1215    #[doc = "SERCOM1"]
1216    pub SERCOM1: SERCOM1,
1217    #[doc = "SERCOM2"]
1218    pub SERCOM2: SERCOM2,
1219    #[doc = "SERCOM3"]
1220    pub SERCOM3: SERCOM3,
1221    #[doc = "SUPC"]
1222    pub SUPC: SUPC,
1223    #[doc = "TC0"]
1224    pub TC0: TC0,
1225    #[doc = "TC1"]
1226    pub TC1: TC1,
1227    #[doc = "TC4"]
1228    pub TC4: TC4,
1229    #[doc = "TCC0"]
1230    pub TCC0: TCC0,
1231    #[doc = "TCC1"]
1232    pub TCC1: TCC1,
1233    #[doc = "TCC2"]
1234    pub TCC2: TCC2,
1235    #[doc = "TRNG"]
1236    pub TRNG: TRNG,
1237    #[doc = "USB"]
1238    pub USB: USB,
1239    #[doc = "WDT"]
1240    pub WDT: WDT,
1241}
1242impl Peripherals {
1243    #[doc = r" Returns all the peripherals *once*."]
1244    #[cfg(feature = "critical-section")]
1245    #[inline]
1246    pub fn take() -> Option<Self> {
1247        critical_section::with(|_| {
1248            if unsafe { DEVICE_PERIPHERALS } {
1249                return None;
1250            }
1251            Some(unsafe { Peripherals::steal() })
1252        })
1253    }
1254    #[doc = r" Unchecked version of `Peripherals::take`."]
1255    #[doc = r""]
1256    #[doc = r" # Safety"]
1257    #[doc = r""]
1258    #[doc = r" Each of the returned peripherals must be used at most once."]
1259    #[inline]
1260    pub unsafe fn steal() -> Self {
1261        DEVICE_PERIPHERALS = true;
1262        Peripherals {
1263            AC: AC {
1264                _marker: PhantomData,
1265            },
1266            ADC: ADC {
1267                _marker: PhantomData,
1268            },
1269            AES: AES {
1270                _marker: PhantomData,
1271            },
1272            CCL: CCL {
1273                _marker: PhantomData,
1274            },
1275            DAC: DAC {
1276                _marker: PhantomData,
1277            },
1278            DMAC: DMAC {
1279                _marker: PhantomData,
1280            },
1281            DSU: DSU {
1282                _marker: PhantomData,
1283            },
1284            EIC: EIC {
1285                _marker: PhantomData,
1286            },
1287            EVSYS: EVSYS {
1288                _marker: PhantomData,
1289            },
1290            GCLK: GCLK {
1291                _marker: PhantomData,
1292            },
1293            MCLK: MCLK {
1294                _marker: PhantomData,
1295            },
1296            MTB: MTB {
1297                _marker: PhantomData,
1298            },
1299            NVMCTRL: NVMCTRL {
1300                _marker: PhantomData,
1301            },
1302            OPAMP: OPAMP {
1303                _marker: PhantomData,
1304            },
1305            OSCCTRL: OSCCTRL {
1306                _marker: PhantomData,
1307            },
1308            OSC32KCTRL: OSC32KCTRL {
1309                _marker: PhantomData,
1310            },
1311            PAC: PAC {
1312                _marker: PhantomData,
1313            },
1314            PM: PM {
1315                _marker: PhantomData,
1316            },
1317            PORT: PORT {
1318                _marker: PhantomData,
1319            },
1320            PORT_IOBUS: PORT_IOBUS {
1321                _marker: PhantomData,
1322            },
1323            RSTC: RSTC {
1324                _marker: PhantomData,
1325            },
1326            RTC: RTC {
1327                _marker: PhantomData,
1328            },
1329            SERCOM0: SERCOM0 {
1330                _marker: PhantomData,
1331            },
1332            SERCOM1: SERCOM1 {
1333                _marker: PhantomData,
1334            },
1335            SERCOM2: SERCOM2 {
1336                _marker: PhantomData,
1337            },
1338            SERCOM3: SERCOM3 {
1339                _marker: PhantomData,
1340            },
1341            SUPC: SUPC {
1342                _marker: PhantomData,
1343            },
1344            TC0: TC0 {
1345                _marker: PhantomData,
1346            },
1347            TC1: TC1 {
1348                _marker: PhantomData,
1349            },
1350            TC4: TC4 {
1351                _marker: PhantomData,
1352            },
1353            TCC0: TCC0 {
1354                _marker: PhantomData,
1355            },
1356            TCC1: TCC1 {
1357                _marker: PhantomData,
1358            },
1359            TCC2: TCC2 {
1360                _marker: PhantomData,
1361            },
1362            TRNG: TRNG {
1363                _marker: PhantomData,
1364            },
1365            USB: USB {
1366                _marker: PhantomData,
1367            },
1368            WDT: WDT {
1369                _marker: PhantomData,
1370            },
1371        }
1372    }
1373}