27 #include <mraa/i2c.hpp>
28 #include <mraa/gpio.hpp>
30 #define MPU60X0_I2C_BUS 0
31 #define MPU60X0_DEFAULT_I2C_ADDR 0x68
76 REG_SELF_TEST_X = 0x0d,
77 REG_SELF_TEST_Y = 0x0e,
78 REG_SELF_TEST_Z = 0x0f,
79 REG_SELF_TEST_A = 0x10,
81 REG_SMPLRT_DIV = 0x19,
84 REG_GYRO_CONFIG = 0x1b,
85 REG_ACCEL_CONFIG = 0x1c,
98 REG_I2C_MST_CTRL = 0x24,
100 REG_I2C_SLV0_ADDR = 0x25,
101 REG_I2C_SLV0_REG = 0x26,
102 REG_I2C_SLV0_CTRL = 0x27,
104 REG_I2C_SLV1_ADDR = 0x28,
105 REG_I2C_SLV1_REG = 0x29,
106 REG_I2C_SLV1_CTRL = 0x2a,
108 REG_I2C_SLV2_ADDR = 0x2b,
109 REG_I2C_SLV2_REG = 0x2c,
110 REG_I2C_SLV2_CTRL = 0x2d,
112 REG_I2C_SLV3_ADDR = 0x2e,
113 REG_I2C_SLV3_REG = 0x2f,
114 REG_I2C_SLV3_CTRL = 0x30,
116 REG_I2C_SLV4_ADDR = 0x31,
117 REG_I2C_SLV4_REG = 0x32,
118 REG_I2C_SLV4_DO = 0x33,
119 REG_I2C_SLV4_CTRL = 0x34,
120 REG_I2C_SLV4_DI = 0x35,
122 REG_I2C_MST_STATUS = 0x36,
124 REG_INT_PIN_CFG = 0x37,
125 REG_INT_ENABLE = 0x38,
129 REG_INT_STATUS = 0x3a,
131 REG_ACCEL_XOUT_H = 0x3b,
132 REG_ACCEL_XOUT_L = 0x3c,
134 REG_ACCEL_YOUT_H = 0x3d,
135 REG_ACCEL_YOUT_L = 0x3e,
137 REG_ACCEL_ZOUT_H = 0x3f,
138 REG_ACCEL_ZOUT_L = 0x40,
140 REG_TEMP_OUT_H = 0x41,
141 REG_TEMP_OUT_L = 0x42,
143 REG_GYRO_XOUT_H = 0x43,
144 REG_GYRO_XOUT_L = 0x44,
146 REG_GYRO_YOUT_H = 0x45,
147 REG_GYRO_YOUT_L = 0x46,
149 REG_GYRO_ZOUT_H = 0x47,
150 REG_GYRO_ZOUT_L = 0x48,
152 REG_EXT_SENS_DATA_00 = 0x49,
153 REG_EXT_SENS_DATA_01 = 0x4a,
154 REG_EXT_SENS_DATA_02 = 0x4b,
155 REG_EXT_SENS_DATA_03 = 0x4c,
156 REG_EXT_SENS_DATA_04 = 0x4d,
157 REG_EXT_SENS_DATA_05 = 0x4e,
158 REG_EXT_SENS_DATA_06 = 0x4f,
159 REG_EXT_SENS_DATA_07 = 0x50,
160 REG_EXT_SENS_DATA_08 = 0x51,
161 REG_EXT_SENS_DATA_09 = 0x52,
162 REG_EXT_SENS_DATA_10 = 0x53,
163 REG_EXT_SENS_DATA_11 = 0x54,
164 REG_EXT_SENS_DATA_12 = 0x55,
165 REG_EXT_SENS_DATA_13 = 0x56,
166 REG_EXT_SENS_DATA_14 = 0x57,
167 REG_EXT_SENS_DATA_15 = 0x58,
168 REG_EXT_SENS_DATA_16 = 0x59,
169 REG_EXT_SENS_DATA_17 = 0x5a,
170 REG_EXT_SENS_DATA_18 = 0x5b,
171 REG_EXT_SENS_DATA_19 = 0x5c,
172 REG_EXT_SENS_DATA_20 = 0x5d,
173 REG_EXT_SENS_DATA_21 = 0x5e,
174 REG_EXT_SENS_DATA_22 = 0x5f,
175 REG_EXT_SENS_DATA_23 = 0x60,
177 REG_MOT_DETECT_STATUS = 0x61,
181 REG_I2C_SLV0_DO = 0x63,
182 REG_I2C_SLV1_DO = 0x64,
183 REG_I2C_SLV2_DO = 0x65,
184 REG_I2C_SLV3_DO = 0x66,
186 REG_I2C_MST_DELAY_CTRL = 0x67,
188 REG_SIGNAL_PATH_RESET = 0x68,
190 REG_MOT_DETECT_CTRL = 0x69,
192 REG_USER_CTRL = 0x6a,
194 REG_PWR_MGMT_1 = 0x6b,
195 REG_PWR_MGMT_2 = 0x6c,
199 REG_FIFO_COUNTH = 0x72,
200 REG_FIFO_COUNTL = 0x73,
211 CONFIG_DLPF_CFG0 = 0x01,
212 CONFIG_DLPF_CFG1 = 0x02,
213 CONFIG_DLPF_CFG2 = 0x04,
214 _CONFIG_DLPF_SHIFT = 0,
215 _CONFIG_DLPF_MASK = 7,
217 CONFIG_EXT_SYNC_SET0 = 0x08,
218 CONFIG_EXT_SYNC_SET1 = 0x10,
219 CONFIG_EXT_SYNC_SET2 = 0x20,
220 _CONFIG_EXT_SYNC_SET_SHIFT = 3,
221 _CONFIG_EXT_SYNC_SET_MASK = 7
242 EXT_SYNC_DISABLED = 0,
243 EXT_SYNC_TEMP_OUT = 1,
244 EXT_SYNC_GYRO_XOUT = 2,
245 EXT_SYNC_GYRO_YOUT = 3,
246 EXT_SYNC_GYRO_ZOUT = 4,
247 EXT_SYNC_ACCEL_XOUT = 5,
248 EXT_SYNC_ACCEL_YOUT = 6,
249 EXT_SYNC_ACCEL_ZOUT = 7
310 ACCEL_FIFO_EN = 0x08,
327 _I2C_MST_CLK_SHIFT = 0,
328 _I2C_MST_CLK_MASK = 15,
330 I2C_MST_P_NSR = 0x10,
332 SLV_3_FIFO_EN = 0x20,
365 I2C_SLV_ADDR0 = 0x01,
366 I2C_SLV_ADDR1 = 0x02,
367 I2C_SLV_ADDR2 = 0x04,
368 I2C_SLV_ADDR3 = 0x08,
369 I2C_SLV_ADDR4 = 0x10,
370 I2C_SLV_ADDR5 = 0x20,
371 I2C_SLV_ADDR6 = 0x40,
372 _I2C_SLV_ADDR_SHIFT = 0,
373 _I2C_SLV_ADDR_MASK = 127,
386 _I2C_SLV_LEN_SHIFT = 0,
387 _I2C_SLV_LEN_MASK = 15,
390 I2C_SLV_REG_DIS = 0x20,
391 I2C_SLV_BYTE_SW = 0x40,
411 _I2C_MST_DLY_SHIFT = 0,
412 _I2C_MST_DLY_MASK = 31,
414 I2C_SLV4_REG_DIS = 0x20,
415 I2C_SLV4_INT_EN = 0x40,
423 I2C_SLV0_NACK = 0x01,
424 I2C_SLV1_NACK = 0x02,
425 I2C_SLV2_NACK = 0x04,
426 I2C_SLV3_NACK = 0x08,
427 I2C_SLV4_NACK = 0x10,
430 I2C_SLV4_DONE = 0x40,
440 I2C_BYPASS_ENABLE = 0x02,
443 FSYNC_INT_LEVEL = 0x08,
461 I2C_MST_INT_EN = 0x08,
463 FIFO_OFLOW_EN = 0x10,
480 FIFO_OFLOW_INT = 0x10,
509 I2C_SLV0_DLY_EN = 0x01,
510 I2C_SLV1_DLY_EN = 0x02,
511 I2C_SLV2_DLY_EN = 0x04,
512 I2C_SLV3_DLY_EN = 0x08,
513 I2C_SLV4_DLY_EN = 0x10,
517 DELAY_ES_SHADOW = 0x80
537 _MOT_COUNT_SHIFT = 0,
545 ACCEL_ON_DELAY0 = 0x10,
546 ACCEL_ON_DELAY1 = 0x20,
547 _ACCEL_ON_DELAY_SHIFT = 4,
548 _ACCEL_ON_DELAY_MASK = 3
576 SIG_COND_RESET = 0x01,
577 I2C_MST_RESET = 0x02,
633 LP_WAKE_CTRL0 = 0x40,
634 LP_WAKE_CTRL1 = 0x80,
635 _LP_WAKE_CTRL_SHIFT = 6,
636 _LP_WAKE_CTRL_MASK = 3
656 MPU60X0(
int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR);
701 void readRegs(uint8_t reg, uint8_t *buf,
int len);
710 bool writeReg(uint8_t reg, uint8_t val);
900 void installISR(
int gpio, mraa::Edge level,
void (*isr)(
void *),
void *arg);
930 mraa::Gpio *m_gpioIRQ;
bool setSampleRateDivider(uint8_t div)
Definition: mpu60x0.cxx:278
ACCEL_ON_DELAY_T
Definition: mpu60x0.h:565
bool setMotionDetectionThreshold(uint8_t thr)
Definition: mpu60x0.cxx:353
PWR_MGMT_1_BITS_T
Definition: mpu60x0.h:592
bool setExternalSync(EXT_SYNC_SET_T val)
Definition: mpu60x0.cxx:330
PWR_MGMT_2_BITS_T
Definition: mpu60x0.h:625
bool enableTemperatureSensor(bool enable)
Definition: mpu60x0.cxx:318
ACCEL_CONFIG_BITS_T
Definition: mpu60x0.h:280
void getGyroscope(float *x, float *y, float *z)
Definition: mpu60x0.cxx:300
bool setAccelerometerScale(AFS_SEL_T scale)
Definition: mpu60x0.cxx:225
uint8_t readReg(uint8_t reg)
Definition: mpu60x0.cxx:137
SIGNAL_PATH_RESET_BITS_T
Definition: mpu60x0.h:523
CONFIG_BITS_T
Definition: mpu60x0.h:210
FS_SEL_T
Definition: mpu60x0.h:270
INT_PIN_CFG_BITS_T
Definition: mpu60x0.h:437
MOT_FF_COUNT_T
Definition: mpu60x0.h:555
bool writeReg(uint8_t reg, uint8_t val)
Definition: mpu60x0.cxx:147
CLKSEL_T
Definition: mpu60x0.h:611
bool setClockSource(CLKSEL_T clk)
Definition: mpu60x0.cxx:172
I2C_SLV4_CTRL_BITS_T
Definition: mpu60x0.h:405
uint8_t getSampleRateDivider()
Definition: mpu60x0.cxx:283
I2C_SLV_CTRL_BITS_T
Definition: mpu60x0.h:381
void update()
Definition: mpu60x0.cxx:103
INT_ENABLE_BITS_T
Definition: mpu60x0.h:456
USER_CTRL_BITS_T
Definition: mpu60x0.h:575
MPU60X0(int bus=MPU60X0_I2C_BUS, uint8_t address=MPU60X0_DEFAULT_I2C_ADDR)
Definition: mpu60x0.cxx:35
GRYO_CONFIG_BITS_T
Definition: mpu60x0.h:255
LP_WAKE_CRTL_T
Definition: mpu60x0.h:642
void uninstallISR()
Definition: mpu60x0.cxx:396
MPU60X0_REG_T
Definition: mpu60x0.h:75
uint8_t getInterruptEnables()
Definition: mpu60x0.cxx:368
bool setDigitalLowPassFilter(DLPF_CFG_T dlp)
Definition: mpu60x0.cxx:267
I2C_MST_CLK_T
Definition: mpu60x0.h:342
void installISR(int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
Definition: mpu60x0.cxx:383
float getTemperature()
Definition: mpu60x0.cxx:312
EXT_SYNC_SET_T
Definition: mpu60x0.h:241
MST_DELAY_CTRL_BITS_T
Definition: mpu60x0.h:508
bool setInterruptPinConfig(uint8_t cfg)
Definition: mpu60x0.cxx:373
bool setGyroscopeScale(FS_SEL_T scale)
Definition: mpu60x0.cxx:183
I2C_SLV_ADDR_BITS_T
Definition: mpu60x0.h:364
I2C_MST_STATUS_BITS_T
Definition: mpu60x0.h:422
uint8_t getInterruptStatus()
Definition: mpu60x0.cxx:358
INT_STATUS_BITS_T
Definition: mpu60x0.h:473
MOT_DETECT_CTRL_BITS_T
Definition: mpu60x0.h:534
bool init()
Definition: mpu60x0.cxx:67
I2C_MST_CTRL_BITS_T
Definition: mpu60x0.h:322
void readRegs(uint8_t reg, uint8_t *buf, int len)
Definition: mpu60x0.cxx:142
bool setSleep(bool enable)
Definition: mpu60x0.cxx:160
DLPF_CFG_T
Definition: mpu60x0.h:227
bool enableI2CBypass(bool enable)
Definition: mpu60x0.cxx:341
void getAccelerometer(float *x, float *y, float *z)
Definition: mpu60x0.cxx:288
uint8_t getInterruptPinConfig()
Definition: mpu60x0.cxx:378
bool setInterruptEnables(uint8_t enables)
Definition: mpu60x0.cxx:363
MOT_DETECT_STATUS_BITS_T
Definition: mpu60x0.h:490
API for the MPU60X0 3-axis Gyroscope and 3-axis Accelerometer.
Definition: mpu60x0.h:58
FIFO_EN_BITS_T
Definition: mpu60x0.h:305
AFS_SEL_T
Definition: mpu60x0.h:295
~MPU60X0()
Definition: mpu60x0.cxx:62