27 #include <mraa/common.hpp>
28 #include <mraa/i2c.hpp>
30 #include <mraa/gpio.hpp>
32 #define MPU60X0_I2C_BUS 0
33 #define MPU60X0_DEFAULT_I2C_ADDR 0x68
78 REG_SELF_TEST_X = 0x0d,
79 REG_SELF_TEST_Y = 0x0e,
80 REG_SELF_TEST_Z = 0x0f,
81 REG_SELF_TEST_A = 0x10,
83 REG_SMPLRT_DIV = 0x19,
86 REG_GYRO_CONFIG = 0x1b,
87 REG_ACCEL_CONFIG = 0x1c,
100 REG_I2C_MST_CTRL = 0x24,
102 REG_I2C_SLV0_ADDR = 0x25,
103 REG_I2C_SLV0_REG = 0x26,
104 REG_I2C_SLV0_CTRL = 0x27,
106 REG_I2C_SLV1_ADDR = 0x28,
107 REG_I2C_SLV1_REG = 0x29,
108 REG_I2C_SLV1_CTRL = 0x2a,
110 REG_I2C_SLV2_ADDR = 0x2b,
111 REG_I2C_SLV2_REG = 0x2c,
112 REG_I2C_SLV2_CTRL = 0x2d,
114 REG_I2C_SLV3_ADDR = 0x2e,
115 REG_I2C_SLV3_REG = 0x2f,
116 REG_I2C_SLV3_CTRL = 0x30,
118 REG_I2C_SLV4_ADDR = 0x31,
119 REG_I2C_SLV4_REG = 0x32,
120 REG_I2C_SLV4_DO = 0x33,
121 REG_I2C_SLV4_CTRL = 0x34,
122 REG_I2C_SLV4_DI = 0x35,
124 REG_I2C_MST_STATUS = 0x36,
126 REG_INT_PIN_CFG = 0x37,
127 REG_INT_ENABLE = 0x38,
131 REG_INT_STATUS = 0x3a,
133 REG_ACCEL_XOUT_H = 0x3b,
134 REG_ACCEL_XOUT_L = 0x3c,
136 REG_ACCEL_YOUT_H = 0x3d,
137 REG_ACCEL_YOUT_L = 0x3e,
139 REG_ACCEL_ZOUT_H = 0x3f,
140 REG_ACCEL_ZOUT_L = 0x40,
142 REG_TEMP_OUT_H = 0x41,
143 REG_TEMP_OUT_L = 0x42,
145 REG_GYRO_XOUT_H = 0x43,
146 REG_GYRO_XOUT_L = 0x44,
148 REG_GYRO_YOUT_H = 0x45,
149 REG_GYRO_YOUT_L = 0x46,
151 REG_GYRO_ZOUT_H = 0x47,
152 REG_GYRO_ZOUT_L = 0x48,
154 REG_EXT_SENS_DATA_00 = 0x49,
155 REG_EXT_SENS_DATA_01 = 0x4a,
156 REG_EXT_SENS_DATA_02 = 0x4b,
157 REG_EXT_SENS_DATA_03 = 0x4c,
158 REG_EXT_SENS_DATA_04 = 0x4d,
159 REG_EXT_SENS_DATA_05 = 0x4e,
160 REG_EXT_SENS_DATA_06 = 0x4f,
161 REG_EXT_SENS_DATA_07 = 0x50,
162 REG_EXT_SENS_DATA_08 = 0x51,
163 REG_EXT_SENS_DATA_09 = 0x52,
164 REG_EXT_SENS_DATA_10 = 0x53,
165 REG_EXT_SENS_DATA_11 = 0x54,
166 REG_EXT_SENS_DATA_12 = 0x55,
167 REG_EXT_SENS_DATA_13 = 0x56,
168 REG_EXT_SENS_DATA_14 = 0x57,
169 REG_EXT_SENS_DATA_15 = 0x58,
170 REG_EXT_SENS_DATA_16 = 0x59,
171 REG_EXT_SENS_DATA_17 = 0x5a,
172 REG_EXT_SENS_DATA_18 = 0x5b,
173 REG_EXT_SENS_DATA_19 = 0x5c,
174 REG_EXT_SENS_DATA_20 = 0x5d,
175 REG_EXT_SENS_DATA_21 = 0x5e,
176 REG_EXT_SENS_DATA_22 = 0x5f,
177 REG_EXT_SENS_DATA_23 = 0x60,
179 REG_MOT_DETECT_STATUS = 0x61,
183 REG_I2C_SLV0_DO = 0x63,
184 REG_I2C_SLV1_DO = 0x64,
185 REG_I2C_SLV2_DO = 0x65,
186 REG_I2C_SLV3_DO = 0x66,
188 REG_I2C_MST_DELAY_CTRL = 0x67,
190 REG_SIGNAL_PATH_RESET = 0x68,
192 REG_MOT_DETECT_CTRL = 0x69,
194 REG_USER_CTRL = 0x6a,
196 REG_PWR_MGMT_1 = 0x6b,
197 REG_PWR_MGMT_2 = 0x6c,
201 REG_FIFO_COUNTH = 0x72,
202 REG_FIFO_COUNTL = 0x73,
213 CONFIG_DLPF_CFG0 = 0x01,
214 CONFIG_DLPF_CFG1 = 0x02,
215 CONFIG_DLPF_CFG2 = 0x04,
216 _CONFIG_DLPF_SHIFT = 0,
217 _CONFIG_DLPF_MASK = 7,
219 CONFIG_EXT_SYNC_SET0 = 0x08,
220 CONFIG_EXT_SYNC_SET1 = 0x10,
221 CONFIG_EXT_SYNC_SET2 = 0x20,
222 _CONFIG_EXT_SYNC_SET_SHIFT = 3,
223 _CONFIG_EXT_SYNC_SET_MASK = 7
244 EXT_SYNC_DISABLED = 0,
245 EXT_SYNC_TEMP_OUT = 1,
246 EXT_SYNC_GYRO_XOUT = 2,
247 EXT_SYNC_GYRO_YOUT = 3,
248 EXT_SYNC_GYRO_ZOUT = 4,
249 EXT_SYNC_ACCEL_XOUT = 5,
250 EXT_SYNC_ACCEL_YOUT = 6,
251 EXT_SYNC_ACCEL_ZOUT = 7
312 ACCEL_FIFO_EN = 0x08,
329 _I2C_MST_CLK_SHIFT = 0,
330 _I2C_MST_CLK_MASK = 15,
332 I2C_MST_P_NSR = 0x10,
334 SLV_3_FIFO_EN = 0x20,
367 I2C_SLV_ADDR0 = 0x01,
368 I2C_SLV_ADDR1 = 0x02,
369 I2C_SLV_ADDR2 = 0x04,
370 I2C_SLV_ADDR3 = 0x08,
371 I2C_SLV_ADDR4 = 0x10,
372 I2C_SLV_ADDR5 = 0x20,
373 I2C_SLV_ADDR6 = 0x40,
374 _I2C_SLV_ADDR_SHIFT = 0,
375 _I2C_SLV_ADDR_MASK = 127,
388 _I2C_SLV_LEN_SHIFT = 0,
389 _I2C_SLV_LEN_MASK = 15,
392 I2C_SLV_REG_DIS = 0x20,
393 I2C_SLV_BYTE_SW = 0x40,
413 _I2C_MST_DLY_SHIFT = 0,
414 _I2C_MST_DLY_MASK = 31,
416 I2C_SLV4_REG_DIS = 0x20,
417 I2C_SLV4_INT_EN = 0x40,
425 I2C_SLV0_NACK = 0x01,
426 I2C_SLV1_NACK = 0x02,
427 I2C_SLV2_NACK = 0x04,
428 I2C_SLV3_NACK = 0x08,
429 I2C_SLV4_NACK = 0x10,
432 I2C_SLV4_DONE = 0x40,
442 I2C_BYPASS_ENABLE = 0x02,
445 FSYNC_INT_LEVEL = 0x08,
463 I2C_MST_INT_EN = 0x08,
465 FIFO_OFLOW_EN = 0x10,
482 FIFO_OFLOW_INT = 0x10,
511 I2C_SLV0_DLY_EN = 0x01,
512 I2C_SLV1_DLY_EN = 0x02,
513 I2C_SLV2_DLY_EN = 0x04,
514 I2C_SLV3_DLY_EN = 0x08,
515 I2C_SLV4_DLY_EN = 0x10,
519 DELAY_ES_SHADOW = 0x80
539 _MOT_COUNT_SHIFT = 0,
547 ACCEL_ON_DELAY0 = 0x10,
548 ACCEL_ON_DELAY1 = 0x20,
549 _ACCEL_ON_DELAY_SHIFT = 4,
550 _ACCEL_ON_DELAY_MASK = 3
578 SIG_COND_RESET = 0x01,
579 I2C_MST_RESET = 0x02,
635 LP_WAKE_CTRL0 = 0x40,
636 LP_WAKE_CTRL1 = 0x80,
637 _LP_WAKE_CTRL_SHIFT = 6,
638 _LP_WAKE_CTRL_MASK = 3
658 MPU60X0(
int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR);
703 void readRegs(uint8_t reg, uint8_t *buffer,
int len);
712 bool writeReg(uint8_t reg, uint8_t val);
802 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
919 #if defined(SWIGJAVA) || defined(JAVACALLBACK)
920 void installISR(
int gpio, mraa::Edge level, jobject runnable);
922 void installISR(
int gpio, mraa::Edge level,
void (*isr)(
void *),
void *arg);
953 mraa::Gpio *m_gpioIRQ;
bool setSampleRateDivider(uint8_t div)
Definition: mpu60x0.cxx:282
bool setMotionDetectionThreshold(uint8_t thr)
Definition: mpu60x0.cxx:357
bool setExternalSync(EXT_SYNC_SET_T val)
Definition: mpu60x0.cxx:334
AFS_SEL_T
Definition: mpu60x0.h:297
MOT_DETECT_STATUS_BITS_T
Definition: mpu60x0.h:492
bool enableTemperatureSensor(bool enable)
Definition: mpu60x0.cxx:322
MOT_FF_COUNT_T
Definition: mpu60x0.h:557
MOT_DETECT_CTRL_BITS_T
Definition: mpu60x0.h:536
void getGyroscope(float *x, float *y, float *z)
Definition: mpu60x0.cxx:304
INT_STATUS_BITS_T
Definition: mpu60x0.h:475
bool setAccelerometerScale(AFS_SEL_T scale)
Definition: mpu60x0.cxx:228
uint8_t readReg(uint8_t reg)
Definition: mpu60x0.cxx:139
ACCEL_CONFIG_BITS_T
Definition: mpu60x0.h:282
bool writeReg(uint8_t reg, uint8_t val)
Definition: mpu60x0.cxx:149
EXT_SYNC_SET_T
Definition: mpu60x0.h:243
bool setClockSource(CLKSEL_T clk)
Definition: mpu60x0.cxx:174
uint8_t getSampleRateDivider()
Definition: mpu60x0.cxx:287
PWR_MGMT_2_BITS_T
Definition: mpu60x0.h:627
PWR_MGMT_1_BITS_T
Definition: mpu60x0.h:594
void update()
Definition: mpu60x0.cxx:105
FS_SEL_T
Definition: mpu60x0.h:272
SIGNAL_PATH_RESET_BITS_T
Definition: mpu60x0.h:525
DLPF_CFG_T
Definition: mpu60x0.h:229
MPU60X0(int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR)
Definition: mpu60x0.cxx:35
MST_DELAY_CTRL_BITS_T
Definition: mpu60x0.h:510
I2C_SLV_ADDR_BITS_T
Definition: mpu60x0.h:366
INT_PIN_CFG_BITS_T
Definition: mpu60x0.h:439
MPU60X0_REG_T
Definition: mpu60x0.h:77
void uninstallISR()
Definition: mpu60x0.cxx:415
USER_CTRL_BITS_T
Definition: mpu60x0.h:577
uint8_t getInterruptEnables()
Definition: mpu60x0.cxx:372
I2C_SLV_CTRL_BITS_T
Definition: mpu60x0.h:383
FIFO_EN_BITS_T
Definition: mpu60x0.h:307
bool setDigitalLowPassFilter(DLPF_CFG_T dlp)
Definition: mpu60x0.cxx:271
CLKSEL_T
Definition: mpu60x0.h:613
LP_WAKE_CRTL_T
Definition: mpu60x0.h:644
void installISR(int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: mpu60x0.cxx:401
void readRegs(uint8_t reg, uint8_t *buffer, int len)
Definition: mpu60x0.cxx:144
virtual float getTemperature()
Definition: mpu60x0.cxx:316
bool setInterruptPinConfig(uint8_t cfg)
Definition: mpu60x0.cxx:377
bool setGyroscopeScale(FS_SEL_T scale)
Definition: mpu60x0.cxx:185
uint8_t getInterruptStatus()
Definition: mpu60x0.cxx:362
I2C_SLV4_CTRL_BITS_T
Definition: mpu60x0.h:407
bool init()
Definition: mpu60x0.cxx:67
ACCEL_ON_DELAY_T
Definition: mpu60x0.h:567
bool setSleep(bool enable)
Definition: mpu60x0.cxx:162
I2C_MST_STATUS_BITS_T
Definition: mpu60x0.h:424
I2C_MST_CTRL_BITS_T
Definition: mpu60x0.h:324
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
GRYO_CONFIG_BITS_T
Definition: mpu60x0.h:257
bool setInterruptEnables(uint8_t enables)
Definition: mpu60x0.cxx:367
I2C_MST_CLK_T
Definition: mpu60x0.h:344
API for the MPU60X0 3-axis Gyroscope and 3-axis Accelerometer.
Definition: mpu60x0.h:60
INT_ENABLE_BITS_T
Definition: mpu60x0.h:458
~MPU60X0()
Definition: mpu60x0.cxx:62
CONFIG_BITS_T
Definition: mpu60x0.h:212