|
|
|
|
/*
|
|
|
|
|
$License:
|
|
|
|
|
Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
|
|
|
|
|
See included License.txt for License information.
|
|
|
|
|
$
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @addtogroup DRIVERS Sensor Driver Layer
|
|
|
|
|
* @brief Hardware drivers to communicate with sensors via I2C.
|
|
|
|
|
*
|
|
|
|
|
* @{
|
|
|
|
|
* @file inv_mpu.h
|
|
|
|
|
* @brief An I2C-based driver for Invensense gyroscopes.
|
|
|
|
|
* @details This driver currently works for the following devices:
|
|
|
|
|
* MPU6050
|
|
|
|
|
* MPU6500
|
|
|
|
|
* MPU9150 (or MPU6050 w/ AK8975 on the auxiliary bus)
|
|
|
|
|
* MPU9250 (or MPU6500 w/ AK8963 on the auxiliary bus)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef _INV_MPU_H_
|
|
|
|
|
#define _INV_MPU_H_
|
|
|
|
|
#include "stm32f10x.h"
|
|
|
|
|
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
#define DEFAULT_MPU_HZ (100) //100Hz
|
|
|
|
|
|
|
|
|
|
#define INV_X_GYRO (0x40)
|
|
|
|
|
#define INV_Y_GYRO (0x20)
|
|
|
|
|
#define INV_Z_GYRO (0x10)
|
|
|
|
|
#define INV_XYZ_GYRO (INV_X_GYRO | INV_Y_GYRO | INV_Z_GYRO)
|
|
|
|
|
#define INV_XYZ_ACCEL (0x08)
|
|
|
|
|
#define INV_XYZ_COMPASS (0x01)
|
|
|
|
|
|
|
|
|
|
//<EFBFBD><EFBFBD>ֲ<EFBFBD>ٷ<EFBFBD>MSP430 DMP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
struct int_param_s {
|
|
|
|
|
//#if defined EMPL_TARGET_MSP430 || defined MOTION_DRIVER_TARGET_MSP430
|
|
|
|
|
void (*cb)(void);
|
|
|
|
|
unsigned short pin;
|
|
|
|
|
unsigned char lp_exit;
|
|
|
|
|
unsigned char active_low;
|
|
|
|
|
//#elif defined EMPL_TARGET_UC3L0
|
|
|
|
|
// unsigned long pin;
|
|
|
|
|
// void (*cb)(volatile void*);
|
|
|
|
|
// void *arg;
|
|
|
|
|
//#endif
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define MPU_INT_STATUS_DATA_READY (0x0001)
|
|
|
|
|
#define MPU_INT_STATUS_DMP (0x0002)
|
|
|
|
|
#define MPU_INT_STATUS_PLL_READY (0x0004)
|
|
|
|
|
#define MPU_INT_STATUS_I2C_MST (0x0008)
|
|
|
|
|
#define MPU_INT_STATUS_FIFO_OVERFLOW (0x0010)
|
|
|
|
|
#define MPU_INT_STATUS_ZMOT (0x0020)
|
|
|
|
|
#define MPU_INT_STATUS_MOT (0x0040)
|
|
|
|
|
#define MPU_INT_STATUS_FREE_FALL (0x0080)
|
|
|
|
|
//#define MPU_INT_STATUS_DMP_0 (0x0100)
|
|
|
|
|
//#define MPU_INT_STATUS_DMP_1 (0x0200)
|
|
|
|
|
#define MPU_INT_STATUS_DMP_2 (0x0400)
|
|
|
|
|
#define MPU_INT_STATUS_DMP_3 (0x0800)
|
|
|
|
|
#define MPU_INT_STATUS_DMP_4 (0x1000)
|
|
|
|
|
#define MPU_INT_STATUS_DMP_5 (0x2000)
|
|
|
|
|
|
|
|
|
|
/* Set up APIs */
|
|
|
|
|
int mpu_init(void);
|
|
|
|
|
int mpu_init_slave(void);
|
|
|
|
|
int mpu_set_bypass(unsigned char bypass_on);
|
|
|
|
|
|
|
|
|
|
/* Configuration APIs */
|
|
|
|
|
int mpu_lp_accel_mode(unsigned char rate);
|
|
|
|
|
int mpu_lp_motion_interrupt(unsigned short thresh, unsigned char time,
|
|
|
|
|
unsigned char lpa_freq);
|
|
|
|
|
int mpu_set_int_level(unsigned char active_low);
|
|
|
|
|
int mpu_set_int_latched(unsigned char enable);
|
|
|
|
|
|
|
|
|
|
int mpu_set_dmp_state(unsigned char enable);
|
|
|
|
|
int mpu_get_dmp_state(unsigned char *enabled);
|
|
|
|
|
|
|
|
|
|
int mpu_get_lpf(unsigned short *lpf);
|
|
|
|
|
int mpu_set_lpf(unsigned short lpf);
|
|
|
|
|
|
|
|
|
|
int mpu_get_gyro_fsr(unsigned short *fsr);
|
|
|
|
|
int mpu_set_gyro_fsr(unsigned short fsr);
|
|
|
|
|
|
|
|
|
|
int mpu_get_accel_fsr(unsigned char *fsr);
|
|
|
|
|
int mpu_set_accel_fsr(unsigned char fsr);
|
|
|
|
|
|
|
|
|
|
int mpu_get_compass_fsr(unsigned short *fsr);
|
|
|
|
|
|
|
|
|
|
int mpu_get_gyro_sens(float *sens);
|
|
|
|
|
int mpu_get_accel_sens(unsigned short *sens);
|
|
|
|
|
|
|
|
|
|
int mpu_get_sample_rate(unsigned short *rate);
|
|
|
|
|
int mpu_set_sample_rate(unsigned short rate);
|
|
|
|
|
int mpu_get_compass_sample_rate(unsigned short *rate);
|
|
|
|
|
int mpu_set_compass_sample_rate(unsigned short rate);
|
|
|
|
|
|
|
|
|
|
int mpu_get_fifo_config(unsigned char *sensors);
|
|
|
|
|
int mpu_configure_fifo(unsigned char sensors);
|
|
|
|
|
|
|
|
|
|
int mpu_get_power_state(unsigned char *power_on);
|
|
|
|
|
int mpu_set_sensors(unsigned char sensors);
|
|
|
|
|
|
|
|
|
|
int mpu_set_accel_bias(const long *accel_bias);
|
|
|
|
|
|
|
|
|
|
/* Data getter/setter APIs */
|
|
|
|
|
int mpu_get_gyro_reg(short *data, unsigned long *timestamp);
|
|
|
|
|
int mpu_get_accel_reg(short *data, unsigned long *timestamp);
|
|
|
|
|
int mpu_get_compass_reg(short *data, unsigned long *timestamp);
|
|
|
|
|
int mpu_get_temperature(long *data, unsigned long *timestamp);
|
|
|
|
|
|
|
|
|
|
int mpu_get_int_status(short *status);
|
|
|
|
|
int mpu_read_fifo(short *gyro, short *accel, unsigned long *timestamp,
|
|
|
|
|
unsigned char *sensors, unsigned char *more);
|
|
|
|
|
int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
|
|
|
|
|
unsigned char *more);
|
|
|
|
|
int mpu_reset_fifo(void);
|
|
|
|
|
|
|
|
|
|
int mpu_write_mem(unsigned short mem_addr, unsigned short length,
|
|
|
|
|
unsigned char *data);
|
|
|
|
|
int mpu_read_mem(unsigned short mem_addr, unsigned short length,
|
|
|
|
|
unsigned char *data);
|
|
|
|
|
int mpu_load_firmware(unsigned short length, const unsigned char *firmware,
|
|
|
|
|
unsigned short start_addr, unsigned short sample_rate);
|
|
|
|
|
|
|
|
|
|
int mpu_reg_dump(void);
|
|
|
|
|
int mpu_read_reg(unsigned char reg, unsigned char *data);
|
|
|
|
|
int mpu_run_self_test(long *gyro, long *accel);
|
|
|
|
|
int mpu_register_tap_cb(void (*func)(unsigned char, unsigned char));
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һЩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void mget_ms(unsigned long *time);
|
|
|
|
|
unsigned short inv_row_2_scale(const signed char *row);
|
|
|
|
|
unsigned short inv_orientation_matrix_to_scalar(const signed char *mtx);
|
|
|
|
|
u8 run_self_test(void);
|
|
|
|
|
u8 mpu_dmp_init(void);
|
|
|
|
|
u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw);
|
|
|
|
|
|
|
|
|
|
#endif /* #ifndef _INV_MPU_H_ */
|
|
|
|
|
|