File : s-bbsuer.ads
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
4 -- --
5 -- S Y S T E M . B B . B O A R D _ S U P P O R T . E R C 3 2 --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 1999-2002 Universidad Politecnica de Madrid --
10 -- Copyright (C) 2003-2004 The European Space Agency --
11 -- Copyright (C) 2003-2011, AdaCore --
12 -- --
13 -- GNAT is free software; you can redistribute it and/or modify it under --
14 -- terms of the GNU General Public License as published by the Free Soft- --
15 -- ware Foundation; either version 3, or (at your option) any later ver- --
16 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
17 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
18 -- or FITNESS FOR A PARTICULAR PURPOSE. --
19 -- --
20 -- --
21 -- --
22 -- --
23 -- --
24 -- You should have received a copy of the GNU General Public License and --
25 -- a copy of the GCC Runtime Library Exception along with this program; --
26 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
27 -- <http://www.gnu.org/licenses/>. --
28 -- --
29 -- GNARL was developed by the GNARL team at Florida State University. --
30 -- Extensive contributions were provided by Ada Core Technologies, Inc. --
31 -- --
32 -- The port of GNARL to bare board targets was initially developed by the --
33 -- Real-Time Systems Group at the Technical University of Madrid. --
34 -- --
35 ------------------------------------------------------------------------------
36
37 -- This package provides the appropriate mapping for the system registers.
38 -- This is an ERC32 specific package.
39
40 pragma Restrictions (No_Elaboration_Code);
41
42 package System.BB.Board_Support.ERC32 is
43 pragma Preelaborate;
44
45 -- Warning : The bit numbering within a register is opposed to the
46 -- bit numbering of MEC Specification Document (MCD/SPC/0009/SE).
47
48 -- It seems to be a big-endian/little-endian notation problem.
49 -- System.Default_Bit_Order is HIGH_ORDER_FIRST for this target.
50
51 -- Pragma Suppress_Initialization (register_type) must be used in order
52 -- to keep eficiency. Otherwise, initialization procedures are always
53 -- generated for objects of packed boolean array types and of records types
54 -- that have components of these types.
55
56 ----------------------------
57 -- Local type definitions --
58 ----------------------------
59
60 type Scaler_8 is mod 2 ** 8;
61 for Scaler_8'Size use 8;
62 -- 8-bit scaler
63
64 type Scaler_16 is mod 2 ** 16;
65 for Scaler_16'Size use 16;
66 -- 16-bit scaler
67
68 type Timers_Counter is mod 2 ** 32;
69 for Timers_Counter'Size use 32;
70 -- Timer counters are 32-bit registers
71
72 type Segment_Address is mod 2 ** 23;
73 for Segment_Address'Size use 23;
74
75 type Check_Bits_Type is array (0 .. 6) of Boolean;
76 for Check_Bits_Type'Size use 7;
77 pragma Pack (Check_Bits_Type);
78
79 type Reserved_4 is array (0 .. 3) of Boolean;
80 for Reserved_4'Size use 4;
81 pragma Pack (Reserved_4);
82
83 type Reserved_7 is array (0 .. 6) of Boolean;
84 for Reserved_7'Size use 7;
85 pragma Pack (Reserved_7);
86
87 type Reserved_8 is array (0 .. 7) of Boolean;
88 for Reserved_8'Size use 8;
89 pragma Pack (Reserved_8);
90
91 type Reserved_9 is array (0 .. 8) of Boolean;
92 for Reserved_9'Size use 9;
93 pragma Pack (Reserved_9);
94
95 type Reserved_10 is array (0 .. 9) of Boolean;
96 for Reserved_10'Size use 10;
97 pragma Pack (Reserved_10);
98
99 type Reserved_11 is array (0 .. 10) of Boolean;
100 for Reserved_11'Size use 11;
101 pragma Pack (Reserved_11);
102
103 type Reserved_16 is array (0 .. 15) of Boolean;
104 for Reserved_16'Size use 16;
105 pragma Pack (Reserved_16);
106
107 type Reserved_17 is array (0 .. 16) of Boolean;
108 for Reserved_17'Size use 17;
109 pragma Pack (Reserved_17);
110
111 type Reserved_20 is array (0 .. 19) of Boolean;
112 for Reserved_20'Size use 20;
113 pragma Pack (Reserved_20);
114
115 type Reserved_24 is array (0 .. 23) of Boolean;
116 for Reserved_24'Size use 24;
117 pragma Pack (Reserved_24);
118
119 ------------------------------------------
120 -- Addresses of memory mapped registers --
121 ------------------------------------------
122
123 Control_Register_Address :
124 constant System.Address := System'To_Address (16#1F80000#);
125
126 Test_Control_Register_Address :
127 constant System.Address := System'To_Address (16#01F800D0#);
128
129 Real_Time_Clock_Counter_Address :
130 constant System.Address := System'To_Address (16#1F80080#);
131
132 General_Purpose_Timer_Counter_Address :
133 constant System.Address := System'To_Address (16#01F80088#);
134
135 Real_Time_Clock_Scaler_Address :
136 constant System.Address := System'To_Address (16#01F80084#);
137
138 General_Purpose_Timer_Scaler_Address :
139 constant System.Address := System'To_Address (16#01F8008C#);
140
141 Timer_Control_Register_Address :
142 constant System.Address := System'To_Address (16#01F80098#);
143
144 Watchdog_Trap_Door_Set_Register_Address :
145 constant System.Address := System'To_Address (16#01F80064#);
146
147 Access_Protection_Segment_1_Base_Register_Address :
148 constant System.Address := System'To_Address (16#01F80020#);
149
150 Access_Protection_Segment_2_Base_Register_Address :
151 constant System.Address := System'To_Address (16#01F80028#);
152
153 Access_Protection_Segment_1_End_Register_Address :
154 constant System.Address := System'To_Address (16#01F80024#);
155
156 Access_Protection_Segment_2_End_Register_Address :
157 constant System.Address := System'To_Address (16#01F8002C#);
158
159 Interrupt_Mask_Register_Address :
160 constant System.Address := System'To_Address (16#01F8004C#);
161
162 Interrupt_Force_Register_Address :
163 constant System.Address := System'To_Address (16#01F80054#);
164
165 UART_Channel_A_Rx_Tx_Register_Address :
166 constant System.Address := System'To_Address (16#01F800E0#);
167
168 UART_Channel_B_Rx_Tx_Register_Address :
169 constant System.Address := System'To_Address (16#01F800E4#);
170
171 UART_Status_Register_Address :
172 constant System.Address := System'To_Address (16#01F800E8#);
173
174 ----------------------
175 -- Control Register --
176 ----------------------
177
178 type Control_Register is
179 record
180 PRD : Boolean;
181 -- Power-down 1 : enabled (allowed) 0 : disabled r/w
182
183 SWR : Boolean;
184 -- Software reset 1 : enabled (allowed) 0 : disabled r/w
185
186 BTO : Boolean;
187 -- Bus timeout 1 : enabled 0 : disabled r/w
188
189 BP : Boolean;
190 -- Block protection instead of normal access protection
191 -- 1 : enabled 0 : disabled r/w
192
193 WDCS : Boolean;
194 -- Watchdog clock supply
195 -- 1 : external clock with prescaler (divide by 16)
196 -- 0 : external clock, no prescaler r/w
197
198 IUEMMSK : Boolean;
199 -- IU Error Mode Mask 1 : Error masked (= disabled)
200 -- 0 : Error not masked r/w
201
202 RHIUEM : Boolean;
203 -- Reset or Halt when IU error mode (ERROR*)
204 -- 1 : Reset 0 : Halt r/w
205
206 IUHEMSK : Boolean;
207 -- IU Hardware Error Mask
208 -- 1 : Error masked (= disabled) 0 : Error not masked r/w
209
210 RHIUHE : Boolean;
211 -- Reset or Halt when IU Hardware Error (HWERR*)
212 -- 1 : Reset 0 : Halt r/w
213
214 IUCMPMSK : Boolean;
215 -- IU Comparison Error Mask
216 -- 1 : Error masked (= disabled) 0 : Error not masked r/w
217
218 RHIUCMP : Boolean;
219 -- Reset or Halt when IU comparison error 1 : Reset 0 : Halt r/w
220
221 FPUCMPMSK : Boolean;
222 -- FPU Comparison Error Mask
223 -- 1 : Error masked (= disabled) 0 : Error not masked r/w
224
225 RHFPUCMP : Boolean;
226 -- Reset or Halt when FPU comparison error
227 -- 1 : Reset 0 : Halt r/w
228
229 MECHEMSK : Boolean;
230 -- MEC HW Error Mask
231 -- 1 : Error masked (= disabled) 0 : Error not masked r/w
232
233 RHMECHE : Boolean;
234 -- Reset or Halt when MEC HW Error (MECHWERR)
235 -- 1 : Reset 0 : Halt r/w
236
237 RESERVED : Boolean;
238 -- Not used r
239
240 DMAE : Boolean;
241 -- 1 DMA 1 : enabled 0 : disabled r/w
242
243 DPE : Boolean;
244 -- DMA Parity Enabled 1 : enabled 0 : disabled r/w
245
246 DST : Boolean;
247 -- DMA session timeout 1 : enabled 0 : disabled r/w
248
249 UBR : Boolean;
250 -- UART baud rate(1)
251 -- 1 : No change of UART scaler baudrate
252 -- 0 : Divide UART scaler baudrate by two r/w
253
254 UPE : Boolean;
255 -- UART parity enable
256 -- 1 : parity enabled 0 : no parity r/w
257
258 UP : Boolean;
259 -- UART parity 1 : odd parity 0 : even parity r/w
260
261 USB : Boolean;
262 -- UART stop bits 1 : two stop bits 0 : one stop bit r/w
263
264 UCS : Boolean;
265 -- UART clock supply 1 : system clock 0 : external clock r/w
266
267 UART_Scaler : Scaler_8;
268 -- 1 - 255 : Divide factor (1) 0: stops the UART clock r/w
269 end record;
270
271 for Control_Register use
272 record
273 PRD at 0 range 31 .. 31;
274 SWR at 0 range 30 .. 30;
275 BTO at 0 range 29 .. 29;
276 BP at 0 range 28 .. 28;
277 WDCS at 0 range 27 .. 27;
278 IUEMMSK at 0 range 26 .. 26;
279 RHIUEM at 0 range 25 .. 25;
280 IUHEMSK at 0 range 24 .. 24;
281 RHIUHE at 0 range 23 .. 23;
282 IUCMPMSK at 0 range 22 .. 22;
283 RHIUCMP at 0 range 21 .. 21;
284 FPUCMPMSK at 0 range 20 .. 20;
285 RHFPUCMP at 0 range 19 .. 19;
286 MECHEMSK at 0 range 18 .. 18;
287 RHMECHE at 0 range 17 .. 17;
288 RESERVED at 0 range 16 .. 16;
289 DMAE at 0 range 15 .. 15;
290 DPE at 0 range 14 .. 14;
291 DST at 0 range 13 .. 13;
292 UBR at 0 range 12 .. 12;
293 UPE at 0 range 11 .. 11;
294 UP at 0 range 10 .. 10;
295 USB at 0 range 9 .. 9;
296 UCS at 0 range 8 .. 8;
297 UART_scaler at 0 range 0 .. 7;
298 end record;
299
300 for Control_Register'Size use 32;
301
302 pragma Suppress_Initialization (Control_Register);
303
304 Control : Control_Register;
305 pragma Atomic (Control);
306 for Control'Address use Control_Register_Address;
307
308 ------------------
309 -- Test Control --
310 ------------------
311
312 type Test_Control_Register is
313 record
314 Check_Bits : Check_Bits_Type;
315 -- CB 0 Check bits r/w
316
317 Reserved10 : Reserved_10;
318 -- 0 Not used r
319
320 EDAC_Test_Enable : Boolean;
321 -- ET 0 EDAC test enable
322 -- 0: Testing disabled, 1: Memory test enabled, r/w
323
324 Parity_Test : Boolean;
325 -- PT 0 Parity test
326 -- 1 : test enabled, 0 : test disabled, r/w
327
328 Interrupt_Force_Register_Write_Enable : Boolean;
329 -- IT 0 Interrupt Force Register Write Enable
330 -- 1 : enabled, 0 : disabled, r/w
331
332 Error_Write_Enable : Boolean;
333 -- EWE 0 Error Write Enable
334 -- 1: Write to Error and Reset Status Register enabled
335 -- 0: Write to Error and Reset Status Register disabled, r/w
336
337 Reserved11 : Reserved_11;
338 -- 0 Not used r
339 end record;
340
341 for Test_Control_Register use
342 record
343 Check_Bits at 0 range 25 .. 31;
344 Reserved10 at 0 range 15 .. 24;
345 EDAC_Test_Enable at 0 range 14 .. 14;
346 Parity_Test at 0 range 13 .. 13;
347 Interrupt_Force_Register_Write_Enable at 0 range 12 .. 12;
348 Error_Write_Enable at 0 range 11 .. 11;
349 Reserved11 at 0 range 0 .. 10;
350 end record;
351
352 for Test_Control_Register'Size use 32;
353
354 pragma Suppress_Initialization (Test_Control_Register);
355
356 Test_Control : Test_Control_Register;
357 pragma Atomic (Test_Control);
358 for Test_Control'Address use Test_Control_Register_Address;
359
360 -----------------------------
361 -- Real Time Clock Counter --
362 -----------------------------
363
364 Real_Time_Clock_Counter : Timers_Counter;
365 for Real_Time_Clock_Counter'Address use Real_Time_Clock_Counter_Address;
366
367 -----------------------------------
368 -- General Purpose Timer Counter --
369 -----------------------------------
370
371 General_Purpose_Timer_Counter : Timers_Counter;
372 for General_Purpose_Timer_Counter'Address use
373 General_Purpose_Timer_Counter_Address;
374
375 ----------------------------
376 -- Real Time Clock Scaler --
377 ----------------------------
378
379 type Real_Time_Clock_Scaler_Register is
380 record
381 RTCS : Scaler_8;
382 Reserved : Reserved_24;
383 end record;
384
385 for Real_Time_Clock_Scaler_Register use
386 record
387 RTCS at 0 range 24 .. 31;
388 Reserved at 0 range 0 .. 23;
389 end record;
390
391 for Real_Time_Clock_Scaler_Register'Size use 32;
392
393 pragma Suppress_Initialization (Real_Time_Clock_Scaler_Register);
394
395 Real_Time_Clock_Scaler : Real_Time_Clock_Scaler_Register;
396 pragma Atomic (Real_Time_Clock_Scaler);
397 for Real_Time_Clock_Scaler'Address use Real_Time_Clock_Scaler_Address;
398
399 ----------------------------------
400 -- General Purpose Timer Scaler --
401 ----------------------------------
402
403 type General_Purpose_Timer_Scaler_Register is
404 record
405 GPTS : Scaler_16;
406 Reserved : Reserved_16;
407 end record;
408
409 for General_Purpose_Timer_Scaler_Register use
410 record
411 GPTS at 0 range 16 .. 31;
412 Reserved at 0 range 0 .. 15;
413 end record;
414
415 for General_Purpose_Timer_Scaler_Register'Size use 32;
416
417 pragma Suppress_Initialization (General_Purpose_Timer_Scaler_Register);
418
419 General_Purpose_Timer_Scaler : General_Purpose_Timer_Scaler_Register;
420 pragma Atomic (General_Purpose_Timer_Scaler);
421 for General_Purpose_Timer_Scaler'Address use
422 General_Purpose_Timer_Scaler_Address;
423
424 -------------------
425 -- Timer Control --
426 -------------------
427
428 type Timer_Control_Register is
429 record
430 GCR : Boolean; -- General Purpose Timer Counter Reload
431 -- 1 : reload counter at zero and restart
432 -- 0 : stop counter at zero w
433
434 GCL : Boolean; -- General Purpose Timer counter load
435 -- 1 : load counter with preset value and start if enabled
436 -- 0 : no function w
437
438 GSE : Boolean; -- General Purpose Timer enable
439 -- 1 : enable counting
440 -- 0 : hold scaler (and counter) w
441
442 GSL : Boolean; -- General Purpose Timer Scaler load
443 -- 1 : load scaler with preset value and start if enabled
444 -- 0 : no function w
445
446 Reserved4 : Reserved_4; -- 0 Not used r
447
448 RTCCR : Boolean; -- Real Time Clock Counter Reload
449 -- 1 : reload counter at zero and restart
450 -- 0 : stop counter at zero w
451
452 RTCCL : Boolean; -- Real Time Clock counter load
453 -- 1 : load counter with preset value and start if enabled
454 -- 0 : no function w
455
456 RTCSE : Boolean; -- Real Time Clock Scaler enable
457 -- 1 : enable counting
458 -- 0 : hold scaler (and counter) w
459
460 RTCSL : Boolean; -- Real Time Clock Scaler load
461 -- 1 : load scaler with preset value and start if enabled
462 -- 0 : no function w
463
464 Reserved20 : Reserved_20; -- 0h Not used
465 end record;
466
467 for Timer_Control_Register use
468 record
469 GCR at 0 range 31 .. 31;
470 GCL at 0 range 30 .. 30;
471 GSE at 0 range 29 .. 29;
472 GSL at 0 range 28 .. 28;
473 Reserved4 at 0 range 24 .. 27;
474 RTCCR at 0 range 23 .. 23;
475 RTCCL at 0 range 22 .. 22;
476 RTCSE at 0 range 21 .. 21;
477 RTCSL at 0 range 20 .. 20;
478 Reserved20 at 0 range 0 .. 19;
479 end record;
480
481 for Timer_Control_Register'Size use 32;
482
483 pragma Suppress_Initialization (Timer_Control_Register);
484
485 Timer_Control : Timer_Control_Register;
486 pragma Atomic (Timer_Control);
487 for Timer_Control'Address use Timer_Control_Register_Address;
488
489 ----------------------------
490 -- Watchdog Trap Door Set --
491 ----------------------------
492
493 type Watchdog_Trap_Door_Set_Register is mod 2 ** 32;
494 for Watchdog_Trap_Door_Set_Register'Size use 32;
495
496 Watchdog_Trap_Door_Set : Watchdog_Trap_Door_Set_Register;
497 for Watchdog_Trap_Door_Set'Address use
498 Watchdog_Trap_Door_Set_Register_Address;
499
500 ------------------------------------
501 -- Access Protection Segment Base --
502 ------------------------------------
503
504 type Access_Protection_Segment_Base_Register is
505 record
506 SEGBASE : Segment_Address;
507
508 UE : Boolean; -- User Enabled
509 -- 1 : Access protection enabled in user mode
510 -- 0 : Access protection disabled in user mode
511
512 SE : Boolean; -- Supervisor Enabled
513 -- 1 : Access protection enabled in supervisor mode
514 -- 0 : Access protection disabled in supervisor mode
515
516 Reserved : Reserved_7;
517 end record;
518
519 for Access_Protection_Segment_Base_Register use
520 record
521 SEGBASE at 0 range 9 .. 31;
522 UE at 0 range 8 .. 8;
523 SE at 0 range 7 .. 7;
524 Reserved at 0 range 0 .. 6;
525 end record;
526
527 for Access_Protection_Segment_Base_Register'Size use 32;
528
529 pragma Suppress_Initialization (Access_Protection_Segment_Base_Register);
530
531 Protected_Segment_1_Base_Register : Access_Protection_Segment_Base_Register;
532 pragma Atomic (Protected_Segment_1_Base_Register);
533 for Protected_Segment_1_Base_Register'Address use
534 Access_Protection_Segment_1_Base_Register_Address;
535
536 Protected_Segment_2_Base_Register : Access_Protection_Segment_Base_Register;
537 pragma Atomic (Protected_Segment_2_Base_Register);
538 for Protected_Segment_2_Base_Register'Address use
539 Access_Protection_Segment_2_Base_Register_Address;
540
541 -----------------------------------
542 -- Access Protection Segment End --
543 -----------------------------------
544
545 type Access_Protection_Segment_End_Register is
546 record
547 SEGEND : Segment_Address;
548 Reserved : Reserved_9;
549 end record;
550
551 for Access_Protection_Segment_End_Register use
552 record
553 SEGEND at 0 range 9 .. 31;
554 Reserved at 0 range 0 .. 8;
555 end record;
556
557 for Access_Protection_Segment_End_Register'Size use 32;
558
559 pragma Suppress_Initialization (Access_Protection_Segment_End_Register);
560
561 Protected_Segment_1_End_Register : Access_Protection_Segment_End_Register;
562 pragma Atomic (Protected_Segment_1_End_Register);
563 for Protected_Segment_1_End_Register'Address use
564 Access_Protection_Segment_1_End_Register_Address;
565
566 Protected_Segment_2_End_Register : Access_Protection_Segment_End_Register;
567 pragma Atomic (Protected_Segment_2_End_Register);
568 for Protected_Segment_2_End_Register'Address use
569 Access_Protection_Segment_2_End_Register_Address;
570
571 --------------------
572 -- Interrupt Mask --
573 --------------------
574
575 type Interrupt_Mask_Register is
576 record
577 Reserved1 : Boolean;
578 -- 1 : interrupt X masked
579 -- 0 : interrupt X not masked r/w
580
581 Masked_Hardware_Errors : Boolean;
582 External_Interrupt_0 : Boolean;
583 External_Interrupt_1 : Boolean;
584 UART_A_Ready : Boolean;
585 UART_B_Ready : Boolean;
586 Correctable_Error_In_Memory : Boolean;
587 UART_Error : Boolean;
588 DMA_Access_Error : Boolean;
589 DMA_Time_Out : Boolean;
590 External_Interrupt_2 : Boolean;
591 External_Interrupt_3 : Boolean;
592 General_Purpose_Timer : Boolean;
593 Real_Time_Clock : Boolean;
594 External_Interrupt_4 : Boolean;
595 Reserved17 : Reserved_17;
596 end record;
597
598 for Interrupt_Mask_Register use
599 record
600 Reserved1 at 0 range 31 .. 31;
601 Masked_Hardware_Errors at 0 range 30 .. 30;
602 External_Interrupt_0 at 0 range 29 .. 29;
603 External_Interrupt_1 at 0 range 28 .. 28;
604 UART_A_Ready at 0 range 27 .. 27;
605 UART_B_Ready at 0 range 26 .. 26;
606 Correctable_Error_In_Memory at 0 range 25 .. 25;
607 UART_Error at 0 range 24 .. 24;
608 DMA_Access_Error at 0 range 23 .. 23;
609 DMA_Time_Out at 0 range 22 .. 22;
610 External_Interrupt_2 at 0 range 21 .. 21;
611 External_Interrupt_3 at 0 range 20 .. 20;
612 General_Purpose_Timer at 0 range 19 .. 19;
613 Real_Time_Clock at 0 range 18 .. 18;
614 External_Interrupt_4 at 0 range 17 .. 17;
615 Reserved17 at 0 range 0 .. 16;
616 end record;
617
618 for Interrupt_Mask_Register'Size use 32;
619
620 pragma Suppress_Initialization (Interrupt_Mask_Register);
621
622 Interrupt_Mask : Interrupt_Mask_Register;
623 pragma Atomic (Interrupt_Mask);
624 for Interrupt_Mask'Address use Interrupt_Mask_Register_Address;
625
626 ---------------------
627 -- Interrupt Force --
628 ---------------------
629
630 type Interrupt_Force_Register is
631 record
632 Reserved1 : Boolean;
633 -- 1 : interrupt X forced
634 -- 0 : interrupt X not forced r/w
635
636 Masked_Hardware_Errors : Boolean;
637 External_Interrupt_0 : Boolean;
638 External_Interrupt_1 : Boolean;
639 UART_A_Ready : Boolean;
640 UART_B_Ready : Boolean;
641 Correctable_Error_In_Memory : Boolean;
642 UART_Error : Boolean;
643 DMA_Access_Error : Boolean;
644 DMA_Time_Out : Boolean;
645 External_Interrupt_2 : Boolean;
646 External_Interrupt_3 : Boolean;
647 General_Purpose_Timer : Boolean;
648 Real_Time_Clock : Boolean;
649 External_Interrupt_4 : Boolean;
650 Watch_Dog_Time_Out : Boolean;
651 Reserved16 : Reserved_16;
652 end record;
653
654 for Interrupt_Force_Register use
655 record
656 Reserved1 at 0 range 31 .. 31;
657 Masked_Hardware_Errors at 0 range 30 .. 30;
658 External_Interrupt_0 at 0 range 29 .. 29;
659 External_Interrupt_1 at 0 range 28 .. 28;
660 UART_A_Ready at 0 range 27 .. 27;
661 UART_B_Ready at 0 range 26 .. 26;
662 Correctable_Error_In_Memory at 0 range 25 .. 25;
663 UART_Error at 0 range 24 .. 24;
664 DMA_Access_Error at 0 range 23 .. 23;
665 DMA_Time_Out at 0 range 22 .. 22;
666 External_Interrupt_2 at 0 range 21 .. 21;
667 External_Interrupt_3 at 0 range 20 .. 20;
668 General_Purpose_Timer at 0 range 19 .. 19;
669 Real_Time_Clock at 0 range 18 .. 18;
670 External_Interrupt_4 at 0 range 17 .. 17;
671 Watch_Dog_Time_Out at 0 range 16 .. 16;
672 Reserved16 at 0 range 0 .. 15;
673 end record;
674
675 for Interrupt_Force_Register'Size use 32;
676
677 pragma Suppress_Initialization (Interrupt_Force_Register);
678
679 Interrupt_Force : Interrupt_Force_Register;
680 pragma Atomic (Interrupt_Force);
681 for Interrupt_Force'Address use Interrupt_Force_Register_Address;
682
683 -----------------
684 -- UART Status --
685 -----------------
686
687 type UART_Status_Register is
688 record
689 DRA : Boolean;
690 -- Data Ready in channel A r
691
692 TSEA : Boolean;
693 -- Transmitter A Send register Empty (no data to send) r
694
695 THEA : Boolean;
696 -- Transmitter A Holding register Empty (ready to load data) r
697
698 Reserved1A : Boolean;
699 -- Not used r
700
701 FEA : Boolean;
702 -- Framing Error in receiver A r
703
704 PEA : Boolean;
705 -- Parity Error in receiver A r
706
707 OEA : Boolean;
708 -- Overrun Error in receiver A r
709
710 CUA : Boolean;
711 -- Clear UART A (bit read as zero) r/w
712
713 Reserved8A : Reserved_8;
714 -- Not used r
715
716 DRB : Boolean;
717 -- Data Ready in channel B r
718
719 TSEB : Boolean;
720 -- Transmitter B Send register Empty (no data to send) r
721
722 THEB : Boolean;
723 -- Transmitter B Holding register Empty (ready to load data) r
724
725 Reserved1B : Boolean;
726 -- Not used r
727
728 FEB : Boolean;
729 -- Framing Error in receiver B r
730
731 PEB : Boolean;
732 -- Parity Error in receiver B r
733
734 OEB : Boolean;
735 -- Overrun Error in receiver B r
736
737 CUB : Boolean;
738 -- Clear UART B (bit read as zero) r/w
739
740 Reserved8B : Reserved_8;
741 -- Not used r
742 end record;
743
744 for UART_Status_Register use
745 record
746 DRA at 0 range 31 .. 31;
747 TSEA at 0 range 30 .. 30;
748 THEA at 0 range 29 .. 29;
749 Reserved1A at 0 range 28 .. 28;
750 FEA at 0 range 27 .. 27;
751 PEA at 0 range 26 .. 26;
752 OEA at 0 range 25 .. 25;
753 CUA at 0 range 24 .. 24;
754 Reserved8A at 0 range 16 .. 23;
755 DRB at 0 range 15 .. 15;
756 TSEB at 0 range 14 .. 14;
757 THEB at 0 range 13 .. 13;
758 Reserved1B at 0 range 12 .. 12;
759 FEB at 0 range 11 .. 11;
760 PEB at 0 range 10 .. 10;
761 OEB at 0 range 9 .. 9;
762 CUB at 0 range 8 .. 8;
763 Reserved8B at 0 range 0 .. 7;
764 end record;
765
766 for UART_Status_Register'Size use 32;
767
768 pragma Suppress_Initialization (UART_Status_Register);
769
770 UART_Status : UART_Status_Register;
771 pragma Atomic (UART_Status);
772 for UART_Status'Address use UART_Status_Register_Address;
773
774 ------------------------
775 -- UART Channel Rx Tx --
776 ------------------------
777
778 type UART_Channel_Rx_Tx_Register is
779 record
780 RTD : Character;
781 -- Rx/Tx Data r/w
782
783 Reserved24 : Reserved_24;
784 -- Not used r
785 end record;
786
787 for UART_Channel_Rx_Tx_Register use
788 record
789 RTD at 0 range 24 .. 31;
790 Reserved24 at 0 range 0 .. 23;
791 end record;
792
793 for UART_Channel_Rx_Tx_Register'Size use 32;
794
795 pragma Suppress_Initialization (UART_Channel_Rx_Tx_Register);
796
797 UART_Channel_A : UART_Channel_Rx_Tx_Register;
798 pragma Atomic (UART_Channel_A);
799 for UART_Channel_A'Address use UART_Channel_A_Rx_Tx_Register_Address;
800
801 UART_Channel_B : UART_Channel_Rx_Tx_Register;
802 pragma Atomic (UART_Channel_B);
803 for UART_Channel_B'Address use UART_Channel_B_Rx_Tx_Register_Address;
804
805 end System.BB.Board_Support.ERC32;