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