A multifunctional and modular Firmware for Multitech's mDot based on ARM mBed provides a widerange of functionality for several Sensors such as MAX44009, BME280, MPU9250, SI1143 and uBlox. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

Dependencies:   mDot_LoRa_Sensornode_Flowmeter_impl mbed-rtos mbed

LoRa-Sensornode Firmware for Multitech mDot

A multifunctional and modular Firmware for Multitech's mDot which provides a widerange of functionality for several Sensors. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

/media/uploads/mitea1/logo-lora-600x370.png /media/uploads/mitea1/mt_mdot_family_642px.png

Supported Sensors

Idea

The Firmware has some predefined Application Modes running different Tasks(Measurements). Each mode can be used in a different Scenario. Application_Modes define which sensors are used, how often they aquire data and how often the data has to be sent via LoRa. Lets say you just want to measure the Light then you choose an Application_Mode (or define one) that only runs TaskLight for light measurement. As a standard all measurements are taken every second and sent via LoRa but you can change that interval depending on your usage Scenario

Committer:
mitea1
Date:
Fri Nov 02 17:01:02 2018 +0000
Revision:
10:4051c38bf73f
Parent:
0:f2815503561f
wtf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /**
mitea1 0:f2815503561f 2 * @file MPU9250.h
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * @author Adrian
mitea1 0:f2815503561f 5 * @date 19.05.2016
mitea1 0:f2815503561f 6 *
mitea1 0:f2815503561f 7 */
mitea1 0:f2815503561f 8 #include "I2C_RT.h"
mitea1 0:f2815503561f 9 #include "MPU9250Config.h"
mitea1 0:f2815503561f 10
mitea1 0:f2815503561f 11 #ifndef APP_MPU9250_H_
mitea1 0:f2815503561f 12 #define APP_MPU9250_H_
mitea1 0:f2815503561f 13
mitea1 0:f2815503561f 14 #define MPU9250_DEFAULT_ADDRESS 0xD1
mitea1 0:f2815503561f 15 #define MPU9250_ALT_DEFAULT_ADDRESS 0xD2
mitea1 0:f2815503561f 16
mitea1 0:f2815503561f 17 #define MPU9250_SELF_TEST_X_GYRO 0x00
mitea1 0:f2815503561f 18 #define MPU9250_SELF_TEST_Y_GYRO 0x01
mitea1 0:f2815503561f 19 #define MPU9250_SELF_TEST_Z_GYRO 0x02
mitea1 0:f2815503561f 20
mitea1 0:f2815503561f 21 #define MPU9250_SELF_TEST_X_ACCEL 0x0D
mitea1 0:f2815503561f 22 #define MPU9250_SELF_TEST_Y_ACCEL 0x0E
mitea1 0:f2815503561f 23 #define MPU9250_SELF_TEST_Z_ACCEL 0x0F
mitea1 0:f2815503561f 24
mitea1 0:f2815503561f 25 #define MPU9250_XG_OFFSET_H 0x13
mitea1 0:f2815503561f 26 #define MPU9250_XG_OFFSET_L 0x14
mitea1 0:f2815503561f 27 #define MPU9250_YG_OFFSET_H 0x15
mitea1 0:f2815503561f 28 #define MPU9250_YG_OFFSET_L 0x16
mitea1 0:f2815503561f 29 #define MPU9250_ZG_OFFSET_H 0x17
mitea1 0:f2815503561f 30 #define MPU9250_ZG_OFFSET_L 0x18
mitea1 0:f2815503561f 31 #define MPU9250_SMPLRT_DIV 0x19
mitea1 0:f2815503561f 32 #define MPU9250_CONFIG 0x1A
mitea1 0:f2815503561f 33 #define MPU9250_GYRO_CONFIG 0x1B
mitea1 0:f2815503561f 34 #define MPU9250_ACCEL_CONFIG 0x1C
mitea1 0:f2815503561f 35 #define MPU9250_ACCEL_CONFIG2 0x1D
mitea1 0:f2815503561f 36 #define MPU9250_LP_ACCEL_ODR 0x1E
mitea1 0:f2815503561f 37 #define MPU9250_WOM_THR 0x1F
mitea1 0:f2815503561f 38
mitea1 0:f2815503561f 39 #define MPU9250_FIFO_EN 0x23
mitea1 0:f2815503561f 40 #define MPU9250_I2C_MST_CTRL 0x24
mitea1 0:f2815503561f 41 #define MPU9250_I2C_SLV0_ADDR 0x25
mitea1 0:f2815503561f 42 #define MPU9250_I2C_SLV0_REG 0x26
mitea1 0:f2815503561f 43 #define MPU9250_I2C_SLV0_CTRL 0x27
mitea1 0:f2815503561f 44 #define MPU9250_I2C_SLV1_ADDR 0x28
mitea1 0:f2815503561f 45 #define MPU9250_I2C_SLV1_REG 0x29
mitea1 0:f2815503561f 46 #define MPU9250_I2C_SLV1_CTRL 0x2A
mitea1 0:f2815503561f 47 #define MPU9250_I2C_SLV2_ADDR 0x2B
mitea1 0:f2815503561f 48 #define MPU9250_I2C_SLV2_REG 0x2C
mitea1 0:f2815503561f 49 #define MPU9250_I2C_SLV2_CTRL 0x2D
mitea1 0:f2815503561f 50 #define MPU9250_I2C_SLV3_ADDR 0x2E
mitea1 0:f2815503561f 51 #define MPU9250_I2C_SLV3_REG 0x2F
mitea1 0:f2815503561f 52 #define MPU9250_I2C_SLV3_CTRL 0x30
mitea1 0:f2815503561f 53 #define MPU9250_I2C_SLV4_ADDR 0x31
mitea1 0:f2815503561f 54 #define MPU9250_I2C_SLV4_REG 0x32
mitea1 0:f2815503561f 55 #define MPU9250_I2C_SLV4_DO 0x33
mitea1 0:f2815503561f 56 #define MPU9250_I2C_SLV4_CTRL 0x34
mitea1 0:f2815503561f 57 #define MPU9250_I2C_SLV4_DI 0x35
mitea1 0:f2815503561f 58 #define MPU9250_I2C_MST_STATUS 0x36
mitea1 0:f2815503561f 59 #define MPU9250_INT_PIN_CFG 0x37
mitea1 0:f2815503561f 60 #define MPU9250_INT_ENABLE 0x38
mitea1 0:f2815503561f 61
mitea1 0:f2815503561f 62 #define MPU9250_INT_STATUS 0x3A
mitea1 0:f2815503561f 63 #define MPU9250_ACCEL_XOUT_H 0x3B
mitea1 0:f2815503561f 64 #define MPU9250_ACCEL_XOUT_L 0x3C
mitea1 0:f2815503561f 65 #define MPU9250_ACCEL_YOUT_H 0x3D
mitea1 0:f2815503561f 66 #define MPU9250_ACCEL_YOUT_L 0x3E
mitea1 0:f2815503561f 67 #define MPU9250_ACCEL_ZOUT_H 0x3F
mitea1 0:f2815503561f 68 #define MPU9250_ACCEL_ZOUT_L 0x40
mitea1 0:f2815503561f 69 #define MPU9250_TEMP_OUT_H 0x41
mitea1 0:f2815503561f 70 #define MPU9250_TEMP_OUT_L 0x42
mitea1 0:f2815503561f 71 #define MPU9250_GYRO_XOUT_H 0x43
mitea1 0:f2815503561f 72 #define MPU9250_GYRO_XOUT_L 0x44
mitea1 0:f2815503561f 73 #define MPU9250_GYRO_YOUT_H 0x45
mitea1 0:f2815503561f 74 #define MPU9250_GYRO_YOUT_L 0x46
mitea1 0:f2815503561f 75 #define MPU9250_GYRO_ZOUT_H 0x47
mitea1 0:f2815503561f 76 #define MPU9250_GYRO_ZOUT_L 0x48
mitea1 0:f2815503561f 77 #define MPU9250_EXT_SENS_DATA_00 0x49
mitea1 0:f2815503561f 78 #define MPU9250_EXT_SENS_DATA_01 0x4A
mitea1 0:f2815503561f 79 #define MPU9250_EXT_SENS_DATA_02 0x4B
mitea1 0:f2815503561f 80 #define MPU9250_EXT_SENS_DATA_03 0x4C
mitea1 0:f2815503561f 81 #define MPU9250_EXT_SENS_DATA_04 0x4D
mitea1 0:f2815503561f 82 #define MPU9250_EXT_SENS_DATA_05 0x4E
mitea1 0:f2815503561f 83 #define MPU9250_EXT_SENS_DATA_06 0x4F
mitea1 0:f2815503561f 84 #define MPU9250_EXT_SENS_DATA_07 0x50
mitea1 0:f2815503561f 85 #define MPU9250_EXT_SENS_DATA_08 0x51
mitea1 0:f2815503561f 86 #define MPU9250_EXT_SENS_DATA_09 0x52
mitea1 0:f2815503561f 87 #define MPU9250_EXT_SENS_DATA_10 0x53
mitea1 0:f2815503561f 88 #define MPU9250_EXT_SENS_DATA_11 0x54
mitea1 0:f2815503561f 89 #define MPU9250_EXT_SENS_DATA_12 0x55
mitea1 0:f2815503561f 90 #define MPU9250_EXT_SENS_DATA_13 0x56
mitea1 0:f2815503561f 91 #define MPU9250_EXT_SENS_DATA_14 0x57
mitea1 0:f2815503561f 92 #define MPU9250_EXT_SENS_DATA_15 0x58
mitea1 0:f2815503561f 93 #define MPU9250_EXT_SENS_DATA_16 0x59
mitea1 0:f2815503561f 94 #define MPU9250_EXT_SENS_DATA_17 0x5A
mitea1 0:f2815503561f 95 #define MPU9250_EXT_SENS_DATA_18 0x5B
mitea1 0:f2815503561f 96 #define MPU9250_EXT_SENS_DATA_19 0x5C
mitea1 0:f2815503561f 97 #define MPU9250_EXT_SENS_DATA_20 0x5D
mitea1 0:f2815503561f 98 #define MPU9250_EXT_SENS_DATA_21 0x5E
mitea1 0:f2815503561f 99 #define MPU9250_EXT_SENS_DATA_22 0x5F
mitea1 0:f2815503561f 100 #define MPU9250_EXT_SENS_DATA_23 0x60
mitea1 0:f2815503561f 101
mitea1 0:f2815503561f 102 #define MPU9250_I2C_SLV0_DO 0x63
mitea1 0:f2815503561f 103 #define MPU9250_I2C_SLV1_DO 0x64
mitea1 0:f2815503561f 104 #define MPU9250_I2C_SLV2_DO 0x65
mitea1 0:f2815503561f 105 #define MPU9250_I2C_SLV3_DO 0x66
mitea1 0:f2815503561f 106 #define MPU9250_I2C_MST_DELAY_CTRL 0x67
mitea1 0:f2815503561f 107 #define MPU9250_SIGNAL_PATH_RESET 0x68
mitea1 0:f2815503561f 108 #define MPU9250_MOT_DETECT_CTRL 0x69
mitea1 0:f2815503561f 109 #define MPU9250_USER_CTRL 0x6A
mitea1 0:f2815503561f 110 #define MPU9250_PWR_MGMT_1 0x6B
mitea1 0:f2815503561f 111 #define MPU9250_PWR_MGMT_2 0x6C
mitea1 0:f2815503561f 112
mitea1 0:f2815503561f 113 #define MPU9250_FIFO_COUNTH 0x72
mitea1 0:f2815503561f 114 #define MPU9250_FIFO_COUNTL 0x73
mitea1 0:f2815503561f 115 #define MPU9250_FIFO_R_W 0x74
mitea1 0:f2815503561f 116 #define MPU9250_WHO_AM_I 0x75
mitea1 0:f2815503561f 117 #define MPU9250_XA_OFFSET_H 0x77
mitea1 0:f2815503561f 118 #define MPU9250_XA_OFFSET_L 0x78
mitea1 0:f2815503561f 119
mitea1 0:f2815503561f 120 #define MPU9250_YA_OFFSET_H 0x7A
mitea1 0:f2815503561f 121 #define MPU9250_YA_OFFSET_L 0x7B
mitea1 0:f2815503561f 122
mitea1 0:f2815503561f 123 #define MPU9250_ZA_OFFSET_H 0x7D
mitea1 0:f2815503561f 124 #define MPU9250_ZA_OFFSET_L 0x7E
mitea1 0:f2815503561f 125
mitea1 0:f2815503561f 126 //reset values
mitea1 0:f2815503561f 127 #define WHOAMI_RESET_VAL 0x71
mitea1 0:f2815503561f 128 #define POWER_MANAGMENT_1_RESET_VAL 0x01
mitea1 0:f2815503561f 129 #define DEFAULT_RESET_VALUE 0x00
mitea1 0:f2815503561f 130
mitea1 0:f2815503561f 131 #define WHOAMI_DEFAULT_VAL 0x68
mitea1 0:f2815503561f 132
mitea1 0:f2815503561f 133 //CONFIG register masks
mitea1 0:f2815503561f 134 #define MPU9250_FIFO_MODE_MASK 0x40
mitea1 0:f2815503561f 135 #define MPU9250_EXT_SYNC_SET_MASK 0x38
mitea1 0:f2815503561f 136 #define MPU9250_DLPF_CFG_MASK 0x07
mitea1 0:f2815503561f 137
mitea1 0:f2815503561f 138 //GYRO_CONFIG register masks
mitea1 0:f2815503561f 139 #define MPU9250_XGYRO_CTEN_MASK 0x80
mitea1 0:f2815503561f 140 #define MPU9250_YGYRO_CTEN_MASK 0x40
mitea1 0:f2815503561f 141 #define MPU9250_ZGYRO_CTEN_MASK 0x20
mitea1 0:f2815503561f 142 #define MPU9250_GYRO_FS_SEL_MASK 0x18
mitea1 0:f2815503561f 143 #define MPU9250_FCHOICE_B_MASK 0x03
mitea1 0:f2815503561f 144
mitea1 0:f2815503561f 145 //ACCEL_CONFIG register masks
mitea1 0:f2815503561f 146 #define MPU9250_AX_ST_EN_MASK 0x80
mitea1 0:f2815503561f 147 #define MPU9250_AY_ST_EN_MASK 0x40
mitea1 0:f2815503561f 148 #define MPU9250_AZ_ST_EN_MASK 0x20
mitea1 0:f2815503561f 149 #define MPU9250_ACCEL_FS_SEL_MASK 0x18
mitea1 0:f2815503561f 150
mitea1 0:f2815503561f 151 //ACCEL_CONFIG_2 register masks
mitea1 0:f2815503561f 152 #define MPU9250_ACCEL_FCHOICE_B_MASK 0xC0
mitea1 0:f2815503561f 153 #define MPU9250_A_DLPF_CFG_MASK 0x03
mitea1 0:f2815503561f 154
mitea1 0:f2815503561f 155 //LP_ACCEL_ODR register masks
mitea1 0:f2815503561f 156 #define MPU9250_LPOSC_CLKSEL_MASK 0x0F
mitea1 0:f2815503561f 157
mitea1 0:f2815503561f 158 //FIFO_EN register masks
mitea1 0:f2815503561f 159 #define MPU9250_TEMP_FIFO_EN_MASK 0x80
mitea1 0:f2815503561f 160 #define MPU9250_GYRO_XOUT_MASK 0x40
mitea1 0:f2815503561f 161 #define MPU9250_GYRO_YOUT_MASK 0x20
mitea1 0:f2815503561f 162 #define MPU9250_GYRO_ZOUT_MASK 0x10
mitea1 0:f2815503561f 163 #define MPU9250_ACCEL_MASK 0x08
mitea1 0:f2815503561f 164 #define MPU9250_SLV2_MASK 0x04
mitea1 0:f2815503561f 165 #define MPU9250_SLV1_MASK 0x02
mitea1 0:f2815503561f 166 #define MPU9250_SLV0_MASK 0x01
mitea1 0:f2815503561f 167
mitea1 0:f2815503561f 168 //I2C_MST_CTRL register masks
mitea1 0:f2815503561f 169 #define MPU9250_MULT_MST_EN_MASK 0x80
mitea1 0:f2815503561f 170 #define MPU9250_WAIT_FOR_ES_MASK 0x40
mitea1 0:f2815503561f 171 #define MPU9250_SLV_3_FIFO_EN_MASK 0x20
mitea1 0:f2815503561f 172 #define MPU9250_I2C_MST_P_NSR_MASK 0x10
mitea1 0:f2815503561f 173 #define MPU9250_I2C_MST_CLK_MASK 0x0F
mitea1 0:f2815503561f 174
mitea1 0:f2815503561f 175 //I2C_SLV0_ADDR register masks
mitea1 0:f2815503561f 176 #define MPU9250_I2C_SLV0_RNW_MASK 0x80
mitea1 0:f2815503561f 177 #define MPU9250_I2C_ID_0_MASK 0x7F
mitea1 0:f2815503561f 178
mitea1 0:f2815503561f 179 //I2C_SLV0_CTRL register masks
mitea1 0:f2815503561f 180 #define MPU9250_I2C_SLV0_EN_MASK 0x80
mitea1 0:f2815503561f 181 #define MPU9250_I2C_SLV0_BYTE_SW_MASK 0x40
mitea1 0:f2815503561f 182 #define MPU9250_I2C_SLV0_REG_DIS_MASK 0x20
mitea1 0:f2815503561f 183 #define MPU9250_I2C_SLV0_GRP_MASK 0x10
mitea1 0:f2815503561f 184 #define MPU9250_I2C_SLV0_LENG_MASK 0x0F
mitea1 0:f2815503561f 185
mitea1 0:f2815503561f 186 //I2C_SLV1_ADDR register masks
mitea1 0:f2815503561f 187 #define MPU9250_I2C_SLV1_RNW_MASK 0x80
mitea1 0:f2815503561f 188 #define MPU9250_I2C_ID_1_MASK 0x7F
mitea1 0:f2815503561f 189
mitea1 0:f2815503561f 190 //I2C_SLV1_CTRL register masks
mitea1 0:f2815503561f 191 #define MPU9250_I2C_SLV1_EN_MASK 0x80
mitea1 0:f2815503561f 192 #define MPU9250_I2C_SLV1_BYTE_SW_MASK 0x40
mitea1 0:f2815503561f 193 #define MPU9250_I2C_SLV1_REG_DIS_MASK 0x20
mitea1 0:f2815503561f 194 #define MPU9250_I2C_SLV1_GRP_MASK 0x10
mitea1 0:f2815503561f 195 #define MPU9250_I2C_SLV1_LENG_MASK 0x0F
mitea1 0:f2815503561f 196
mitea1 0:f2815503561f 197 //I2C_SLV2_ADDR register masks
mitea1 0:f2815503561f 198 #define MPU9250_I2C_SLV2_RNW_MASK 0x80
mitea1 0:f2815503561f 199 #define MPU9250_I2C_ID_2_MASK 0x7F
mitea1 0:f2815503561f 200
mitea1 0:f2815503561f 201 //I2C_SLV2_CTRL register masks
mitea1 0:f2815503561f 202 #define MPU9250_I2C_SLV2_EN_MASK 0x80
mitea1 0:f2815503561f 203 #define MPU9250_I2C_SLV2_BYTE_SW_MASK 0x40
mitea1 0:f2815503561f 204 #define MPU9250_I2C_SLV2_REG_DIS_MASK 0x20
mitea1 0:f2815503561f 205 #define MPU9250_I2C_SLV2_GRP_MASK 0x10
mitea1 0:f2815503561f 206 #define MPU9250_I2C_SLV2_LENG_MASK 0x0F
mitea1 0:f2815503561f 207
mitea1 0:f2815503561f 208 //I2C_SLV3_ADDR register masks
mitea1 0:f2815503561f 209 #define MPU9250_I2C_SLV3_RNW_MASK 0x80
mitea1 0:f2815503561f 210 #define MPU9250_I2C_ID_3_MASK 0x7F
mitea1 0:f2815503561f 211
mitea1 0:f2815503561f 212 //I2C_SLV3_CTRL register masks
mitea1 0:f2815503561f 213 #define MPU9250_I2C_SLV3_EN_MASK 0x80
mitea1 0:f2815503561f 214 #define MPU9250_I2C_SLV3_BYTE_SW_MASK 0x40
mitea1 0:f2815503561f 215 #define MPU9250_I2C_SLV3_REG_DIS_MASK 0x20
mitea1 0:f2815503561f 216 #define MPU9250_I2C_SLV3_GRP_MASK 0x10
mitea1 0:f2815503561f 217 #define MPU9250_I2C_SLV3_LENG_MASK 0x0F
mitea1 0:f2815503561f 218
mitea1 0:f2815503561f 219 //I2C_SLV4_ADDR register masks
mitea1 0:f2815503561f 220 #define MPU9250_I2C_SLV4_RNW_MASK 0x80
mitea1 0:f2815503561f 221 #define MPU9250_I2C_ID_4_MASK 0x7F
mitea1 0:f2815503561f 222
mitea1 0:f2815503561f 223 //I2C_SLV4_CTRL register masks
mitea1 0:f2815503561f 224 #define MPU9250_I2C_SLV4_EN_MASK 0x80
mitea1 0:f2815503561f 225 #define MPU9250_SLV4_DONE_INT_EN_MASK 0x40
mitea1 0:f2815503561f 226 #define MPU9250_I2C_SLV4_REG_DIS_MASK 0x20
mitea1 0:f2815503561f 227 #define MPU9250_I2C_MST_DLY_MASK 0x1F
mitea1 0:f2815503561f 228
mitea1 0:f2815503561f 229 //I2C_MST_STATUS register masks
mitea1 0:f2815503561f 230 #define MPU9250_PASS_THROUGH_MASK 0x80
mitea1 0:f2815503561f 231 #define MPU9250_I2C_SLV4_DONE_MASK 0x40
mitea1 0:f2815503561f 232 #define MPU9250_I2C_LOST_ARB_MASK 0x20
mitea1 0:f2815503561f 233 #define MPU9250_I2C_SLV4_NACK_MASK 0x10
mitea1 0:f2815503561f 234 #define MPU9250_I2C_SLV3_NACK_MASK 0x08
mitea1 0:f2815503561f 235 #define MPU9250_I2C_SLV2_NACK_MASK 0x04
mitea1 0:f2815503561f 236 #define MPU9250_I2C_SLV1_NACK_MASK 0x02
mitea1 0:f2815503561f 237 #define MPU9250_I2C_SLV0_NACK_MASK 0x01
mitea1 0:f2815503561f 238
mitea1 0:f2815503561f 239 //INT_STATUS register masks
mitea1 0:f2815503561f 240 #define MPU9250_WOM_INT_MASK 0x40
mitea1 0:f2815503561f 241 #define MPU9250_FIFO_OFLOW_INT_MASK 0x10
mitea1 0:f2815503561f 242 #define MPU9250_FSYNC_INT_MASK 0x08
mitea1 0:f2815503561f 243 #define MPU9250_RAW_DATA_RDY_INT_MASK 0x01
mitea1 0:f2815503561f 244
mitea1 0:f2815503561f 245 //I2C_MST_DELAY_CTRL register masks
mitea1 0:f2815503561f 246 #define MPU9250_DELAY_ES_SHADOW_MASK 0x80
mitea1 0:f2815503561f 247 #define MPU9250_I2C_SLV4_DLY_EN_MASK 0x10
mitea1 0:f2815503561f 248 #define MPU9250_I2C_SLV3_DLY_EN_MASK 0x08
mitea1 0:f2815503561f 249 #define MPU9250_I2C_SLV2_DLY_EN_MASK 0x04
mitea1 0:f2815503561f 250 #define MPU9250_I2C_SLV1_DLY_EN_MASK 0x02
mitea1 0:f2815503561f 251 #define MPU9250_I2C_SLV0_DLY_EN_MASK 0x01
mitea1 0:f2815503561f 252
mitea1 0:f2815503561f 253 //SIGNAL_PATH_RESET register masks
mitea1 0:f2815503561f 254 #define MPU9250_GYRO_RST_MASK 0x04
mitea1 0:f2815503561f 255 #define MPU9250_ACCEL_RST_MASK 0x02
mitea1 0:f2815503561f 256 #define MPU9250_TEMP_RST_MASK 0x01
mitea1 0:f2815503561f 257
mitea1 0:f2815503561f 258 //MOT_DETECT_CTRL register masks
mitea1 0:f2815503561f 259 #define MPU9250_ACCEL_INTEL_EN_MASK 0x80
mitea1 0:f2815503561f 260 #define MPU9250_ACCEL_INTEL_MODE_MASK 0x40
mitea1 0:f2815503561f 261
mitea1 0:f2815503561f 262 //USER_CTRL register masks
mitea1 0:f2815503561f 263 #define MPU9250_FIFO_EN_MASK 0x40
mitea1 0:f2815503561f 264 #define MPU9250_I2C_MST_EN_MASK 0x20
mitea1 0:f2815503561f 265 #define MPU9250_I2C_IF_DIS_MASK 0x10
mitea1 0:f2815503561f 266 #define MPU9250_FIFO_RST_MASK 0x04
mitea1 0:f2815503561f 267 #define MPU9250_I2C_MST_RST_MASK 0x02
mitea1 0:f2815503561f 268 #define MPU9250_SIG_COND_RST_MASK 0x01
mitea1 0:f2815503561f 269
mitea1 0:f2815503561f 270 //PWR_MGMT_1 register masks
mitea1 0:f2815503561f 271 #define MPU9250_H_RESET_MASK 0x80
mitea1 0:f2815503561f 272 #define MPU9250_SLEEP_MASK 0x40
mitea1 0:f2815503561f 273 #define MPU9250_CYCLE_MASK 0x20
mitea1 0:f2815503561f 274 #define MPU9250_GYRO_STANDBY_CYCLE_MASK 0x10
mitea1 0:f2815503561f 275 #define MPU9250_PD_PTAT_MASK 0x08
mitea1 0:f2815503561f 276 #define MPU9250_CLKSEL_MASK 0x07
mitea1 0:f2815503561f 277
mitea1 0:f2815503561f 278 //PWR_MGMT_2 register masks
mitea1 0:f2815503561f 279 #define MPU9250_DISABLE_XA_MASK 0x20
mitea1 0:f2815503561f 280 #define MPU9250_DISABLE_YA_MASK 0x10
mitea1 0:f2815503561f 281 #define MPU9250_DISABLE_ZA_MASK 0x08
mitea1 0:f2815503561f 282 #define MPU9250_DISABLE_XG_MASK 0x04
mitea1 0:f2815503561f 283 #define MPU9250_DISABLE_YG_MASK 0x02
mitea1 0:f2815503561f 284 #define MPU9250_DISABLE_ZG_MASK 0x01
mitea1 0:f2815503561f 285
mitea1 0:f2815503561f 286 #define MPU9250_DISABLE_XYZA_MASK 0x38
mitea1 0:f2815503561f 287 #define MPU9250_DISABLE_XYZG_MASK 0x07
mitea1 0:f2815503561f 288
mitea1 0:f2815503561f 289 //Magnetometer register maps
mitea1 0:f2815503561f 290 #define MPU9250_MAG_ADDRESS 0x0C<<1//Shift by 1 needed for access via I2C
mitea1 0:f2815503561f 291
mitea1 0:f2815503561f 292 #define MPU9250_MAG_WIA 0x00
mitea1 0:f2815503561f 293 #define MPU9250_MAG_INFO 0x01
mitea1 0:f2815503561f 294 #define MPU9250_MAG_ST1 0x02
mitea1 0:f2815503561f 295 #define MPU9250_MAG_XOUT_L 0x03
mitea1 0:f2815503561f 296 #define MPU9250_MAG_XOUT_H 0x04
mitea1 0:f2815503561f 297 #define MPU9250_MAG_YOUT_L 0x05
mitea1 0:f2815503561f 298 #define MPU9250_MAG_YOUT_H 0x06
mitea1 0:f2815503561f 299 #define MPU9250_MAG_ZOUT_L 0x07
mitea1 0:f2815503561f 300 #define MPU9250_MAG_ZOUT_H 0x08
mitea1 0:f2815503561f 301 #define MPU9250_MAG_ST2 0x09
mitea1 0:f2815503561f 302 #define MPU9250_MAG_CNTL1 0x0A
mitea1 0:f2815503561f 303 #define MPU9250_MAG_CNTL2 0x0B //reserved mystery meat
mitea1 0:f2815503561f 304 #define MPU9250_MAG_ASTC 0x0C
mitea1 0:f2815503561f 305 #define MPU9250_MAG_TS1 0x0D
mitea1 0:f2815503561f 306 #define MPU9250_MAG_TS2 0x0E
mitea1 0:f2815503561f 307 #define MPU9250_MAG_I2CDIS 0x0F
mitea1 0:f2815503561f 308 #define MPU9250_MAG_ASAX 0x10
mitea1 0:f2815503561f 309 #define MPU9250_MAG_ASAY 0x11
mitea1 0:f2815503561f 310 #define MPU9250_MAG_ASAZ 0x12
mitea1 0:f2815503561f 311
mitea1 0:f2815503561f 312 //Magnetometer register masks
mitea1 0:f2815503561f 313 #define MPU9250_WIA_MASK 0x48
mitea1 0:f2815503561f 314
mitea1 0:f2815503561f 315 /**
mitea1 0:f2815503561f 316 * @class MPU9250
mitea1 0:f2815503561f 317 * @brief Provides Functionality to control the MPU9250 Sensor on the Sensbert
mitea1 0:f2815503561f 318 */
mitea1 0:f2815503561f 319 class MPU9250 {
mitea1 0:f2815503561f 320 public:
mitea1 0:f2815503561f 321 MPU9250(I2C_RT* i2c);
mitea1 0:f2815503561f 322 virtual ~MPU9250();
mitea1 0:f2815503561f 323
mitea1 0:f2815503561f 324 /**
mitea1 0:f2815503561f 325 * @brief Initializes the MPU9250 according to the desired MPU9250_MODE
mitea1 0:f2815503561f 326 * @param desiredMode the desired Mode depending on which the MPU9250 has to be
mitea1 0:f2815503561f 327 * configured
mitea1 0:f2815503561f 328 */
mitea1 0:f2815503561f 329 void init(MPU9250_MODE desiredMode);
mitea1 0:f2815503561f 330
mitea1 0:f2815503561f 331
mitea1 0:f2815503561f 332 /**
mitea1 0:f2815503561f 333 * @brief Gets the measured x-axis acceleration.
mitea1 0:f2815503561f 334 * Important: Acceleration measurement first needs to be enable by
mitea1 0:f2815503561f 335 * enableAccelerationMeasurement()
mitea1 0:f2815503561f 336 * @return
mitea1 0:f2815503561f 337 */
mitea1 0:f2815503561f 338 float getXAxisAcceleration();
mitea1 0:f2815503561f 339
mitea1 0:f2815503561f 340 /**
mitea1 0:f2815503561f 341 * @brief Gets the measured y-axis acceleration.
mitea1 0:f2815503561f 342 * Important: Acceleration measurement first needs to be enable by
mitea1 0:f2815503561f 343 * enableAccelerationMeasurement()
mitea1 0:f2815503561f 344 * @return
mitea1 0:f2815503561f 345 */
mitea1 0:f2815503561f 346 float getYAxisAcceleration();
mitea1 0:f2815503561f 347
mitea1 0:f2815503561f 348 /**
mitea1 0:f2815503561f 349 * @brief Gets the measured z-axis acceleration.
mitea1 0:f2815503561f 350 * Important: Acceleration measurement first needs to be enable by
mitea1 0:f2815503561f 351 * enableAccelerationMeasurement()
mitea1 0:f2815503561f 352 * @return
mitea1 0:f2815503561f 353 */
mitea1 0:f2815503561f 354 float getZAxisAcceleration();
mitea1 0:f2815503561f 355
mitea1 0:f2815503561f 356 /**
mitea1 0:f2815503561f 357 * @brief Gets the measured x-axis gyroscope value.
mitea1 0:f2815503561f 358 * Important: Acceleration measurement first needs to be enable by
mitea1 0:f2815503561f 359 * enableAccelerationMeasurement()
mitea1 0:f2815503561f 360 * @return
mitea1 0:f2815503561f 361 */
mitea1 0:f2815503561f 362 float getXAxisGyro();
mitea1 0:f2815503561f 363
mitea1 0:f2815503561f 364 /**
mitea1 0:f2815503561f 365 * @brief Gets the measured y-axis gyroscope value
mitea1 0:f2815503561f 366 * Important: Gyroscope measurement first needs to be enable by
mitea1 0:f2815503561f 367 * enableGyroscopeMeasurement()
mitea1 0:f2815503561f 368 * @return
mitea1 0:f2815503561f 369 */
mitea1 0:f2815503561f 370 float getYAxisGyro();
mitea1 0:f2815503561f 371
mitea1 0:f2815503561f 372 /**
mitea1 0:f2815503561f 373 * @brief Gets the measured z-axis gyroscope value.
mitea1 0:f2815503561f 374 * Important: Gyroscope measurement first needs to be enable by
mitea1 0:f2815503561f 375 * enableGyroscopeMeasurement()
mitea1 0:f2815503561f 376 * @return
mitea1 0:f2815503561f 377 */
mitea1 0:f2815503561f 378 float getZAxisGyro();
mitea1 0:f2815503561f 379
mitea1 0:f2815503561f 380 /**
mitea1 0:f2815503561f 381 * @brief Gets the measured x-axis tesla value.
mitea1 0:f2815503561f 382 * Important: Gyroscope measurement first needs to be enable by
mitea1 0:f2815503561f 383 * enableGyroscopeMeasurement()
mitea1 0:f2815503561f 384 * @return
mitea1 0:f2815503561f 385 */
mitea1 0:f2815503561f 386 float getXAxisTesla();
mitea1 0:f2815503561f 387
mitea1 0:f2815503561f 388 /**
mitea1 0:f2815503561f 389 * @brief Gets the measured y-axis tesla value.
mitea1 0:f2815503561f 390 * Important: Tesla measurement first needs to be enable by
mitea1 0:f2815503561f 391 * enableTeslaMeasurement()
mitea1 0:f2815503561f 392 * @return
mitea1 0:f2815503561f 393 */
mitea1 0:f2815503561f 394 float getYAxisTesla();
mitea1 0:f2815503561f 395
mitea1 0:f2815503561f 396 /**
mitea1 0:f2815503561f 397 * @brief Gets the measured z-axis tesla value.
mitea1 0:f2815503561f 398 * Important: Tesla measurement first needs to be enable by
mitea1 0:f2815503561f 399 * enableTeslaMeasurement()
mitea1 0:f2815503561f 400 * @return
mitea1 0:f2815503561f 401 */
mitea1 0:f2815503561f 402 float getZAxisTesla();
mitea1 0:f2815503561f 403 private:
mitea1 0:f2815503561f 404 I2C_RT* i2c;
mitea1 0:f2815503561f 405 MPU9250Config* config;
mitea1 0:f2815503561f 406
mitea1 0:f2815503561f 407 /**
mitea1 0:f2815503561f 408 * @brief Set the i2c that is used to control the MPU9250
mitea1 0:f2815503561f 409 * @param i2c the i2c that is used to control the MPU9250
mitea1 0:f2815503561f 410 */
mitea1 0:f2815503561f 411 void setI2c(I2C_RT* i2c);
mitea1 0:f2815503561f 412
mitea1 0:f2815503561f 413 /**
mitea1 0:f2815503561f 414 * @brief enables the acceleration measurement for all axis
mitea1 0:f2815503561f 415 * according to the MPU9250Config.
mitea1 0:f2815503561f 416 */
mitea1 0:f2815503561f 417 void enableAxisAccelerationMeasurement();
mitea1 0:f2815503561f 418
mitea1 0:f2815503561f 419 /**
mitea1 0:f2815503561f 420 * @brief enables the gyroscope measurement for all axis
mitea1 0:f2815503561f 421 * according to the MPU9250Config.
mitea1 0:f2815503561f 422 */
mitea1 0:f2815503561f 423 void enableAxisGyroscopeMeasurement();
mitea1 0:f2815503561f 424
mitea1 0:f2815503561f 425 /**
mitea1 0:f2815503561f 426 * @brief enables the tesla measurement for all axis
mitea1 0:f2815503561f 427 * according to the MPU9250Config.
mitea1 0:f2815503561f 428 */
mitea1 0:f2815503561f 429 void enableAxisTeslaMeasurement();
mitea1 0:f2815503561f 430
mitea1 0:f2815503561f 431
mitea1 0:f2815503561f 432 /**
mitea1 0:f2815503561f 433 * @brief Configures and enables interrupts according to the MPU9250Config
mitea1 0:f2815503561f 434 */
mitea1 0:f2815503561f 435 void configureInterrupts();
mitea1 0:f2815503561f 436
mitea1 0:f2815503561f 437 /**
mitea1 0:f2815503561f 438 * @brief Sets the motion threshold in g when an interupt is triggered
mitea1 0:f2815503561f 439 * according to the MPU9250Config
mitea1 0:f2815503561f 440 */
mitea1 0:f2815503561f 441 void setWakeOnReceiveThreshold();
mitea1 0:f2815503561f 442 };
mitea1 0:f2815503561f 443
mitea1 0:f2815503561f 444 #endif /* APP_MPU9250_H_ */