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;