27 #include <mraa/common.hpp>
28 #include <mraa/i2c.hpp>
30 #include <mraa/gpio.hpp>
32 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
33 #include "../IsrCallback.h"
36 #define MPU60X0_I2C_BUS 0
37 #define MPU60X0_DEFAULT_I2C_ADDR 0x68
82 REG_SELF_TEST_X = 0x0d,
83 REG_SELF_TEST_Y = 0x0e,
84 REG_SELF_TEST_Z = 0x0f,
85 REG_SELF_TEST_A = 0x10,
87 REG_SMPLRT_DIV = 0x19,
90 REG_GYRO_CONFIG = 0x1b,
91 REG_ACCEL_CONFIG = 0x1c,
100 REG_ZRMOT_DUR = 0x22,
104 REG_I2C_MST_CTRL = 0x24,
106 REG_I2C_SLV0_ADDR = 0x25,
107 REG_I2C_SLV0_REG = 0x26,
108 REG_I2C_SLV0_CTRL = 0x27,
110 REG_I2C_SLV1_ADDR = 0x28,
111 REG_I2C_SLV1_REG = 0x29,
112 REG_I2C_SLV1_CTRL = 0x2a,
114 REG_I2C_SLV2_ADDR = 0x2b,
115 REG_I2C_SLV2_REG = 0x2c,
116 REG_I2C_SLV2_CTRL = 0x2d,
118 REG_I2C_SLV3_ADDR = 0x2e,
119 REG_I2C_SLV3_REG = 0x2f,
120 REG_I2C_SLV3_CTRL = 0x30,
122 REG_I2C_SLV4_ADDR = 0x31,
123 REG_I2C_SLV4_REG = 0x32,
124 REG_I2C_SLV4_DO = 0x33,
125 REG_I2C_SLV4_CTRL = 0x34,
126 REG_I2C_SLV4_DI = 0x35,
128 REG_I2C_MST_STATUS = 0x36,
130 REG_INT_PIN_CFG = 0x37,
131 REG_INT_ENABLE = 0x38,
135 REG_INT_STATUS = 0x3a,
137 REG_ACCEL_XOUT_H = 0x3b,
138 REG_ACCEL_XOUT_L = 0x3c,
140 REG_ACCEL_YOUT_H = 0x3d,
141 REG_ACCEL_YOUT_L = 0x3e,
143 REG_ACCEL_ZOUT_H = 0x3f,
144 REG_ACCEL_ZOUT_L = 0x40,
146 REG_TEMP_OUT_H = 0x41,
147 REG_TEMP_OUT_L = 0x42,
149 REG_GYRO_XOUT_H = 0x43,
150 REG_GYRO_XOUT_L = 0x44,
152 REG_GYRO_YOUT_H = 0x45,
153 REG_GYRO_YOUT_L = 0x46,
155 REG_GYRO_ZOUT_H = 0x47,
156 REG_GYRO_ZOUT_L = 0x48,
158 REG_EXT_SENS_DATA_00 = 0x49,
159 REG_EXT_SENS_DATA_01 = 0x4a,
160 REG_EXT_SENS_DATA_02 = 0x4b,
161 REG_EXT_SENS_DATA_03 = 0x4c,
162 REG_EXT_SENS_DATA_04 = 0x4d,
163 REG_EXT_SENS_DATA_05 = 0x4e,
164 REG_EXT_SENS_DATA_06 = 0x4f,
165 REG_EXT_SENS_DATA_07 = 0x50,
166 REG_EXT_SENS_DATA_08 = 0x51,
167 REG_EXT_SENS_DATA_09 = 0x52,
168 REG_EXT_SENS_DATA_10 = 0x53,
169 REG_EXT_SENS_DATA_11 = 0x54,
170 REG_EXT_SENS_DATA_12 = 0x55,
171 REG_EXT_SENS_DATA_13 = 0x56,
172 REG_EXT_SENS_DATA_14 = 0x57,
173 REG_EXT_SENS_DATA_15 = 0x58,
174 REG_EXT_SENS_DATA_16 = 0x59,
175 REG_EXT_SENS_DATA_17 = 0x5a,
176 REG_EXT_SENS_DATA_18 = 0x5b,
177 REG_EXT_SENS_DATA_19 = 0x5c,
178 REG_EXT_SENS_DATA_20 = 0x5d,
179 REG_EXT_SENS_DATA_21 = 0x5e,
180 REG_EXT_SENS_DATA_22 = 0x5f,
181 REG_EXT_SENS_DATA_23 = 0x60,
183 REG_MOT_DETECT_STATUS = 0x61,
187 REG_I2C_SLV0_DO = 0x63,
188 REG_I2C_SLV1_DO = 0x64,
189 REG_I2C_SLV2_DO = 0x65,
190 REG_I2C_SLV3_DO = 0x66,
192 REG_I2C_MST_DELAY_CTRL = 0x67,
194 REG_SIGNAL_PATH_RESET = 0x68,
196 REG_MOT_DETECT_CTRL = 0x69,
198 REG_USER_CTRL = 0x6a,
200 REG_PWR_MGMT_1 = 0x6b,
201 REG_PWR_MGMT_2 = 0x6c,
205 REG_FIFO_COUNTH = 0x72,
206 REG_FIFO_COUNTL = 0x73,
217 CONFIG_DLPF_CFG0 = 0x01,
218 CONFIG_DLPF_CFG1 = 0x02,
219 CONFIG_DLPF_CFG2 = 0x04,
220 _CONFIG_DLPF_SHIFT = 0,
221 _CONFIG_DLPF_MASK = 7,
223 CONFIG_EXT_SYNC_SET0 = 0x08,
224 CONFIG_EXT_SYNC_SET1 = 0x10,
225 CONFIG_EXT_SYNC_SET2 = 0x20,
226 _CONFIG_EXT_SYNC_SET_SHIFT = 3,
227 _CONFIG_EXT_SYNC_SET_MASK = 7
248 EXT_SYNC_DISABLED = 0,
249 EXT_SYNC_TEMP_OUT = 1,
250 EXT_SYNC_GYRO_XOUT = 2,
251 EXT_SYNC_GYRO_YOUT = 3,
252 EXT_SYNC_GYRO_ZOUT = 4,
253 EXT_SYNC_ACCEL_XOUT = 5,
254 EXT_SYNC_ACCEL_YOUT = 6,
255 EXT_SYNC_ACCEL_ZOUT = 7
316 ACCEL_FIFO_EN = 0x08,
333 _I2C_MST_CLK_SHIFT = 0,
334 _I2C_MST_CLK_MASK = 15,
336 I2C_MST_P_NSR = 0x10,
338 SLV_3_FIFO_EN = 0x20,
371 I2C_SLV_ADDR0 = 0x01,
372 I2C_SLV_ADDR1 = 0x02,
373 I2C_SLV_ADDR2 = 0x04,
374 I2C_SLV_ADDR3 = 0x08,
375 I2C_SLV_ADDR4 = 0x10,
376 I2C_SLV_ADDR5 = 0x20,
377 I2C_SLV_ADDR6 = 0x40,
378 _I2C_SLV_ADDR_SHIFT = 0,
379 _I2C_SLV_ADDR_MASK = 127,
392 _I2C_SLV_LEN_SHIFT = 0,
393 _I2C_SLV_LEN_MASK = 15,
396 I2C_SLV_REG_DIS = 0x20,
397 I2C_SLV_BYTE_SW = 0x40,
417 _I2C_MST_DLY_SHIFT = 0,
418 _I2C_MST_DLY_MASK = 31,
420 I2C_SLV4_REG_DIS = 0x20,
421 I2C_SLV4_INT_EN = 0x40,
429 I2C_SLV0_NACK = 0x01,
430 I2C_SLV1_NACK = 0x02,
431 I2C_SLV2_NACK = 0x04,
432 I2C_SLV3_NACK = 0x08,
433 I2C_SLV4_NACK = 0x10,
436 I2C_SLV4_DONE = 0x40,
446 I2C_BYPASS_ENABLE = 0x02,
449 FSYNC_INT_LEVEL = 0x08,
467 I2C_MST_INT_EN = 0x08,
469 FIFO_OFLOW_EN = 0x10,
486 FIFO_OFLOW_INT = 0x10,
515 I2C_SLV0_DLY_EN = 0x01,
516 I2C_SLV1_DLY_EN = 0x02,
517 I2C_SLV2_DLY_EN = 0x04,
518 I2C_SLV3_DLY_EN = 0x08,
519 I2C_SLV4_DLY_EN = 0x10,
523 DELAY_ES_SHADOW = 0x80
543 _MOT_COUNT_SHIFT = 0,
551 ACCEL_ON_DELAY0 = 0x10,
552 ACCEL_ON_DELAY1 = 0x20,
553 _ACCEL_ON_DELAY_SHIFT = 4,
554 _ACCEL_ON_DELAY_MASK = 3
582 SIG_COND_RESET = 0x01,
583 I2C_MST_RESET = 0x02,
639 LP_WAKE_CTRL0 = 0x40,
640 LP_WAKE_CTRL1 = 0x80,
641 _LP_WAKE_CTRL_SHIFT = 6,
642 _LP_WAKE_CTRL_MASK = 3
662 MPU60X0(
int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR);
707 void readRegs(uint8_t reg, uint8_t *buffer,
int len);
716 bool writeReg(uint8_t reg, uint8_t val);
806 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
923 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
924 void installISR(
int gpio, mraa::Edge level, IsrCallback *cb);
926 void installISR(
int gpio, mraa::Edge level,
void (*isr)(
void *),
void *arg);
954 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
955 void installISR(
int gpio, mraa::Edge level,
void (*isr)(
void *),
void *arg);
961 mraa::Gpio *m_gpioIRQ;
bool setSampleRateDivider(uint8_t div)
Definition: mpu60x0.cxx:282
ACCEL_ON_DELAY_T
Definition: mpu60x0.h:571
bool setMotionDetectionThreshold(uint8_t thr)
Definition: mpu60x0.cxx:357
PWR_MGMT_1_BITS_T
Definition: mpu60x0.h:598
bool setExternalSync(EXT_SYNC_SET_T val)
Definition: mpu60x0.cxx:334
PWR_MGMT_2_BITS_T
Definition: mpu60x0.h:631
bool enableTemperatureSensor(bool enable)
Definition: mpu60x0.cxx:322
ACCEL_CONFIG_BITS_T
Definition: mpu60x0.h:286
void getGyroscope(float *x, float *y, float *z)
Definition: mpu60x0.cxx:304
bool setAccelerometerScale(AFS_SEL_T scale)
Definition: mpu60x0.cxx:228
uint8_t readReg(uint8_t reg)
Definition: mpu60x0.cxx:139
SIGNAL_PATH_RESET_BITS_T
Definition: mpu60x0.h:529
CONFIG_BITS_T
Definition: mpu60x0.h:216
FS_SEL_T
Definition: mpu60x0.h:276
INT_PIN_CFG_BITS_T
Definition: mpu60x0.h:443
MOT_FF_COUNT_T
Definition: mpu60x0.h:561
bool writeReg(uint8_t reg, uint8_t val)
Definition: mpu60x0.cxx:149
CLKSEL_T
Definition: mpu60x0.h:617
bool setClockSource(CLKSEL_T clk)
Definition: mpu60x0.cxx:174
I2C_SLV4_CTRL_BITS_T
Definition: mpu60x0.h:411
uint8_t getSampleRateDivider()
Definition: mpu60x0.cxx:287
I2C_SLV_CTRL_BITS_T
Definition: mpu60x0.h:387
void update()
Definition: mpu60x0.cxx:105
INT_ENABLE_BITS_T
Definition: mpu60x0.h:462
USER_CTRL_BITS_T
Definition: mpu60x0.h:581
MPU60X0(int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR)
Definition: mpu60x0.cxx:35
GRYO_CONFIG_BITS_T
Definition: mpu60x0.h:261
LP_WAKE_CRTL_T
Definition: mpu60x0.h:648
void uninstallISR()
Definition: mpu60x0.cxx:408
MPU60X0_REG_T
Definition: mpu60x0.h:81
uint8_t getInterruptEnables()
Definition: mpu60x0.cxx:372
bool setDigitalLowPassFilter(DLPF_CFG_T dlp)
Definition: mpu60x0.cxx:271
I2C_MST_CLK_T
Definition: mpu60x0.h:348
void installISR(int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: mpu60x0.cxx:395
void readRegs(uint8_t reg, uint8_t *buffer, int len)
Definition: mpu60x0.cxx:144
virtual float getTemperature()
Definition: mpu60x0.cxx:316
EXT_SYNC_SET_T
Definition: mpu60x0.h:247
MST_DELAY_CTRL_BITS_T
Definition: mpu60x0.h:514
bool setInterruptPinConfig(uint8_t cfg)
Definition: mpu60x0.cxx:377
bool setGyroscopeScale(FS_SEL_T scale)
Definition: mpu60x0.cxx:185
I2C_SLV_ADDR_BITS_T
Definition: mpu60x0.h:370
I2C_MST_STATUS_BITS_T
Definition: mpu60x0.h:428
uint8_t getInterruptStatus()
Definition: mpu60x0.cxx:362
INT_STATUS_BITS_T
Definition: mpu60x0.h:479
MOT_DETECT_CTRL_BITS_T
Definition: mpu60x0.h:540
bool init()
Definition: mpu60x0.cxx:67
I2C_MST_CTRL_BITS_T
Definition: mpu60x0.h:328
bool setSleep(bool enable)
Definition: mpu60x0.cxx:162
DLPF_CFG_T
Definition: mpu60x0.h:233
bool enableI2CBypass(bool enable)
Definition: mpu60x0.cxx:345
void getAccelerometer(float *x, float *y, float *z)
Definition: mpu60x0.cxx:292
uint8_t getInterruptPinConfig()
Definition: mpu60x0.cxx:382
bool setInterruptEnables(uint8_t enables)
Definition: mpu60x0.cxx:367
MOT_DETECT_STATUS_BITS_T
Definition: mpu60x0.h:496
API for the MPU60X0 3-axis Gyroscope and 3-axis Accelerometer.
Definition: mpu60x0.h:64
FIFO_EN_BITS_T
Definition: mpu60x0.h:311
AFS_SEL_T
Definition: mpu60x0.h:301
~MPU60X0()
Definition: mpu60x0.cxx:62