light_fk723m1_zgt6_0.1.0_eec20f14/source/cpu/armv7/system_armv7m-systick.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
--
--  Copyright (C) 2024, Vadim Godunko <vgodunko@gmail.com>
--
--  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
--

pragma Restrictions (No_Elaboration_Code);

with System.Storage_Elements;

with System_Types;

package System_ARMv7M.SysTick is

   type SYST_CSR_Register is record
      ENABLE         : Boolean := False;
      TICKINT        : Boolean := False;
      CLKSOURCE      : Boolean := False;
      Reserved_3_15  : System_Types.Reserved_13;
      COUNTFLAG      : Boolean := False;
      Reserved_17_31 : System_Types.Reserved_15;
   end record with Object_Size => 32;

   for SYST_CSR_Register use record
      ENABLE         at 0 range 0 .. 0;
      TICKINT        at 0 range 1 .. 1;
      CLKSOURCE      at 0 range 2 .. 2;
      Reserved_3_15  at 0 range 3 .. 15;
      COUNTFLAG      at 0 range 16 .. 16;
      Reserved_17_31 at 0 range 17 .. 31;
   end record;

   type SYST_RVR_Register is record
      RELOAD         : System_Types.Unsigned_24 := 0;
      Reserved_24_31 : System_Types.Reserved_8;
   end record with Object_Size => 32;

   for SYST_RVR_Register use record
      RELOAD         at 0 range 0 .. 23;
      Reserved_24_31 at 0 range 24 .. 31;
   end record;

   type SYST_CVR_Register is record
      CURRENT : System_Types.Unsigned_32;
   end record with Object_Size => 32;

   type SYST_CALIB_Register is record
      TENMS          : System_Types.Unsigned_24;
      Reserved_24_29 : System_Types.Reserved_6;
      SKEW           : Boolean;
      NOREF          : Boolean;
   end record with Object_Size => 32;

   for SYST_CALIB_Register use record
      TENMS          at 0 range 0 .. 23;
      Reserved_24_29 at 0 range 24 .. 29;
      SKEW           at 0 range 30 .. 30;
      NOREF          at 0 range 31 .. 31;
   end record;

   type SYST_Registers is record
      CSR : SYST_CSR_Register with Volatile_Full_Access;
      RVR : SYST_RVR_Register with Volatile_Full_Access;
      CVR : SYST_CVR_Register with Volatile_Full_Access;
   end record;

   for SYST_Registers use record
      CSR at 0 range 0 .. 31;
      RVR at 4 range 0 .. 31;
      CVR at 8 range 0 .. 31;
   end record;

   SYST_Base : constant System.Address :=
     System.Storage_Elements.To_Address (16#E000E010#);

   SYST : SYST_Registers with Import, Address => SYST_Base;

end System_ARMv7M.SysTick;