Motion_Driver_6.12
资源文件列表(大概)
Motion_Driver_6.12/driver/
-
Motion_Driver_6.12/driver/eMPL/
-
Motion_Driver_6.12/driver/eMPL/dmpKey.h
18.89KB
Motion_Driver_6.12/driver/eMPL/dmpmap.h
6.61KB
Motion_Driver_6.12/driver/eMPL/inv_mpu.c
96.6KB
Motion_Driver_6.12/driver/eMPL/inv_mpu.h
4.7KB
Motion_Driver_6.12/driver/eMPL/inv_mpu_dmp_motion_driver.c
57.11KB
Motion_Driver_6.12/driver/eMPL/inv_mpu_dmp_motion_driver.h
3.46KB
Motion_Driver_6.12/driver/include/
-
Motion_Driver_6.12/driver/include/log.h
10.21KB
Motion_Driver_6.12/driver/include/mlinclude.h
1014B
Motion_Driver_6.12/driver/include/mlmath.h
2.21KB
Motion_Driver_6.12/driver/include/mlos.h
2.08KB
Motion_Driver_6.12/driver/include/mltypes.h
9.29KB
Motion_Driver_6.12/driver/include/mpu.h
11.48KB
Motion_Driver_6.12/driver/include/stdint_invensense.h
834B
Motion_Driver_6.12/driver/stm32L/
-
Motion_Driver_6.12/driver/stm32L/log_stm32.c
5.91KB
Motion_Driver_6.12/driver/stm32L/packet.h
1.51KB
Motion_Driver_6.12/eMPL-hal/
-
Motion_Driver_6.12/eMPL-hal/eMPL_outputs.c
10.94KB
Motion_Driver_6.12/eMPL-hal/eMPL_outputs.h
1.28KB
Motion_Driver_6.12/mllite/
-
Motion_Driver_6.12/mllite/data_builder.c
44.81KB
Motion_Driver_6.12/mllite/data_builder.h
9.28KB
Motion_Driver_6.12/mllite/hal_outputs.c
17.9KB
Motion_Driver_6.12/mllite/hal_outputs.h
1.66KB
Motion_Driver_6.12/mllite/invensense.h
656B
Motion_Driver_6.12/mllite/message_layer.c
1.55KB
Motion_Driver_6.12/mllite/message_layer.h
934B
Motion_Driver_6.12/mllite/ml_math_func.c
24.76KB
Motion_Driver_6.12/mllite/ml_math_func.h
4.77KB
Motion_Driver_6.12/mllite/mlmath.c
1KB
Motion_Driver_6.12/mllite/mpl.c
1.75KB
Motion_Driver_6.12/mllite/mpl.h
435B
Motion_Driver_6.12/mllite/results_holder.c
15.85KB
Motion_Driver_6.12/mllite/results_holder.h
2.78KB
Motion_Driver_6.12/mllite/start_manager.c
2.97KB
Motion_Driver_6.12/mllite/start_manager.h
697B
Motion_Driver_6.12/mllite/storage_manager.c
6.63KB
Motion_Driver_6.12/mllite/storage_manager.h
848B
Motion_Driver_6.12/mpl/accel_auto_cal.h
1.01KB
Motion_Driver_6.12/mpl/compass_vec_cal.h
839B
Motion_Driver_6.12/mpl/fast_no_motion.h
1.3KB
Motion_Driver_6.12/mpl/fusion_9axis.h
1020B
Motion_Driver_6.12/mpl/gyro_tc.h
925B
Motion_Driver_6.12/mpl/heading_from_gyro.h
793B
Motion_Driver_6.12/mpl/inv_math.h
182B
Motion_Driver_6.12/mpl/invensense_adv.h
662B
Motion_Driver_6.12/mpl/libmpllib.lib
557.29KB
Motion_Driver_6.12/mpl/mag_disturb.h
974B
Motion_Driver_6.12/mpl/motion_no_motion.h
650B
Motion_Driver_6.12/mpl/no_gyro_fusion.h
787B
Motion_Driver_6.12/mpl/quaternion_supervisor.h
582B
资源内容介绍
MPU6050自带了数字运动处理器, 即 DMP, 并且, InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,移植教程可参考本人博客:https://blog.csdn.net/WalterBrien/article/details/123303182?spm=1001.2014.3001.5502 /** * @addtogroup DRIVERS Sensor Driver Layer * @brief Hardware drivers to communicate with sensors via I2C. * * @{ * @file inv_mpu.c * @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) */#include <stdio.h>#include <stdint.h>#include <stdlib.h>#include <string.h>#include <math.h>#include "inv_mpu.h"/* The following functions must be defined for this platform: * i2c_write(unsigned char slave_addr, unsigned char reg_addr, * unsigned char length, unsigned char const *data) * i2c_read(unsigned char slave_addr, unsigned char reg_addr, * unsigned char length, unsigned char *data) * delay_ms(unsigned long num_ms) * get_ms(unsigned long *count) * reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin) * labs(long x) * fabsf(float x) * min(int a, int b) */#if defined EMPL_TARGET_STM32F4#include "i2c.h" #include "main.h"#include "log.h"#include "board-st_discovery.h" #define i2c_write Sensors_I2C_WriteRegister#define i2c_read Sensors_I2C_ReadRegister #define delay_ms mdelay#define get_ms get_tick_count#define log_i MPL_LOGI#define log_e MPL_LOGE#define min(a,b) ((a<b)?a:b) #elif defined MOTION_DRIVER_TARGET_MSP430#include "msp430.h"#include "msp430_i2c.h"#include "msp430_clock.h"#include "msp430_interrupt.h"#define i2c_write msp430_i2c_write#define i2c_read msp430_i2c_read#define delay_ms msp430_delay_ms#define get_ms msp430_get_clock_msstatic inline int reg_int_cb(struct int_param_s *int_param){ return msp430_reg_int_cb(int_param->cb, int_param->pin, int_param->lp_exit, int_param->active_low);}#define log_i(...) do {} while (0)#define log_e(...) do {} while (0)#define fabs fabsf#define min(a,b) ((a<b)?a:b)#elif defined EMPL_TARGET_MSP430#include "msp430.h"#include "msp430_i2c.h"#include "msp430_clock.h"#include "msp430_interrupt.h"#include "log.h"#define i2c_write msp430_i2c_write#define i2c_read msp430_i2c_read#define delay_ms msp430_delay_ms#define get_ms msp430_get_clock_msstatic inline int reg_int_cb(struct int_param_s *int_param){ return msp430_reg_int_cb(int_param->cb, int_param->pin, int_param->lp_exit, int_param->active_low);}#define log_i MPL_LOGI#define log_e MPL_LOGE#define fabs fabsf#define min(a,b) ((a<b)?a:b)#elif defined EMPL_TARGET_UC3L0/* Instead of using the standard TWI driver from the ASF library, we're using * a TWI driver that follows the slave address + register address convention. */#include "twi.h"#include "delay.h"#include "sysclk.h"#include "log.h"#include "sensors_xplained.h"#include "uc3l0_clock.h"#define i2c_write(a, b, c, d) twi_write(a, b, d, c)#define i2c_read(a, b, c, d) twi_read(a, b, d, c)#define get_ms uc3l0_get_clock_msstatic inline int reg_int_cb(struct int_param_s *int_param){ sensor_board_irq_connect(int_param->pin, int_param->cb, int_param->arg); return 0;}#define log_i MPL_LOGI#define log_e MPL_LOGE#define labs abs#define fabs(x) (((x)>0)?(x):-(x))#else#error Gyro driver is missing the system layer implementations.#endif#if !defined MPU6050 && !defined MPU9150 && !defined MPU6500 && !defined MPU9250#error Which gyro are you using? Define MPUxxxx in your compiler options.#endif/* Time for some messy macro work. =] * #define MPU9150 * is equivalent to.. * #define MPU6050 * #define AK8975_SECONDARY * * #define MPU9250 * is equivalent to.. * #define MPU6500 * #define AK8963_SECONDARY */#if defined MPU9150#ifndef MPU6050#define MPU6050#endif #if defined AK8963_SECONDARY#error "MPU9150 and AK8963_SECONDARY cannot both be defined."#elif !defined AK8975_SECONDARY #define AK8975_SECONDARY#endif #elif defined MPU9250 #ifndef MPU6500#define MPU6500#endif #if defined AK8975_SECONDARY#error "MPU9250 and AK8975_SECONDARY cannot both be defined."#elif !defined AK8963_SECONDARY #define AK8963_SECONDARY#endif #endif #if defined AK8975_SECONDARY || defined AK8963_SECONDARY#define AK89xx_SECONDARY#else#endifstatic int set_int_enable(unsigned char enable);struct gyro_reg_s { unsigned char who_am_i; unsigned char rate_div; unsigned char lpf; unsigned char prod_id; unsigned char user_ctrl; unsigned char fifo_en; unsigned char gyro_cfg; unsigned char accel_cfg; unsigned char accel_cfg2; unsigned char lp_accel_odr; unsigned char motion_thr; unsigned char motion_dur; unsigned char fifo_count_h; unsigned char fifo_r_w; unsigned char raw_gyro; unsigned char raw_accel; unsigned char temp; unsigned char int_enable; unsigned char dmp_int_status; unsigned char int_status; unsigned char accel_intel; unsigned char pwr_mgmt_1; unsigned char pwr_mgmt_2; unsigned char int_pin_cfg; unsigned char mem_r_w; unsigned char accel_offs; unsigned char i2c_mst; unsigned char bank_sel; unsigned char mem_start_addr; unsigned char prgm_start_h;#if defined AK89xx_SECONDARY unsigned char s0_addr; unsigned char s0_reg; unsigned char s0_ctrl; unsigned char s1_addr; unsigned char s1_reg; unsigned char s1_ctrl; unsigned char s4_ctrl; unsigned char s0_do; unsigned char s1_do; unsigned char i2c_delay_ctrl; unsigned char raw_compass; unsigned char yg_offs_tc;#endif};struct hw_s { unsigned char addr; unsigned short max_fifo; unsigned char num_reg; unsigned short temp_sens; short temp_offset; unsigned short bank_size;#if defined AK89xx_SECONDARY unsigned short compass_fsr;#endif};/* When entering motion interrupt mode, the driver keeps track of the * previous state so that it can be restored at a later time. * TODO: This is tacky. Fix it. */struct motion_int_cache_s { unsigned short gyro_fsr; unsigned char accel_fsr; unsigned short lpf; unsigned short sample_rate; unsigned char sensors_on; unsigned char fifo_sensors; unsigned char dmp_on;};/* Cached chip configuration data. * TODO: A lot of these can be handled with a bitmask. */struct chip_cfg_s { unsigned char gyro_fsr; unsigned char accel_fsr; unsigned