A library for the Invensense MPU9150
MPU9150.h
- Committer:
- ethanharstad
- Date:
- 2014-06-09
- Revision:
- 2:581fad93a809
- Parent:
- 1:1b0ada1695a7
File content as of revision 2:581fad93a809:
#ifndef MPU9150_H_
#define MPU9150_H_
#include "mbed.h"
#include "I2CHelper.h"
#define MPU9150_ADDRESS_AD0_LOW 0x68
#define MPU9150_ADDRESS_AD0_HIGH 0x69
#define MPU9150_ADDRESS_DEFAULT MPU9150_ADDRESS_AD0_LOW
#define MPU9150_RA_SELF_TEST_X 0x0D
#define MPU9150_RA_SELF_TEST_Y 0x0E
#define MPU9150_RA_SELF_TEST_Z 0x0F
#define MPU9150_RA_SELF_TEST_A 0x10
#define MPU9150_RA_SMPRT_DIV 0x19
#define MPU9150_RA_CONFIG 0x1A
#define MPU9150_RA_GYRO_CONFIG 0x1B
#define MPU9150_RA_ACCEL_CONFIG 0x1C
#define MPU9150_RA_FIFO_EN 0x23
#define MPU9150_RA_I2C_MST_CTRL 0x24
#define MPU9150_RA_I2C_SLV0_ADDR 0x25
#define MPU9150_RA_I2C_SLV0_REG 0x26
#define MPU9150_RA_I2C_SLV0_CTRL 0x27
#define MPU9150_RA_I2C_SLV1_ADDR 0x28
#define MPU9150_RA_I2C_SLV1_REG 0x29
#define MPU9150_RA_I2C_SLV1_CTRL 0x2A
#define MPU9150_RA_I2C_SLV2_ADDR 0x2B
#define MPU9150_RA_I2C_SLV2_REG 0x2C
#define MPU9150_RA_I2C_SLV2_CTRL 0x2D
#define MPU9150_RA_I2C_SLV3_ADDR 0x2E
#define MPU9150_RA_I2C_SLV3_REG 0x2F
#define MPU9150_RA_I2C_SLV3_CTRL 0x30
#define MPU9150_RA_I2C_SLV4_ADDR 0x31
#define MPU9150_RA_I2C_SLV4_REG 0x32
#define MPU9150_RA_I2C_SLV4_DO 0x33
#define MPU9150_RA_I2C_SLV4_CTRL 0x34
#define MPU9150_RA_I2C_SLV4_DI 0x35
#define MPU9150_RA_I2C_MST_STATUS 0x36
#define MPU9150_RA_INT_PIN_CFG 0x37
#define MPU9150_RA_INT_ENABLE 0x38
#define MPU9150_RA_INT_STATUS 0x3A
#define MPU9150_RA_ACCEL_XOUT_H 0x3B
#define MPU9150_RA_ACCEL_XOUT_L 0x3C
#define MPU9150_RA_ACCEL_YOUT_H 0x3D
#define MPU9150_RA_ACCEL_YOUT_L 0x3E
#define MPU9150_RA_ACCEL_ZOUT_H 0x3F
#define MPU9150_RA_ACCEL_ZOUT_L 0x40
#define MPU9150_RA_TEMP_OUT_H 0x41
#define MPU9150_RA_TEMP_OUT_L 0x42
#define MPU9150_RA_GYRO_XOUT_H 0x43
#define MPU9150_RA_GYRO_XOUT_L 0x44
#define MPU9150_RA_GYRO_YOUT_H 0x45
#define MPU9150_RA_GYRO_YOUT_L 0x46
#define MPU9150_RA_GYRO_ZOUT_H 0x47
#define MPU9150_RA_GYRO_ZOUT_L 0x48
#define MPU9150_RA_EXT_SENS_DATA_00 0x49
#define MPU9150_RA_EXT_SENS_DATA_01 0x4A
#define MPU9150_RA_EXT_SENS_DATA_02 0x4B
#define MPU9150_RA_EXT_SENS_DATA_03 0x4C
#define MPU9150_RA_EXT_SENS_DATA_04 0x4D
#define MPU9150_RA_EXT_SENS_DATA_05 0x4E
#define MPU9150_RA_EXT_SENS_DATA_06 0x4F
#define MPU9150_RA_EXT_SENS_DATA_07 0x50
#define MPU9150_RA_EXT_SENS_DATA_08 0x51
#define MPU9150_RA_EXT_SENS_DATA_09 0x52
#define MPU9150_RA_EXT_SENS_DATA_10 0x53
#define MPU9150_RA_EXT_SENS_DATA_11 0x54
#define MPU9150_RA_EXT_SENS_DATA_12 0x55
#define MPU9150_RA_EXT_SENS_DATA_13 0x56
#define MPU9150_RA_EXT_SENS_DATA_14 0x57
#define MPU9150_RA_EXT_SENS_DATA_15 0x58
#define MPU9150_RA_EXT_SENS_DATA_16 0x59
#define MPU9150_RA_EXT_SENS_DATA_17 0x5A
#define MPU9150_RA_EXT_SENS_DATA_18 0x5B
#define MPU9150_RA_EXT_SENS_DATA_19 0x5C
#define MPU9150_RA_EXT_SENS_DATA_20 0x5D
#define MPU9150_RA_EXT_SENS_DATA_21 0x5E
#define MPU9150_RA_EXT_SENS_DATA_22 0x5F
#define MPU9150_RA_EXT_SENS_DATA_23 0x60
#define MPU9150_RA_I2C_SLV0_DO 0x63
#define MPU9150_RA_I2C_SLV1_DO 0x64
#define MPU9150_RA_I2C_SLV2_DO 0x65
#define MPU9150_RA_I2C_SLV3_DO 0x66
#define MPU9150_RA_I2C_MST_DELAY_CTRL 0x67
#define MPU9150_RA_SIGNAL_PATH_RESET 0x68
#define MPU9150_RA_USER_CTRL 0x6A
#define MPU9150_RA_PWR_MGMT_1 0x6B
#define MPU9150_RA_PWR_MGMT_2 0x6C
#define MPU9150_RA_FIFO_COUNTH 0x72
#define MPU9150_RA_FIFO_COUNTL 0x73
#define MPU9150_RA_FIFO_R_W 0x74
#define MPU9150_RA_WHO_AM_I 0x75
// CONFIG Register
#define MPU9150_EXT_SYNC_DISABLED 0x00
#define MPU9150_EXT_SYNC_TEMP_OUT_L 0x01
#define MPU9150_EXT_SYNC_GYRO_XOUT_L 0x02
#define MPU9150_EXT_SYNC_GYRO_YOUT_L 0x03
#define MPU9150_EXT_SYNC_GYRO_ZOUT_L 0x04
#define MPU9150_EXT_SYNC_ACCEL_XOUT_L 0x05
#define MPU9150_EXT_SYNC_ACCEL_YOUT_L 0x06
#define MPU9150_EXT_SYNC_ACCEL_ZOUT_L 0x07
#define MPU9150_DLPF_BW_256 0x00
#define MPU9150_DLPF_BW_188 0x01
#define MPU9150_DLPF_BW_98 0x02
#define MPU9150_DLPF_BW_42 0x03
#define MPU9150_DLPF_BW_20 0x04
#define MPU9150_DLPF_BW_10 0x05
#define MPU9150_DLPF_BW_5 0x06
// GYRO_CONFIG Register
#define MPU9150_GYRO_FS_250 0x00
#define MPU9150_GYRO_FS_500 0x01
#define MPU9150_GYRO_FS_1000 0x02
#define MPU9150_GYRO_FS_2000 0x03
// ACCEL_CONFIG Register
#define MPU9150_ACCEL_FS_2 0x00
#define MPU9150_ACCEL_FS_4 0x01
#define MPU9150_ACCEL_FS_8 0x02
#define MPU9150_ACCEL_FS_16 0x03
// SIGNAL_PATH_RESET Register
#define MPU9150_SIGNAL_PATH_GYRO_RESET 0x04
#define MPU9150_SIGNAL_PATH_ACCEL_RESET 0x02
#define MPU9150_SIGNAL_PATH_TEMP_RESET 0x01
// USER_CTRL Register
#define MPU9150_USER_CTRL_FIFO_EN 0x40
#define MPU9150_USER_CTRL_I2C_MST_EN 0x20
#define MPU9150_USER_CTRL_FIFO_RESET 0x04
#define MPU9150_USER_CTRL_I2C_MST_RESET 0x02
#define MPU9150_USER_CTRL_SIG_RESET 0x01
// PWR_MGMT_1 Register
#define MPU9150_PWR_MGMT_DEVICE_RESET 0x80
#define MPU9150_PWR_MGMT_SLEEP 0x40
#define MPU9150_PWR_MGMT_CYCLE 0x20
#define MPU9150_PWR_MGMT_TEMP_DISABLE 0x08
#define MPU9150_PWR_MGMT_CLOCK_INTERNAL 0x00
#define MPU9150_PWR_MGMT_CLOCK_GYRO_X 0x01
#define MPU9150_PWR_MGMT_CLOCK_GYRO_Y 0x02
#define MPU9150_PWR_MGMT_CLOCK_GYRO_Z 0x03
#define MPU9150_PWR_MGMT_CLOCK_EXT_32k 0x04
#define MPU9150_PWR_MGMT_CLOCK_EXT_19M 0x05
#define MPU9150_PWR_MGMT_CLOCK_DISABLE 0x07
// PWR_MGMT_2 Register
#define MPU9150_PWR_MGMT_STBY_GYRO_Z 0x01
#define MPU9150_PWR_MGMT_STBY_GYRO_Y 0x02
#define MPU9150_PWR_MGMT_STBY_GYRO_X 0x04
#define MPU9150_PWR_MGMT_STBY_ACCEL_Z 0x08
#define MPU9150_PWR_MGMT_STBY_ACCEL_Y 0x10
#define MPU9150_PWR_MGMT_STBY_ACCEL_X 0x20
#define MPU9150_PWR_MGMT_CYCLE_1_25HZ 0x00
#define MPU9150_PWR_MGMT_CYCLE_5HZ 0x01
#define MPU9150_PWR_MGMT_CYCLE_20HZ 0x02
#define MPU9150_PWR_MGMT_CYCLE_40HZ 0x03
class MPU9150 {
public:
MPU9150();
explicit MPU9150(const bool AD0);
MPU9150(const PinName sda, const PinName scl, const bool AD0);
void initialize();
bool test();
// SMPRT_DIV Register
uint8_t getSampleRateDivider();
void setSampleRateDivider(const uint8_t divider);
// CONFIG Register
uint8_t getExternalFrameSync();
void setExternalFrameSync(const uint8_t sync);
uint8_t getDLPFBandwidth();
void setDLPFBandwidth(const uint8_t bandwidth);
// GYRO_CONFIG Register
uint8_t getGyroFullScaleRange();
void setGyroFullScaleRange(const uint8_t range);
// ACCEL_CONFIG Register
uint8_t getAccelFullScaleRange();
void setAccelFullScaleRange(const uint8_t range);
// ACCEL_OUT_* Registers
int16_t getAccelX();
int16_t getAccelY();
int16_t getAccelZ();
// TEMP_OUT_* Registers
int16_t getTemp();
// GYRO_OUT_* Registers
int16_t getGyroX();
int16_t getGyroY();
int16_t getGyroZ();
// SIGNAL_PATH_RESET Register
void resetGyroPath();
void resetAccelPath();
void resetTempPath();
// USER_CTRL Register
bool getFifoEnabled();
void setFifoEnabled(const bool fifo);
bool getI2CMasterEnabled();
void setI2CMasterEnabled(const bool master);
void resetFifo();
void resetI2CMaster();
void resetSensors();
// PWR_MGMT_1 Register
void reset();
bool getSleepEnabled();
void setSleepEnabled(const bool sleep);
bool getCycleEnabled();
void setCycleEnabled(const bool cycle);
bool getTempEnabled();
void setTempEnabled(const bool temp);
uint8_t getClockSource();
void setClockSource(const uint8_t source);
// PWR_MGMT_2 Register
uint8_t getCycleFrequency();
void setCycleFrequency(const uint8_t frequency);
bool getStandbyAccelXEnabled();
void setStandbyAccelXEnabled(const bool enabled);
bool getStandbyAccelYEnabled();
void setStandbyAccelYEnabled(const bool enabled);
bool getStandbyAccelZEnabled();
void setStandbyAccelZEnabled(const bool enabled);
bool getStandbyGyroXEnabled();
void setStandbyGyroXEnabled(const bool enabled);
bool getStandbyGyroYEnabled();
void setStandbyGyroYEnabled(const bool enabled);
bool getStandbyGyroZEnabled();
void setStandbyGyroZEnabled(const bool enabled);
// WHO_AM_I Register
uint8_t getDeviceID();
private:
I2CHelper i2c_;
uint8_t address_;
uint8_t accelRange_;
uint8_t gyroRange_;
};
#endif