SRK Version of mDot LoRa_Sensormode_SRK
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sensornode by
MPU9250.h
00001 /** 00002 * @file MPU9250.h 00003 * 00004 * @author Adrian 00005 * @date 19.05.2016 00006 * 00007 */ 00008 #include "I2C_RT.h " 00009 #include "MPU9250Config.h " 00010 00011 #ifndef APP_MPU9250_H_ 00012 #define APP_MPU9250_H_ 00013 00014 #define MPU9250_DEFAULT_ADDRESS 0xD1 00015 #define MPU9250_ALT_DEFAULT_ADDRESS 0xD2 00016 00017 #define MPU9250_SELF_TEST_X_GYRO 0x00 00018 #define MPU9250_SELF_TEST_Y_GYRO 0x01 00019 #define MPU9250_SELF_TEST_Z_GYRO 0x02 00020 00021 #define MPU9250_SELF_TEST_X_ACCEL 0x0D 00022 #define MPU9250_SELF_TEST_Y_ACCEL 0x0E 00023 #define MPU9250_SELF_TEST_Z_ACCEL 0x0F 00024 00025 #define MPU9250_XG_OFFSET_H 0x13 00026 #define MPU9250_XG_OFFSET_L 0x14 00027 #define MPU9250_YG_OFFSET_H 0x15 00028 #define MPU9250_YG_OFFSET_L 0x16 00029 #define MPU9250_ZG_OFFSET_H 0x17 00030 #define MPU9250_ZG_OFFSET_L 0x18 00031 #define MPU9250_SMPLRT_DIV 0x19 00032 #define MPU9250_CONFIG 0x1A 00033 #define MPU9250_GYRO_CONFIG 0x1B 00034 #define MPU9250_ACCEL_CONFIG 0x1C 00035 #define MPU9250_ACCEL_CONFIG2 0x1D 00036 #define MPU9250_LP_ACCEL_ODR 0x1E 00037 #define MPU9250_WOM_THR 0x1F 00038 00039 #define MPU9250_FIFO_EN 0x23 00040 #define MPU9250_I2C_MST_CTRL 0x24 00041 #define MPU9250_I2C_SLV0_ADDR 0x25 00042 #define MPU9250_I2C_SLV0_REG 0x26 00043 #define MPU9250_I2C_SLV0_CTRL 0x27 00044 #define MPU9250_I2C_SLV1_ADDR 0x28 00045 #define MPU9250_I2C_SLV1_REG 0x29 00046 #define MPU9250_I2C_SLV1_CTRL 0x2A 00047 #define MPU9250_I2C_SLV2_ADDR 0x2B 00048 #define MPU9250_I2C_SLV2_REG 0x2C 00049 #define MPU9250_I2C_SLV2_CTRL 0x2D 00050 #define MPU9250_I2C_SLV3_ADDR 0x2E 00051 #define MPU9250_I2C_SLV3_REG 0x2F 00052 #define MPU9250_I2C_SLV3_CTRL 0x30 00053 #define MPU9250_I2C_SLV4_ADDR 0x31 00054 #define MPU9250_I2C_SLV4_REG 0x32 00055 #define MPU9250_I2C_SLV4_DO 0x33 00056 #define MPU9250_I2C_SLV4_CTRL 0x34 00057 #define MPU9250_I2C_SLV4_DI 0x35 00058 #define MPU9250_I2C_MST_STATUS 0x36 00059 #define MPU9250_INT_PIN_CFG 0x37 00060 #define MPU9250_INT_ENABLE 0x38 00061 00062 #define MPU9250_INT_STATUS 0x3A 00063 #define MPU9250_ACCEL_XOUT_H 0x3B 00064 #define MPU9250_ACCEL_XOUT_L 0x3C 00065 #define MPU9250_ACCEL_YOUT_H 0x3D 00066 #define MPU9250_ACCEL_YOUT_L 0x3E 00067 #define MPU9250_ACCEL_ZOUT_H 0x3F 00068 #define MPU9250_ACCEL_ZOUT_L 0x40 00069 #define MPU9250_TEMP_OUT_H 0x41 00070 #define MPU9250_TEMP_OUT_L 0x42 00071 #define MPU9250_GYRO_XOUT_H 0x43 00072 #define MPU9250_GYRO_XOUT_L 0x44 00073 #define MPU9250_GYRO_YOUT_H 0x45 00074 #define MPU9250_GYRO_YOUT_L 0x46 00075 #define MPU9250_GYRO_ZOUT_H 0x47 00076 #define MPU9250_GYRO_ZOUT_L 0x48 00077 #define MPU9250_EXT_SENS_DATA_00 0x49 00078 #define MPU9250_EXT_SENS_DATA_01 0x4A 00079 #define MPU9250_EXT_SENS_DATA_02 0x4B 00080 #define MPU9250_EXT_SENS_DATA_03 0x4C 00081 #define MPU9250_EXT_SENS_DATA_04 0x4D 00082 #define MPU9250_EXT_SENS_DATA_05 0x4E 00083 #define MPU9250_EXT_SENS_DATA_06 0x4F 00084 #define MPU9250_EXT_SENS_DATA_07 0x50 00085 #define MPU9250_EXT_SENS_DATA_08 0x51 00086 #define MPU9250_EXT_SENS_DATA_09 0x52 00087 #define MPU9250_EXT_SENS_DATA_10 0x53 00088 #define MPU9250_EXT_SENS_DATA_11 0x54 00089 #define MPU9250_EXT_SENS_DATA_12 0x55 00090 #define MPU9250_EXT_SENS_DATA_13 0x56 00091 #define MPU9250_EXT_SENS_DATA_14 0x57 00092 #define MPU9250_EXT_SENS_DATA_15 0x58 00093 #define MPU9250_EXT_SENS_DATA_16 0x59 00094 #define MPU9250_EXT_SENS_DATA_17 0x5A 00095 #define MPU9250_EXT_SENS_DATA_18 0x5B 00096 #define MPU9250_EXT_SENS_DATA_19 0x5C 00097 #define MPU9250_EXT_SENS_DATA_20 0x5D 00098 #define MPU9250_EXT_SENS_DATA_21 0x5E 00099 #define MPU9250_EXT_SENS_DATA_22 0x5F 00100 #define MPU9250_EXT_SENS_DATA_23 0x60 00101 00102 #define MPU9250_I2C_SLV0_DO 0x63 00103 #define MPU9250_I2C_SLV1_DO 0x64 00104 #define MPU9250_I2C_SLV2_DO 0x65 00105 #define MPU9250_I2C_SLV3_DO 0x66 00106 #define MPU9250_I2C_MST_DELAY_CTRL 0x67 00107 #define MPU9250_SIGNAL_PATH_RESET 0x68 00108 #define MPU9250_MOT_DETECT_CTRL 0x69 00109 #define MPU9250_USER_CTRL 0x6A 00110 #define MPU9250_PWR_MGMT_1 0x6B 00111 #define MPU9250_PWR_MGMT_2 0x6C 00112 00113 #define MPU9250_FIFO_COUNTH 0x72 00114 #define MPU9250_FIFO_COUNTL 0x73 00115 #define MPU9250_FIFO_R_W 0x74 00116 #define MPU9250_WHO_AM_I 0x75 00117 #define MPU9250_XA_OFFSET_H 0x77 00118 #define MPU9250_XA_OFFSET_L 0x78 00119 00120 #define MPU9250_YA_OFFSET_H 0x7A 00121 #define MPU9250_YA_OFFSET_L 0x7B 00122 00123 #define MPU9250_ZA_OFFSET_H 0x7D 00124 #define MPU9250_ZA_OFFSET_L 0x7E 00125 00126 //reset values 00127 #define WHOAMI_RESET_VAL 0x71 00128 #define POWER_MANAGMENT_1_RESET_VAL 0x01 00129 #define DEFAULT_RESET_VALUE 0x00 00130 00131 #define WHOAMI_DEFAULT_VAL 0x68 00132 00133 //CONFIG register masks 00134 #define MPU9250_FIFO_MODE_MASK 0x40 00135 #define MPU9250_EXT_SYNC_SET_MASK 0x38 00136 #define MPU9250_DLPF_CFG_MASK 0x07 00137 00138 //GYRO_CONFIG register masks 00139 #define MPU9250_XGYRO_CTEN_MASK 0x80 00140 #define MPU9250_YGYRO_CTEN_MASK 0x40 00141 #define MPU9250_ZGYRO_CTEN_MASK 0x20 00142 #define MPU9250_GYRO_FS_SEL_MASK 0x18 00143 #define MPU9250_FCHOICE_B_MASK 0x03 00144 00145 //ACCEL_CONFIG register masks 00146 #define MPU9250_AX_ST_EN_MASK 0x80 00147 #define MPU9250_AY_ST_EN_MASK 0x40 00148 #define MPU9250_AZ_ST_EN_MASK 0x20 00149 #define MPU9250_ACCEL_FS_SEL_MASK 0x18 00150 00151 //ACCEL_CONFIG_2 register masks 00152 #define MPU9250_ACCEL_FCHOICE_B_MASK 0xC0 00153 #define MPU9250_A_DLPF_CFG_MASK 0x03 00154 00155 //LP_ACCEL_ODR register masks 00156 #define MPU9250_LPOSC_CLKSEL_MASK 0x0F 00157 00158 //FIFO_EN register masks 00159 #define MPU9250_TEMP_FIFO_EN_MASK 0x80 00160 #define MPU9250_GYRO_XOUT_MASK 0x40 00161 #define MPU9250_GYRO_YOUT_MASK 0x20 00162 #define MPU9250_GYRO_ZOUT_MASK 0x10 00163 #define MPU9250_ACCEL_MASK 0x08 00164 #define MPU9250_SLV2_MASK 0x04 00165 #define MPU9250_SLV1_MASK 0x02 00166 #define MPU9250_SLV0_MASK 0x01 00167 00168 //I2C_MST_CTRL register masks 00169 #define MPU9250_MULT_MST_EN_MASK 0x80 00170 #define MPU9250_WAIT_FOR_ES_MASK 0x40 00171 #define MPU9250_SLV_3_FIFO_EN_MASK 0x20 00172 #define MPU9250_I2C_MST_P_NSR_MASK 0x10 00173 #define MPU9250_I2C_MST_CLK_MASK 0x0F 00174 00175 //I2C_SLV0_ADDR register masks 00176 #define MPU9250_I2C_SLV0_RNW_MASK 0x80 00177 #define MPU9250_I2C_ID_0_MASK 0x7F 00178 00179 //I2C_SLV0_CTRL register masks 00180 #define MPU9250_I2C_SLV0_EN_MASK 0x80 00181 #define MPU9250_I2C_SLV0_BYTE_SW_MASK 0x40 00182 #define MPU9250_I2C_SLV0_REG_DIS_MASK 0x20 00183 #define MPU9250_I2C_SLV0_GRP_MASK 0x10 00184 #define MPU9250_I2C_SLV0_LENG_MASK 0x0F 00185 00186 //I2C_SLV1_ADDR register masks 00187 #define MPU9250_I2C_SLV1_RNW_MASK 0x80 00188 #define MPU9250_I2C_ID_1_MASK 0x7F 00189 00190 //I2C_SLV1_CTRL register masks 00191 #define MPU9250_I2C_SLV1_EN_MASK 0x80 00192 #define MPU9250_I2C_SLV1_BYTE_SW_MASK 0x40 00193 #define MPU9250_I2C_SLV1_REG_DIS_MASK 0x20 00194 #define MPU9250_I2C_SLV1_GRP_MASK 0x10 00195 #define MPU9250_I2C_SLV1_LENG_MASK 0x0F 00196 00197 //I2C_SLV2_ADDR register masks 00198 #define MPU9250_I2C_SLV2_RNW_MASK 0x80 00199 #define MPU9250_I2C_ID_2_MASK 0x7F 00200 00201 //I2C_SLV2_CTRL register masks 00202 #define MPU9250_I2C_SLV2_EN_MASK 0x80 00203 #define MPU9250_I2C_SLV2_BYTE_SW_MASK 0x40 00204 #define MPU9250_I2C_SLV2_REG_DIS_MASK 0x20 00205 #define MPU9250_I2C_SLV2_GRP_MASK 0x10 00206 #define MPU9250_I2C_SLV2_LENG_MASK 0x0F 00207 00208 //I2C_SLV3_ADDR register masks 00209 #define MPU9250_I2C_SLV3_RNW_MASK 0x80 00210 #define MPU9250_I2C_ID_3_MASK 0x7F 00211 00212 //I2C_SLV3_CTRL register masks 00213 #define MPU9250_I2C_SLV3_EN_MASK 0x80 00214 #define MPU9250_I2C_SLV3_BYTE_SW_MASK 0x40 00215 #define MPU9250_I2C_SLV3_REG_DIS_MASK 0x20 00216 #define MPU9250_I2C_SLV3_GRP_MASK 0x10 00217 #define MPU9250_I2C_SLV3_LENG_MASK 0x0F 00218 00219 //I2C_SLV4_ADDR register masks 00220 #define MPU9250_I2C_SLV4_RNW_MASK 0x80 00221 #define MPU9250_I2C_ID_4_MASK 0x7F 00222 00223 //I2C_SLV4_CTRL register masks 00224 #define MPU9250_I2C_SLV4_EN_MASK 0x80 00225 #define MPU9250_SLV4_DONE_INT_EN_MASK 0x40 00226 #define MPU9250_I2C_SLV4_REG_DIS_MASK 0x20 00227 #define MPU9250_I2C_MST_DLY_MASK 0x1F 00228 00229 //I2C_MST_STATUS register masks 00230 #define MPU9250_PASS_THROUGH_MASK 0x80 00231 #define MPU9250_I2C_SLV4_DONE_MASK 0x40 00232 #define MPU9250_I2C_LOST_ARB_MASK 0x20 00233 #define MPU9250_I2C_SLV4_NACK_MASK 0x10 00234 #define MPU9250_I2C_SLV3_NACK_MASK 0x08 00235 #define MPU9250_I2C_SLV2_NACK_MASK 0x04 00236 #define MPU9250_I2C_SLV1_NACK_MASK 0x02 00237 #define MPU9250_I2C_SLV0_NACK_MASK 0x01 00238 00239 //INT_STATUS register masks 00240 #define MPU9250_WOM_INT_MASK 0x40 00241 #define MPU9250_FIFO_OFLOW_INT_MASK 0x10 00242 #define MPU9250_FSYNC_INT_MASK 0x08 00243 #define MPU9250_RAW_DATA_RDY_INT_MASK 0x01 00244 00245 //I2C_MST_DELAY_CTRL register masks 00246 #define MPU9250_DELAY_ES_SHADOW_MASK 0x80 00247 #define MPU9250_I2C_SLV4_DLY_EN_MASK 0x10 00248 #define MPU9250_I2C_SLV3_DLY_EN_MASK 0x08 00249 #define MPU9250_I2C_SLV2_DLY_EN_MASK 0x04 00250 #define MPU9250_I2C_SLV1_DLY_EN_MASK 0x02 00251 #define MPU9250_I2C_SLV0_DLY_EN_MASK 0x01 00252 00253 //SIGNAL_PATH_RESET register masks 00254 #define MPU9250_GYRO_RST_MASK 0x04 00255 #define MPU9250_ACCEL_RST_MASK 0x02 00256 #define MPU9250_TEMP_RST_MASK 0x01 00257 00258 //MOT_DETECT_CTRL register masks 00259 #define MPU9250_ACCEL_INTEL_EN_MASK 0x80 00260 #define MPU9250_ACCEL_INTEL_MODE_MASK 0x40 00261 00262 //USER_CTRL register masks 00263 #define MPU9250_FIFO_EN_MASK 0x40 00264 #define MPU9250_I2C_MST_EN_MASK 0x20 00265 #define MPU9250_I2C_IF_DIS_MASK 0x10 00266 #define MPU9250_FIFO_RST_MASK 0x04 00267 #define MPU9250_I2C_MST_RST_MASK 0x02 00268 #define MPU9250_SIG_COND_RST_MASK 0x01 00269 00270 //PWR_MGMT_1 register masks 00271 #define MPU9250_H_RESET_MASK 0x80 00272 #define MPU9250_SLEEP_MASK 0x40 00273 #define MPU9250_CYCLE_MASK 0x20 00274 #define MPU9250_GYRO_STANDBY_CYCLE_MASK 0x10 00275 #define MPU9250_PD_PTAT_MASK 0x08 00276 #define MPU9250_CLKSEL_MASK 0x07 00277 00278 //PWR_MGMT_2 register masks 00279 #define MPU9250_DISABLE_XA_MASK 0x20 00280 #define MPU9250_DISABLE_YA_MASK 0x10 00281 #define MPU9250_DISABLE_ZA_MASK 0x08 00282 #define MPU9250_DISABLE_XG_MASK 0x04 00283 #define MPU9250_DISABLE_YG_MASK 0x02 00284 #define MPU9250_DISABLE_ZG_MASK 0x01 00285 00286 #define MPU9250_DISABLE_XYZA_MASK 0x38 00287 #define MPU9250_DISABLE_XYZG_MASK 0x07 00288 00289 //Magnetometer register maps 00290 #define MPU9250_MAG_ADDRESS 0x0C<<1//Shift by 1 needed for access via I2C 00291 00292 #define MPU9250_MAG_WIA 0x00 00293 #define MPU9250_MAG_INFO 0x01 00294 #define MPU9250_MAG_ST1 0x02 00295 #define MPU9250_MAG_XOUT_L 0x03 00296 #define MPU9250_MAG_XOUT_H 0x04 00297 #define MPU9250_MAG_YOUT_L 0x05 00298 #define MPU9250_MAG_YOUT_H 0x06 00299 #define MPU9250_MAG_ZOUT_L 0x07 00300 #define MPU9250_MAG_ZOUT_H 0x08 00301 #define MPU9250_MAG_ST2 0x09 00302 #define MPU9250_MAG_CNTL1 0x0A 00303 #define MPU9250_MAG_CNTL2 0x0B //reserved mystery meat 00304 #define MPU9250_MAG_ASTC 0x0C 00305 #define MPU9250_MAG_TS1 0x0D 00306 #define MPU9250_MAG_TS2 0x0E 00307 #define MPU9250_MAG_I2CDIS 0x0F 00308 #define MPU9250_MAG_ASAX 0x10 00309 #define MPU9250_MAG_ASAY 0x11 00310 #define MPU9250_MAG_ASAZ 0x12 00311 00312 //Magnetometer register masks 00313 #define MPU9250_WIA_MASK 0x48 00314 00315 /** 00316 * @class MPU9250 00317 * @brief Provides Functionality to control the MPU9250 Sensor on the Sensbert 00318 */ 00319 class MPU9250 { 00320 public: 00321 MPU9250(I2C_RT* i2c); 00322 virtual ~MPU9250(); 00323 00324 /** 00325 * @brief Initializes the MPU9250 according to the desired MPU9250_MODE 00326 * @param desiredMode the desired Mode depending on which the MPU9250 has to be 00327 * configured 00328 */ 00329 void init(MPU9250_MODE desiredMode); 00330 00331 00332 /** 00333 * @brief Gets the measured x-axis acceleration. 00334 * Important: Acceleration measurement first needs to be enable by 00335 * enableAccelerationMeasurement() 00336 * @return 00337 */ 00338 float getXAxisAcceleration(); 00339 00340 /** 00341 * @brief Gets the measured y-axis acceleration. 00342 * Important: Acceleration measurement first needs to be enable by 00343 * enableAccelerationMeasurement() 00344 * @return 00345 */ 00346 float getYAxisAcceleration(); 00347 00348 /** 00349 * @brief Gets the measured z-axis acceleration. 00350 * Important: Acceleration measurement first needs to be enable by 00351 * enableAccelerationMeasurement() 00352 * @return 00353 */ 00354 float getZAxisAcceleration(); 00355 00356 /** 00357 * @brief Gets the measured x-axis gyroscope value. 00358 * Important: Acceleration measurement first needs to be enable by 00359 * enableAccelerationMeasurement() 00360 * @return 00361 */ 00362 float getXAxisGyro(); 00363 00364 /** 00365 * @brief Gets the measured y-axis gyroscope value 00366 * Important: Gyroscope measurement first needs to be enable by 00367 * enableGyroscopeMeasurement() 00368 * @return 00369 */ 00370 float getYAxisGyro(); 00371 00372 /** 00373 * @brief Gets the measured z-axis gyroscope value. 00374 * Important: Gyroscope measurement first needs to be enable by 00375 * enableGyroscopeMeasurement() 00376 * @return 00377 */ 00378 float getZAxisGyro(); 00379 00380 /** 00381 * @brief Gets the measured x-axis tesla value. 00382 * Important: Gyroscope measurement first needs to be enable by 00383 * enableGyroscopeMeasurement() 00384 * @return 00385 */ 00386 float getXAxisTesla(); 00387 00388 /** 00389 * @brief Gets the measured y-axis tesla value. 00390 * Important: Tesla measurement first needs to be enable by 00391 * enableTeslaMeasurement() 00392 * @return 00393 */ 00394 float getYAxisTesla(); 00395 00396 /** 00397 * @brief Gets the measured z-axis tesla value. 00398 * Important: Tesla measurement first needs to be enable by 00399 * enableTeslaMeasurement() 00400 * @return 00401 */ 00402 float getZAxisTesla(); 00403 private: 00404 I2C_RT* i2c; 00405 MPU9250Config* config; 00406 00407 /** 00408 * @brief Set the i2c that is used to control the MPU9250 00409 * @param i2c the i2c that is used to control the MPU9250 00410 */ 00411 void setI2c(I2C_RT* i2c); 00412 00413 /** 00414 * @brief enables the acceleration measurement for all axis 00415 * according to the MPU9250Config. 00416 */ 00417 void enableAxisAccelerationMeasurement(); 00418 00419 /** 00420 * @brief enables the gyroscope measurement for all axis 00421 * according to the MPU9250Config. 00422 */ 00423 void enableAxisGyroscopeMeasurement(); 00424 00425 /** 00426 * @brief enables the tesla measurement for all axis 00427 * according to the MPU9250Config. 00428 */ 00429 void enableAxisTeslaMeasurement(); 00430 00431 00432 /** 00433 * @brief Configures and enables interrupts according to the MPU9250Config 00434 */ 00435 void configureInterrupts(); 00436 00437 /** 00438 * @brief Sets the motion threshold in g when an interupt is triggered 00439 * according to the MPU9250Config 00440 */ 00441 void setWakeOnReceiveThreshold(); 00442 }; 00443 00444 #endif /* APP_MPU9250_H_ */
Generated on Wed Jul 13 2022 09:23:47 by 1.7.2