stm32ral/stm32f3/peripherals/
scb.rs

1#![allow(non_snake_case, non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3//! System control block
4//!
5//! Used by: stm32f301, stm32f302, stm32f303, stm32f373, stm32f3x4, stm32f3x8
6
7use crate::{RORegister, RWRegister};
8#[cfg(not(feature = "nosync"))]
9use core::marker::PhantomData;
10
11/// CPUID base register
12pub mod CPUID {
13
14    /// Revision number
15    pub mod Revision {
16        /// Offset (0 bits)
17        pub const offset: u32 = 0;
18        /// Mask (4 bits: 0b1111 << 0)
19        pub const mask: u32 = 0b1111 << offset;
20        /// Read-only values (empty)
21        pub mod R {}
22        /// Write-only values (empty)
23        pub mod W {}
24        /// Read-write values (empty)
25        pub mod RW {}
26    }
27
28    /// Part number of the processor
29    pub mod PartNo {
30        /// Offset (4 bits)
31        pub const offset: u32 = 4;
32        /// Mask (12 bits: 0xfff << 4)
33        pub const mask: u32 = 0xfff << offset;
34        /// Read-only values (empty)
35        pub mod R {}
36        /// Write-only values (empty)
37        pub mod W {}
38        /// Read-write values (empty)
39        pub mod RW {}
40    }
41
42    /// Reads as 0xF
43    pub mod Constant {
44        /// Offset (16 bits)
45        pub const offset: u32 = 16;
46        /// Mask (4 bits: 0b1111 << 16)
47        pub const mask: u32 = 0b1111 << offset;
48        /// Read-only values (empty)
49        pub mod R {}
50        /// Write-only values (empty)
51        pub mod W {}
52        /// Read-write values (empty)
53        pub mod RW {}
54    }
55
56    /// Variant number
57    pub mod Variant {
58        /// Offset (20 bits)
59        pub const offset: u32 = 20;
60        /// Mask (4 bits: 0b1111 << 20)
61        pub const mask: u32 = 0b1111 << offset;
62        /// Read-only values (empty)
63        pub mod R {}
64        /// Write-only values (empty)
65        pub mod W {}
66        /// Read-write values (empty)
67        pub mod RW {}
68    }
69
70    /// Implementer code
71    pub mod Implementer {
72        /// Offset (24 bits)
73        pub const offset: u32 = 24;
74        /// Mask (8 bits: 0xff << 24)
75        pub const mask: u32 = 0xff << offset;
76        /// Read-only values (empty)
77        pub mod R {}
78        /// Write-only values (empty)
79        pub mod W {}
80        /// Read-write values (empty)
81        pub mod RW {}
82    }
83}
84
85/// Interrupt control and state register
86pub mod ICSR {
87
88    /// Active vector
89    pub mod VECTACTIVE {
90        /// Offset (0 bits)
91        pub const offset: u32 = 0;
92        /// Mask (9 bits: 0x1ff << 0)
93        pub const mask: u32 = 0x1ff << offset;
94        /// Read-only values (empty)
95        pub mod R {}
96        /// Write-only values (empty)
97        pub mod W {}
98        /// Read-write values (empty)
99        pub mod RW {}
100    }
101
102    /// Return to base level
103    pub mod RETTOBASE {
104        /// Offset (11 bits)
105        pub const offset: u32 = 11;
106        /// Mask (1 bit: 1 << 11)
107        pub const mask: u32 = 1 << offset;
108        /// Read-only values (empty)
109        pub mod R {}
110        /// Write-only values (empty)
111        pub mod W {}
112        /// Read-write values (empty)
113        pub mod RW {}
114    }
115
116    /// Pending vector
117    pub mod VECTPENDING {
118        /// Offset (12 bits)
119        pub const offset: u32 = 12;
120        /// Mask (7 bits: 0x7f << 12)
121        pub const mask: u32 = 0x7f << offset;
122        /// Read-only values (empty)
123        pub mod R {}
124        /// Write-only values (empty)
125        pub mod W {}
126        /// Read-write values (empty)
127        pub mod RW {}
128    }
129
130    /// Interrupt pending flag
131    pub mod ISRPENDING {
132        /// Offset (22 bits)
133        pub const offset: u32 = 22;
134        /// Mask (1 bit: 1 << 22)
135        pub const mask: u32 = 1 << offset;
136        /// Read-only values (empty)
137        pub mod R {}
138        /// Write-only values (empty)
139        pub mod W {}
140        /// Read-write values (empty)
141        pub mod RW {}
142    }
143
144    /// SysTick exception clear-pending bit
145    pub mod PENDSTCLR {
146        /// Offset (25 bits)
147        pub const offset: u32 = 25;
148        /// Mask (1 bit: 1 << 25)
149        pub const mask: u32 = 1 << offset;
150        /// Read-only values (empty)
151        pub mod R {}
152        /// Write-only values (empty)
153        pub mod W {}
154        /// Read-write values (empty)
155        pub mod RW {}
156    }
157
158    /// SysTick exception set-pending bit
159    pub mod PENDSTSET {
160        /// Offset (26 bits)
161        pub const offset: u32 = 26;
162        /// Mask (1 bit: 1 << 26)
163        pub const mask: u32 = 1 << offset;
164        /// Read-only values (empty)
165        pub mod R {}
166        /// Write-only values (empty)
167        pub mod W {}
168        /// Read-write values (empty)
169        pub mod RW {}
170    }
171
172    /// PendSV clear-pending bit
173    pub mod PENDSVCLR {
174        /// Offset (27 bits)
175        pub const offset: u32 = 27;
176        /// Mask (1 bit: 1 << 27)
177        pub const mask: u32 = 1 << offset;
178        /// Read-only values (empty)
179        pub mod R {}
180        /// Write-only values (empty)
181        pub mod W {}
182        /// Read-write values (empty)
183        pub mod RW {}
184    }
185
186    /// PendSV set-pending bit
187    pub mod PENDSVSET {
188        /// Offset (28 bits)
189        pub const offset: u32 = 28;
190        /// Mask (1 bit: 1 << 28)
191        pub const mask: u32 = 1 << offset;
192        /// Read-only values (empty)
193        pub mod R {}
194        /// Write-only values (empty)
195        pub mod W {}
196        /// Read-write values (empty)
197        pub mod RW {}
198    }
199
200    /// NMI set-pending bit.
201    pub mod NMIPENDSET {
202        /// Offset (31 bits)
203        pub const offset: u32 = 31;
204        /// Mask (1 bit: 1 << 31)
205        pub const mask: u32 = 1 << offset;
206        /// Read-only values (empty)
207        pub mod R {}
208        /// Write-only values (empty)
209        pub mod W {}
210        /// Read-write values (empty)
211        pub mod RW {}
212    }
213}
214
215/// Vector table offset register
216pub mod VTOR {
217
218    /// Vector table base offset field
219    pub mod TBLOFF {
220        /// Offset (9 bits)
221        pub const offset: u32 = 9;
222        /// Mask (21 bits: 0x1fffff << 9)
223        pub const mask: u32 = 0x1fffff << offset;
224        /// Read-only values (empty)
225        pub mod R {}
226        /// Write-only values (empty)
227        pub mod W {}
228        /// Read-write values (empty)
229        pub mod RW {}
230    }
231}
232
233/// Application interrupt and reset control register
234pub mod AIRCR {
235
236    /// VECTRESET
237    pub mod VECTRESET {
238        /// Offset (0 bits)
239        pub const offset: u32 = 0;
240        /// Mask (1 bit: 1 << 0)
241        pub const mask: u32 = 1 << offset;
242        /// Read-only values (empty)
243        pub mod R {}
244        /// Write-only values (empty)
245        pub mod W {}
246        /// Read-write values (empty)
247        pub mod RW {}
248    }
249
250    /// VECTCLRACTIVE
251    pub mod VECTCLRACTIVE {
252        /// Offset (1 bits)
253        pub const offset: u32 = 1;
254        /// Mask (1 bit: 1 << 1)
255        pub const mask: u32 = 1 << offset;
256        /// Read-only values (empty)
257        pub mod R {}
258        /// Write-only values (empty)
259        pub mod W {}
260        /// Read-write values (empty)
261        pub mod RW {}
262    }
263
264    /// SYSRESETREQ
265    pub mod SYSRESETREQ {
266        /// Offset (2 bits)
267        pub const offset: u32 = 2;
268        /// Mask (1 bit: 1 << 2)
269        pub const mask: u32 = 1 << offset;
270        /// Read-only values (empty)
271        pub mod R {}
272        /// Write-only values (empty)
273        pub mod W {}
274        /// Read-write values (empty)
275        pub mod RW {}
276    }
277
278    /// PRIGROUP
279    pub mod PRIGROUP {
280        /// Offset (8 bits)
281        pub const offset: u32 = 8;
282        /// Mask (3 bits: 0b111 << 8)
283        pub const mask: u32 = 0b111 << offset;
284        /// Read-only values (empty)
285        pub mod R {}
286        /// Write-only values (empty)
287        pub mod W {}
288        /// Read-write values (empty)
289        pub mod RW {}
290    }
291
292    /// ENDIANESS
293    pub mod ENDIANESS {
294        /// Offset (15 bits)
295        pub const offset: u32 = 15;
296        /// Mask (1 bit: 1 << 15)
297        pub const mask: u32 = 1 << offset;
298        /// Read-only values (empty)
299        pub mod R {}
300        /// Write-only values (empty)
301        pub mod W {}
302        /// Read-write values (empty)
303        pub mod RW {}
304    }
305
306    /// Register key
307    pub mod VECTKEYSTAT {
308        /// Offset (16 bits)
309        pub const offset: u32 = 16;
310        /// Mask (16 bits: 0xffff << 16)
311        pub const mask: u32 = 0xffff << offset;
312        /// Read-only values (empty)
313        pub mod R {}
314        /// Write-only values (empty)
315        pub mod W {}
316        /// Read-write values (empty)
317        pub mod RW {}
318    }
319}
320
321/// System control register
322pub mod SCR {
323
324    /// SLEEPONEXIT
325    pub mod SLEEPONEXIT {
326        /// Offset (1 bits)
327        pub const offset: u32 = 1;
328        /// Mask (1 bit: 1 << 1)
329        pub const mask: u32 = 1 << offset;
330        /// Read-only values (empty)
331        pub mod R {}
332        /// Write-only values (empty)
333        pub mod W {}
334        /// Read-write values (empty)
335        pub mod RW {}
336    }
337
338    /// SLEEPDEEP
339    pub mod SLEEPDEEP {
340        /// Offset (2 bits)
341        pub const offset: u32 = 2;
342        /// Mask (1 bit: 1 << 2)
343        pub const mask: u32 = 1 << offset;
344        /// Read-only values (empty)
345        pub mod R {}
346        /// Write-only values (empty)
347        pub mod W {}
348        /// Read-write values (empty)
349        pub mod RW {}
350    }
351
352    /// Send Event on Pending bit
353    pub mod SEVEONPEND {
354        /// Offset (4 bits)
355        pub const offset: u32 = 4;
356        /// Mask (1 bit: 1 << 4)
357        pub const mask: u32 = 1 << offset;
358        /// Read-only values (empty)
359        pub mod R {}
360        /// Write-only values (empty)
361        pub mod W {}
362        /// Read-write values (empty)
363        pub mod RW {}
364    }
365}
366
367/// Configuration and control register
368pub mod CCR {
369
370    /// Configures how the processor enters Thread mode
371    pub mod NONBASETHRDENA {
372        /// Offset (0 bits)
373        pub const offset: u32 = 0;
374        /// Mask (1 bit: 1 << 0)
375        pub const mask: u32 = 1 << offset;
376        /// Read-only values (empty)
377        pub mod R {}
378        /// Write-only values (empty)
379        pub mod W {}
380        /// Read-write values (empty)
381        pub mod RW {}
382    }
383
384    /// USERSETMPEND
385    pub mod USERSETMPEND {
386        /// Offset (1 bits)
387        pub const offset: u32 = 1;
388        /// Mask (1 bit: 1 << 1)
389        pub const mask: u32 = 1 << offset;
390        /// Read-only values (empty)
391        pub mod R {}
392        /// Write-only values (empty)
393        pub mod W {}
394        /// Read-write values (empty)
395        pub mod RW {}
396    }
397
398    /// UNALIGN_ TRP
399    pub mod UNALIGN__TRP {
400        /// Offset (3 bits)
401        pub const offset: u32 = 3;
402        /// Mask (1 bit: 1 << 3)
403        pub const mask: u32 = 1 << offset;
404        /// Read-only values (empty)
405        pub mod R {}
406        /// Write-only values (empty)
407        pub mod W {}
408        /// Read-write values (empty)
409        pub mod RW {}
410    }
411
412    /// DIV_0_TRP
413    pub mod DIV_0_TRP {
414        /// Offset (4 bits)
415        pub const offset: u32 = 4;
416        /// Mask (1 bit: 1 << 4)
417        pub const mask: u32 = 1 << offset;
418        /// Read-only values (empty)
419        pub mod R {}
420        /// Write-only values (empty)
421        pub mod W {}
422        /// Read-write values (empty)
423        pub mod RW {}
424    }
425
426    /// BFHFNMIGN
427    pub mod BFHFNMIGN {
428        /// Offset (8 bits)
429        pub const offset: u32 = 8;
430        /// Mask (1 bit: 1 << 8)
431        pub const mask: u32 = 1 << offset;
432        /// Read-only values (empty)
433        pub mod R {}
434        /// Write-only values (empty)
435        pub mod W {}
436        /// Read-write values (empty)
437        pub mod RW {}
438    }
439
440    /// STKALIGN
441    pub mod STKALIGN {
442        /// Offset (9 bits)
443        pub const offset: u32 = 9;
444        /// Mask (1 bit: 1 << 9)
445        pub const mask: u32 = 1 << offset;
446        /// Read-only values (empty)
447        pub mod R {}
448        /// Write-only values (empty)
449        pub mod W {}
450        /// Read-write values (empty)
451        pub mod RW {}
452    }
453}
454
455/// System handler priority registers
456pub mod SHPR1 {
457
458    /// Priority of system handler 4
459    pub mod PRI_4 {
460        /// Offset (0 bits)
461        pub const offset: u32 = 0;
462        /// Mask (8 bits: 0xff << 0)
463        pub const mask: u32 = 0xff << offset;
464        /// Read-only values (empty)
465        pub mod R {}
466        /// Write-only values (empty)
467        pub mod W {}
468        /// Read-write values (empty)
469        pub mod RW {}
470    }
471
472    /// Priority of system handler 5
473    pub mod PRI_5 {
474        /// Offset (8 bits)
475        pub const offset: u32 = 8;
476        /// Mask (8 bits: 0xff << 8)
477        pub const mask: u32 = 0xff << offset;
478        /// Read-only values (empty)
479        pub mod R {}
480        /// Write-only values (empty)
481        pub mod W {}
482        /// Read-write values (empty)
483        pub mod RW {}
484    }
485
486    /// Priority of system handler 6
487    pub mod PRI_6 {
488        /// Offset (16 bits)
489        pub const offset: u32 = 16;
490        /// Mask (8 bits: 0xff << 16)
491        pub const mask: u32 = 0xff << offset;
492        /// Read-only values (empty)
493        pub mod R {}
494        /// Write-only values (empty)
495        pub mod W {}
496        /// Read-write values (empty)
497        pub mod RW {}
498    }
499}
500
501/// System handler priority registers
502pub mod SHPR2 {
503
504    /// Priority of system handler 11
505    pub mod PRI_11 {
506        /// Offset (24 bits)
507        pub const offset: u32 = 24;
508        /// Mask (8 bits: 0xff << 24)
509        pub const mask: u32 = 0xff << offset;
510        /// Read-only values (empty)
511        pub mod R {}
512        /// Write-only values (empty)
513        pub mod W {}
514        /// Read-write values (empty)
515        pub mod RW {}
516    }
517}
518
519/// System handler priority registers
520pub mod SHPR3 {
521
522    /// Priority of system handler 14
523    pub mod PRI_14 {
524        /// Offset (16 bits)
525        pub const offset: u32 = 16;
526        /// Mask (8 bits: 0xff << 16)
527        pub const mask: u32 = 0xff << offset;
528        /// Read-only values (empty)
529        pub mod R {}
530        /// Write-only values (empty)
531        pub mod W {}
532        /// Read-write values (empty)
533        pub mod RW {}
534    }
535
536    /// Priority of system handler 15
537    pub mod PRI_15 {
538        /// Offset (24 bits)
539        pub const offset: u32 = 24;
540        /// Mask (8 bits: 0xff << 24)
541        pub const mask: u32 = 0xff << offset;
542        /// Read-only values (empty)
543        pub mod R {}
544        /// Write-only values (empty)
545        pub mod W {}
546        /// Read-write values (empty)
547        pub mod RW {}
548    }
549}
550
551/// System handler control and state register
552pub mod SHCRS {
553
554    /// Memory management fault exception active bit
555    pub mod MEMFAULTACT {
556        /// Offset (0 bits)
557        pub const offset: u32 = 0;
558        /// Mask (1 bit: 1 << 0)
559        pub const mask: u32 = 1 << offset;
560        /// Read-only values (empty)
561        pub mod R {}
562        /// Write-only values (empty)
563        pub mod W {}
564        /// Read-write values (empty)
565        pub mod RW {}
566    }
567
568    /// Bus fault exception active bit
569    pub mod BUSFAULTACT {
570        /// Offset (1 bits)
571        pub const offset: u32 = 1;
572        /// Mask (1 bit: 1 << 1)
573        pub const mask: u32 = 1 << offset;
574        /// Read-only values (empty)
575        pub mod R {}
576        /// Write-only values (empty)
577        pub mod W {}
578        /// Read-write values (empty)
579        pub mod RW {}
580    }
581
582    /// Usage fault exception active bit
583    pub mod USGFAULTACT {
584        /// Offset (3 bits)
585        pub const offset: u32 = 3;
586        /// Mask (1 bit: 1 << 3)
587        pub const mask: u32 = 1 << offset;
588        /// Read-only values (empty)
589        pub mod R {}
590        /// Write-only values (empty)
591        pub mod W {}
592        /// Read-write values (empty)
593        pub mod RW {}
594    }
595
596    /// SVC call active bit
597    pub mod SVCALLACT {
598        /// Offset (7 bits)
599        pub const offset: u32 = 7;
600        /// Mask (1 bit: 1 << 7)
601        pub const mask: u32 = 1 << offset;
602        /// Read-only values (empty)
603        pub mod R {}
604        /// Write-only values (empty)
605        pub mod W {}
606        /// Read-write values (empty)
607        pub mod RW {}
608    }
609
610    /// Debug monitor active bit
611    pub mod MONITORACT {
612        /// Offset (8 bits)
613        pub const offset: u32 = 8;
614        /// Mask (1 bit: 1 << 8)
615        pub const mask: u32 = 1 << offset;
616        /// Read-only values (empty)
617        pub mod R {}
618        /// Write-only values (empty)
619        pub mod W {}
620        /// Read-write values (empty)
621        pub mod RW {}
622    }
623
624    /// PendSV exception active bit
625    pub mod PENDSVACT {
626        /// Offset (10 bits)
627        pub const offset: u32 = 10;
628        /// Mask (1 bit: 1 << 10)
629        pub const mask: u32 = 1 << offset;
630        /// Read-only values (empty)
631        pub mod R {}
632        /// Write-only values (empty)
633        pub mod W {}
634        /// Read-write values (empty)
635        pub mod RW {}
636    }
637
638    /// SysTick exception active bit
639    pub mod SYSTICKACT {
640        /// Offset (11 bits)
641        pub const offset: u32 = 11;
642        /// Mask (1 bit: 1 << 11)
643        pub const mask: u32 = 1 << offset;
644        /// Read-only values (empty)
645        pub mod R {}
646        /// Write-only values (empty)
647        pub mod W {}
648        /// Read-write values (empty)
649        pub mod RW {}
650    }
651
652    /// Usage fault exception pending bit
653    pub mod USGFAULTPENDED {
654        /// Offset (12 bits)
655        pub const offset: u32 = 12;
656        /// Mask (1 bit: 1 << 12)
657        pub const mask: u32 = 1 << offset;
658        /// Read-only values (empty)
659        pub mod R {}
660        /// Write-only values (empty)
661        pub mod W {}
662        /// Read-write values (empty)
663        pub mod RW {}
664    }
665
666    /// Memory management fault exception pending bit
667    pub mod MEMFAULTPENDED {
668        /// Offset (13 bits)
669        pub const offset: u32 = 13;
670        /// Mask (1 bit: 1 << 13)
671        pub const mask: u32 = 1 << offset;
672        /// Read-only values (empty)
673        pub mod R {}
674        /// Write-only values (empty)
675        pub mod W {}
676        /// Read-write values (empty)
677        pub mod RW {}
678    }
679
680    /// Bus fault exception pending bit
681    pub mod BUSFAULTPENDED {
682        /// Offset (14 bits)
683        pub const offset: u32 = 14;
684        /// Mask (1 bit: 1 << 14)
685        pub const mask: u32 = 1 << offset;
686        /// Read-only values (empty)
687        pub mod R {}
688        /// Write-only values (empty)
689        pub mod W {}
690        /// Read-write values (empty)
691        pub mod RW {}
692    }
693
694    /// SVC call pending bit
695    pub mod SVCALLPENDED {
696        /// Offset (15 bits)
697        pub const offset: u32 = 15;
698        /// Mask (1 bit: 1 << 15)
699        pub const mask: u32 = 1 << offset;
700        /// Read-only values (empty)
701        pub mod R {}
702        /// Write-only values (empty)
703        pub mod W {}
704        /// Read-write values (empty)
705        pub mod RW {}
706    }
707
708    /// Memory management fault enable bit
709    pub mod MEMFAULTENA {
710        /// Offset (16 bits)
711        pub const offset: u32 = 16;
712        /// Mask (1 bit: 1 << 16)
713        pub const mask: u32 = 1 << offset;
714        /// Read-only values (empty)
715        pub mod R {}
716        /// Write-only values (empty)
717        pub mod W {}
718        /// Read-write values (empty)
719        pub mod RW {}
720    }
721
722    /// Bus fault enable bit
723    pub mod BUSFAULTENA {
724        /// Offset (17 bits)
725        pub const offset: u32 = 17;
726        /// Mask (1 bit: 1 << 17)
727        pub const mask: u32 = 1 << offset;
728        /// Read-only values (empty)
729        pub mod R {}
730        /// Write-only values (empty)
731        pub mod W {}
732        /// Read-write values (empty)
733        pub mod RW {}
734    }
735
736    /// Usage fault enable bit
737    pub mod USGFAULTENA {
738        /// Offset (18 bits)
739        pub const offset: u32 = 18;
740        /// Mask (1 bit: 1 << 18)
741        pub const mask: u32 = 1 << offset;
742        /// Read-only values (empty)
743        pub mod R {}
744        /// Write-only values (empty)
745        pub mod W {}
746        /// Read-write values (empty)
747        pub mod RW {}
748    }
749}
750
751/// Configurable fault status register
752pub mod CFSR_UFSR_BFSR_MMFSR {
753
754    /// Instruction access violation flag
755    pub mod IACCVIOL {
756        /// Offset (1 bits)
757        pub const offset: u32 = 1;
758        /// Mask (1 bit: 1 << 1)
759        pub const mask: u32 = 1 << offset;
760        /// Read-only values (empty)
761        pub mod R {}
762        /// Write-only values (empty)
763        pub mod W {}
764        /// Read-write values (empty)
765        pub mod RW {}
766    }
767
768    /// Memory manager fault on unstacking for a return from exception
769    pub mod MUNSTKERR {
770        /// Offset (3 bits)
771        pub const offset: u32 = 3;
772        /// Mask (1 bit: 1 << 3)
773        pub const mask: u32 = 1 << offset;
774        /// Read-only values (empty)
775        pub mod R {}
776        /// Write-only values (empty)
777        pub mod W {}
778        /// Read-write values (empty)
779        pub mod RW {}
780    }
781
782    /// Memory manager fault on stacking for exception entry.
783    pub mod MSTKERR {
784        /// Offset (4 bits)
785        pub const offset: u32 = 4;
786        /// Mask (1 bit: 1 << 4)
787        pub const mask: u32 = 1 << offset;
788        /// Read-only values (empty)
789        pub mod R {}
790        /// Write-only values (empty)
791        pub mod W {}
792        /// Read-write values (empty)
793        pub mod RW {}
794    }
795
796    /// MLSPERR
797    pub mod MLSPERR {
798        /// Offset (5 bits)
799        pub const offset: u32 = 5;
800        /// Mask (1 bit: 1 << 5)
801        pub const mask: u32 = 1 << offset;
802        /// Read-only values (empty)
803        pub mod R {}
804        /// Write-only values (empty)
805        pub mod W {}
806        /// Read-write values (empty)
807        pub mod RW {}
808    }
809
810    /// Memory Management Fault Address Register (MMAR) valid flag
811    pub mod MMARVALID {
812        /// Offset (7 bits)
813        pub const offset: u32 = 7;
814        /// Mask (1 bit: 1 << 7)
815        pub const mask: u32 = 1 << offset;
816        /// Read-only values (empty)
817        pub mod R {}
818        /// Write-only values (empty)
819        pub mod W {}
820        /// Read-write values (empty)
821        pub mod RW {}
822    }
823
824    /// Instruction bus error
825    pub mod IBUSERR {
826        /// Offset (8 bits)
827        pub const offset: u32 = 8;
828        /// Mask (1 bit: 1 << 8)
829        pub const mask: u32 = 1 << offset;
830        /// Read-only values (empty)
831        pub mod R {}
832        /// Write-only values (empty)
833        pub mod W {}
834        /// Read-write values (empty)
835        pub mod RW {}
836    }
837
838    /// Precise data bus error
839    pub mod PRECISERR {
840        /// Offset (9 bits)
841        pub const offset: u32 = 9;
842        /// Mask (1 bit: 1 << 9)
843        pub const mask: u32 = 1 << offset;
844        /// Read-only values (empty)
845        pub mod R {}
846        /// Write-only values (empty)
847        pub mod W {}
848        /// Read-write values (empty)
849        pub mod RW {}
850    }
851
852    /// Imprecise data bus error
853    pub mod IMPRECISERR {
854        /// Offset (10 bits)
855        pub const offset: u32 = 10;
856        /// Mask (1 bit: 1 << 10)
857        pub const mask: u32 = 1 << offset;
858        /// Read-only values (empty)
859        pub mod R {}
860        /// Write-only values (empty)
861        pub mod W {}
862        /// Read-write values (empty)
863        pub mod RW {}
864    }
865
866    /// Bus fault on unstacking for a return from exception
867    pub mod UNSTKERR {
868        /// Offset (11 bits)
869        pub const offset: u32 = 11;
870        /// Mask (1 bit: 1 << 11)
871        pub const mask: u32 = 1 << offset;
872        /// Read-only values (empty)
873        pub mod R {}
874        /// Write-only values (empty)
875        pub mod W {}
876        /// Read-write values (empty)
877        pub mod RW {}
878    }
879
880    /// Bus fault on stacking for exception entry
881    pub mod STKERR {
882        /// Offset (12 bits)
883        pub const offset: u32 = 12;
884        /// Mask (1 bit: 1 << 12)
885        pub const mask: u32 = 1 << offset;
886        /// Read-only values (empty)
887        pub mod R {}
888        /// Write-only values (empty)
889        pub mod W {}
890        /// Read-write values (empty)
891        pub mod RW {}
892    }
893
894    /// Bus fault on floating-point lazy state preservation
895    pub mod LSPERR {
896        /// Offset (13 bits)
897        pub const offset: u32 = 13;
898        /// Mask (1 bit: 1 << 13)
899        pub const mask: u32 = 1 << offset;
900        /// Read-only values (empty)
901        pub mod R {}
902        /// Write-only values (empty)
903        pub mod W {}
904        /// Read-write values (empty)
905        pub mod RW {}
906    }
907
908    /// Bus Fault Address Register (BFAR) valid flag
909    pub mod BFARVALID {
910        /// Offset (15 bits)
911        pub const offset: u32 = 15;
912        /// Mask (1 bit: 1 << 15)
913        pub const mask: u32 = 1 << offset;
914        /// Read-only values (empty)
915        pub mod R {}
916        /// Write-only values (empty)
917        pub mod W {}
918        /// Read-write values (empty)
919        pub mod RW {}
920    }
921
922    /// Undefined instruction usage fault
923    pub mod UNDEFINSTR {
924        /// Offset (16 bits)
925        pub const offset: u32 = 16;
926        /// Mask (1 bit: 1 << 16)
927        pub const mask: u32 = 1 << offset;
928        /// Read-only values (empty)
929        pub mod R {}
930        /// Write-only values (empty)
931        pub mod W {}
932        /// Read-write values (empty)
933        pub mod RW {}
934    }
935
936    /// Invalid state usage fault
937    pub mod INVSTATE {
938        /// Offset (17 bits)
939        pub const offset: u32 = 17;
940        /// Mask (1 bit: 1 << 17)
941        pub const mask: u32 = 1 << offset;
942        /// Read-only values (empty)
943        pub mod R {}
944        /// Write-only values (empty)
945        pub mod W {}
946        /// Read-write values (empty)
947        pub mod RW {}
948    }
949
950    /// Invalid PC load usage fault
951    pub mod INVPC {
952        /// Offset (18 bits)
953        pub const offset: u32 = 18;
954        /// Mask (1 bit: 1 << 18)
955        pub const mask: u32 = 1 << offset;
956        /// Read-only values (empty)
957        pub mod R {}
958        /// Write-only values (empty)
959        pub mod W {}
960        /// Read-write values (empty)
961        pub mod RW {}
962    }
963
964    /// No coprocessor usage fault.
965    pub mod NOCP {
966        /// Offset (19 bits)
967        pub const offset: u32 = 19;
968        /// Mask (1 bit: 1 << 19)
969        pub const mask: u32 = 1 << offset;
970        /// Read-only values (empty)
971        pub mod R {}
972        /// Write-only values (empty)
973        pub mod W {}
974        /// Read-write values (empty)
975        pub mod RW {}
976    }
977
978    /// Unaligned access usage fault
979    pub mod UNALIGNED {
980        /// Offset (24 bits)
981        pub const offset: u32 = 24;
982        /// Mask (1 bit: 1 << 24)
983        pub const mask: u32 = 1 << offset;
984        /// Read-only values (empty)
985        pub mod R {}
986        /// Write-only values (empty)
987        pub mod W {}
988        /// Read-write values (empty)
989        pub mod RW {}
990    }
991
992    /// Divide by zero usage fault
993    pub mod DIVBYZERO {
994        /// Offset (25 bits)
995        pub const offset: u32 = 25;
996        /// Mask (1 bit: 1 << 25)
997        pub const mask: u32 = 1 << offset;
998        /// Read-only values (empty)
999        pub mod R {}
1000        /// Write-only values (empty)
1001        pub mod W {}
1002        /// Read-write values (empty)
1003        pub mod RW {}
1004    }
1005}
1006
1007/// Hard fault status register
1008pub mod HFSR {
1009
1010    /// Vector table hard fault
1011    pub mod VECTTBL {
1012        /// Offset (1 bits)
1013        pub const offset: u32 = 1;
1014        /// Mask (1 bit: 1 << 1)
1015        pub const mask: u32 = 1 << offset;
1016        /// Read-only values (empty)
1017        pub mod R {}
1018        /// Write-only values (empty)
1019        pub mod W {}
1020        /// Read-write values (empty)
1021        pub mod RW {}
1022    }
1023
1024    /// Forced hard fault
1025    pub mod FORCED {
1026        /// Offset (30 bits)
1027        pub const offset: u32 = 30;
1028        /// Mask (1 bit: 1 << 30)
1029        pub const mask: u32 = 1 << offset;
1030        /// Read-only values (empty)
1031        pub mod R {}
1032        /// Write-only values (empty)
1033        pub mod W {}
1034        /// Read-write values (empty)
1035        pub mod RW {}
1036    }
1037
1038    /// Reserved for Debug use
1039    pub mod DEBUG_VT {
1040        /// Offset (31 bits)
1041        pub const offset: u32 = 31;
1042        /// Mask (1 bit: 1 << 31)
1043        pub const mask: u32 = 1 << offset;
1044        /// Read-only values (empty)
1045        pub mod R {}
1046        /// Write-only values (empty)
1047        pub mod W {}
1048        /// Read-write values (empty)
1049        pub mod RW {}
1050    }
1051}
1052
1053/// Memory management fault address register
1054pub mod MMFAR {
1055
1056    /// Memory management fault address
1057    pub mod MMFAR {
1058        /// Offset (0 bits)
1059        pub const offset: u32 = 0;
1060        /// Mask (32 bits: 0xffffffff << 0)
1061        pub const mask: u32 = 0xffffffff << offset;
1062        /// Read-only values (empty)
1063        pub mod R {}
1064        /// Write-only values (empty)
1065        pub mod W {}
1066        /// Read-write values (empty)
1067        pub mod RW {}
1068    }
1069}
1070
1071/// Bus fault address register
1072pub mod BFAR {
1073
1074    /// Bus fault address
1075    pub mod BFAR {
1076        /// Offset (0 bits)
1077        pub const offset: u32 = 0;
1078        /// Mask (32 bits: 0xffffffff << 0)
1079        pub const mask: u32 = 0xffffffff << offset;
1080        /// Read-only values (empty)
1081        pub mod R {}
1082        /// Write-only values (empty)
1083        pub mod W {}
1084        /// Read-write values (empty)
1085        pub mod RW {}
1086    }
1087}
1088
1089/// Auxiliary fault status register
1090pub mod AFSR {
1091
1092    /// Implementation defined
1093    pub mod IMPDEF {
1094        /// Offset (0 bits)
1095        pub const offset: u32 = 0;
1096        /// Mask (32 bits: 0xffffffff << 0)
1097        pub const mask: u32 = 0xffffffff << offset;
1098        /// Read-only values (empty)
1099        pub mod R {}
1100        /// Write-only values (empty)
1101        pub mod W {}
1102        /// Read-write values (empty)
1103        pub mod RW {}
1104    }
1105}
1106#[repr(C)]
1107pub struct RegisterBlock {
1108    /// CPUID base register
1109    pub CPUID: RORegister<u32>,
1110
1111    /// Interrupt control and state register
1112    pub ICSR: RWRegister<u32>,
1113
1114    /// Vector table offset register
1115    pub VTOR: RWRegister<u32>,
1116
1117    /// Application interrupt and reset control register
1118    pub AIRCR: RWRegister<u32>,
1119
1120    /// System control register
1121    pub SCR: RWRegister<u32>,
1122
1123    /// Configuration and control register
1124    pub CCR: RWRegister<u32>,
1125
1126    /// System handler priority registers
1127    pub SHPR1: RWRegister<u32>,
1128
1129    /// System handler priority registers
1130    pub SHPR2: RWRegister<u32>,
1131
1132    /// System handler priority registers
1133    pub SHPR3: RWRegister<u32>,
1134
1135    /// System handler control and state register
1136    pub SHCRS: RWRegister<u32>,
1137
1138    /// Configurable fault status register
1139    pub CFSR_UFSR_BFSR_MMFSR: RWRegister<u32>,
1140
1141    /// Hard fault status register
1142    pub HFSR: RWRegister<u32>,
1143
1144    _reserved1: [u8; 4],
1145
1146    /// Memory management fault address register
1147    pub MMFAR: RWRegister<u32>,
1148
1149    /// Bus fault address register
1150    pub BFAR: RWRegister<u32>,
1151
1152    /// Auxiliary fault status register
1153    pub AFSR: RWRegister<u32>,
1154}
1155pub struct ResetValues {
1156    pub CPUID: u32,
1157    pub ICSR: u32,
1158    pub VTOR: u32,
1159    pub AIRCR: u32,
1160    pub SCR: u32,
1161    pub CCR: u32,
1162    pub SHPR1: u32,
1163    pub SHPR2: u32,
1164    pub SHPR3: u32,
1165    pub SHCRS: u32,
1166    pub CFSR_UFSR_BFSR_MMFSR: u32,
1167    pub HFSR: u32,
1168    pub MMFAR: u32,
1169    pub BFAR: u32,
1170    pub AFSR: u32,
1171}
1172#[cfg(not(feature = "nosync"))]
1173pub struct Instance {
1174    pub(crate) addr: u32,
1175    pub(crate) _marker: PhantomData<*const RegisterBlock>,
1176}
1177#[cfg(not(feature = "nosync"))]
1178impl ::core::ops::Deref for Instance {
1179    type Target = RegisterBlock;
1180    #[inline(always)]
1181    fn deref(&self) -> &RegisterBlock {
1182        unsafe { &*(self.addr as *const _) }
1183    }
1184}
1185#[cfg(feature = "rtic")]
1186unsafe impl Send for Instance {}