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