1 //
2 // Copyright (c) 2010-2024 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using Antmicro.Renode.Core;
8 using Antmicro.Renode.Core.Structure.Registers;
9 using Antmicro.Renode.Peripherals.I2C;
10 using Antmicro.Renode.Peripherals.SPI;
11 using Antmicro.Renode.Peripherals.Sensor;
12 using Antmicro.Renode.Utilities.RESD;
13 
14 namespace Antmicro.Renode.Peripherals.Sensors
15 {
16     public partial class ICM20948
17     {
DefineGyroAccelUserBank2Registers()18         private void DefineGyroAccelUserBank2Registers()
19         {
20             GyroAccelUserBank2Registers.GyroscopeSampleRateDivider.Define(gyroAccelUserBank2Registers)
21                 .WithValueField(0, 8, out gyroSampleRateDivider, name: "GYRO_SMPLRT_DIV")
22             ;
23 
24             GyroAccelUserBank2Registers.GyroscopeConfig1.Define(gyroAccelUserBank2Registers)
25                 .WithReservedBits(6, 2)
26                 .WithTag("GYRO_DLPFCFG", 3, 3)
27                 .WithEnumField(1, 2, out gyroFullScaleRange, name: "GYRO_FS_SEL")
28                 .WithFlag(0, out gyroFilterChoice, name: "GYRO_FCHOICE")
29             ;
30 
31             GyroAccelUserBank2Registers.GyroscopeConfig2.Define(gyroAccelUserBank2Registers)
32                 .WithReservedBits(6, 2)
33                 .WithFlag(5, out gyroSelfTestEnableX, name: "XGYRO_CTEN")
34                 .WithFlag(4, out gyroSelfTestEnableY, name: "YGYRO_CTEN")
35                 .WithFlag(3, out gyroSelfTestEnableZ, name: "ZGYRO_CTEN")
36                 .WithValueField(0, 3, out gyroAveragingFilterExponent, name: "GYRO_AVGCFG")
37             ;
38 
39             GyroAccelUserBank2Registers.GyroscopeXOffsetCancellationHigh.Define(gyroAccelUserBank2Registers)
40                 .WithValueField(0, 8, out gyroOffsetCancellationXHigh, name: "X_OFFS_USER")
41             ;
42 
43             GyroAccelUserBank2Registers.GyroscopeXOffsetCancellationLow.Define(gyroAccelUserBank2Registers)
44                 .WithValueField(0, 8, out gyroOffsetCancellationXLow, name: "X_OFFS_USER")
45             ;
46 
47             GyroAccelUserBank2Registers.GyroscopeYOffsetCancellationHigh.Define(gyroAccelUserBank2Registers)
48                 .WithValueField(0, 8, out gyroOffsetCancellationYHigh, name: "Y_OFFS_USER")
49             ;
50 
51             GyroAccelUserBank2Registers.GyroscopeYOffsetCancellationLow.Define(gyroAccelUserBank2Registers)
52                 .WithValueField(0, 8, out gyroOffsetCancellationYLow, name: "Y_OFFS_USER")
53             ;
54 
55             GyroAccelUserBank2Registers.GyroscopeZOffsetCancellationHigh.Define(gyroAccelUserBank2Registers)
56                 .WithValueField(0, 8, out gyroOffsetCancellationZHigh, name: "Z_OFFS_USER")
57             ;
58 
59             GyroAccelUserBank2Registers.GyroscopeZOffsetCancellationLow.Define(gyroAccelUserBank2Registers)
60                 .WithValueField(0, 8, out gyroOffsetCancellationZLow, name: "Z_OFFS_USER")
61             ;
62 
63             GyroAccelUserBank2Registers.EnableODRStartTimeAlignment.Define(gyroAccelUserBank2Registers)
64                 .WithReservedBits(1, 7)
65                 .WithTag("ODR_ALIGN_EN", 0, 1)
66             ;
67 
68             GyroAccelUserBank2Registers.AccelerationSampleRateDivider1.Define(gyroAccelUserBank2Registers)
69                 .WithReservedBits(4, 4)
70                 .WithValueField(0, 4, out accelerometerSampleRateDividerHigh, name: "ACCEL_SMPLRT_DIV")
71             ;
72 
73             GyroAccelUserBank2Registers.AccelerationSampleRateDivider2.Define(gyroAccelUserBank2Registers)
74                 .WithValueField(0, 8, out accelerometerSampleRateDividerLow, name: "ACCEL_SMPLRT_DIV")
75             ;
76 
77             GyroAccelUserBank2Registers.AccelerationIntelControl.Define(gyroAccelUserBank2Registers)
78                 .WithReservedBits(2, 6)
79                 .WithFlag(1, out wakeOnMotionEnabled, name: "ACCEL_INTEL_EN")
80                 .WithEnumField(0, 1, out wakeOnMotionAlgorithm, name: "ACCEL_INTEL_MODE_INT")
81             ;
82 
83             GyroAccelUserBank2Registers.AccelerationWakeOnMotionThreshold.Define(gyroAccelUserBank2Registers)
84                 .WithValueField(0, 8, out accelerometerWakeOnMotionThreshold, name: "WOM_THRESHOLD")
85             ;
86 
87             GyroAccelUserBank2Registers.AccelerationConfig.Define(gyroAccelUserBank2Registers)
88                 .WithReservedBits(6, 2)
89                 .WithTag("ACCEL_DLPFCFG", 3, 3)
90                 .WithEnumField(1, 2, out accelerometerFullScaleRange, name: "ACCEL_FS_SEL")
91                 .WithFlag(0, out accelerometerFilterChoice, name: "ACCEL_FCHOICE")
92             ;
93 
94             GyroAccelUserBank2Registers.AccelerationConfig2.Define(gyroAccelUserBank2Registers)
95                 .WithReservedBits(5, 3)
96                 .WithFlag(4, out accelerometerSelfTestEnableX, name: "AX_ST_EN_REG")
97                 .WithFlag(3, out accelerometerSelfTestEnableY, name: "AY_ST_EN_REG")
98                 .WithFlag(2, out accelerometerSelfTestEnableZ, name: "AZ_ST_EN_REG")
99                 .WithEnumField(0, 2, out accelerometerDecimatorConfig, name: "DEC3_CFG")
100             ;
101 
102             GyroAccelUserBank2Registers.FSYNCConfig.Define(gyroAccelUserBank2Registers)
103                 .WithTag("DELAY_TIME_EN", 7, 1)
104                 .WithReservedBits(6, 1)
105                 .WithTag("WOF_DEGLITCH_EN", 5, 1)
106                 .WithTag("WOF_EDGE_INT", 4, 1)
107                 .WithTag("EXT_SYNC_SET", 0, 4)
108             ;
109 
110             GyroAccelUserBank2Registers.TemperatureConfig.Define(gyroAccelUserBank2Registers)
111                 .WithReservedBits(3, 5)
112                 .WithTag("TEMP_DLPFCFG", 0, 3)
113             ;
114 
115             GyroAccelUserBank2Registers.ModControl.Define(gyroAccelUserBank2Registers)
116                 .WithReservedBits(1, 7)
117                 .WithTag("REG_LP_DMP_EN", 0, 1)
118             ;
119 
120             DefineBankSelectRegister(gyroAccelUserBank2Registers);
121         }
122 
123         private IValueRegisterField gyroSampleRateDivider;
124         private IEnumRegisterField<GyroFullScaleRangeSelection> gyroFullScaleRange;
125         private IFlagRegisterField gyroFilterChoice;
126         private IEnumRegisterField<AccelerationFullScaleRangeSelection> accelerometerFullScaleRange;
127         private IFlagRegisterField accelerometerFilterChoice;
128         private IValueRegisterField accelerometerSampleRateDividerHigh;
129         private IValueRegisterField accelerometerSampleRateDividerLow;
130         private IValueRegisterField accelerometerWakeOnMotionThreshold;
131         private IFlagRegisterField accelerometerSelfTestEnableX;
132         private IFlagRegisterField accelerometerSelfTestEnableY;
133         private IFlagRegisterField accelerometerSelfTestEnableZ;
134         private IEnumRegisterField<AccelerometerDecimator> accelerometerDecimatorConfig;
135         private IFlagRegisterField wakeOnMotionEnabled;
136         private IEnumRegisterField<WakeOnMotionCompareAlgorithm> wakeOnMotionAlgorithm;
137         private IValueRegisterField gyroOffsetCancellationXHigh;
138         private IValueRegisterField gyroOffsetCancellationXLow;
139         private IValueRegisterField gyroOffsetCancellationYHigh;
140         private IValueRegisterField gyroOffsetCancellationYLow;
141         private IValueRegisterField gyroOffsetCancellationZHigh;
142         private IValueRegisterField gyroOffsetCancellationZLow;
143         private IFlagRegisterField gyroSelfTestEnableX;
144         private IFlagRegisterField gyroSelfTestEnableY;
145         private IFlagRegisterField gyroSelfTestEnableZ;
146         private IValueRegisterField gyroAveragingFilterExponent;
147 
148         private enum GyroAccelUserBank2Registers : byte
149         {
150             GyroscopeSampleRateDivider = 0x0,
151             GyroscopeConfig1 = 0x1,
152             GyroscopeConfig2 = 0x2,
153             GyroscopeXOffsetCancellationHigh = 0x3,
154             GyroscopeXOffsetCancellationLow = 0x4,
155             GyroscopeYOffsetCancellationHigh = 0x5,
156             GyroscopeYOffsetCancellationLow = 0x6,
157             GyroscopeZOffsetCancellationHigh = 0x7,
158             GyroscopeZOffsetCancellationLow = 0x8,
159             EnableODRStartTimeAlignment = 0x9,
160             AccelerationSampleRateDivider1 = 0x10,
161             AccelerationSampleRateDivider2 = 0x11,
162             AccelerationIntelControl = 0x12,
163             AccelerationWakeOnMotionThreshold = 0x13,
164             AccelerationConfig = 0x14,
165             AccelerationConfig2 = 0x15,
166             FSYNCConfig = 0x52,
167             TemperatureConfig = 0x53,
168             ModControl = 0x54,
169         }
170     }
171 }
172