598 lines
31 KiB
C
Raw Permalink Normal View History

2025-04-10 17:31:33 +08:00
#ifndef __SENSOR_MPU6050_DEFS_H__
#define __SENSOR_MPU6050_DEFS_H__
#ifdef __cplusplus
extern "C" {
#endif
//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位),如果接V3.3,则IIC地址为0X69(不包含最低位).
#define MPU6050_ADDRESS_AD0_LOW 0x68 // AD0为低的时候设备的写地址
#define MPU6050_ADDRESS_AD0_HIGH 0X69 // AD0为高的时候设备的写地址
#define MPU6050_ADDR 0xD0 //IIC写入时的地址字节数据
//技术文档未公布的寄存器 主要用于官方DMP操作
#define MPU6050_RA_XG_OFFS_TC 0x00 //[bit7] PWR_MODE, [6:1] XG_OFFS_TC, [bit 0] OTP_BNK_VLD
#define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
//bit7的定义,当设置为1,辅助I2C总线高电平是VDD。当设置为0,辅助I2C总线高电平是VLOGIC
#define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
#define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN
#define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN
#define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN
#define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS 两个寄存器合在一起
#define MPU6050_RA_XA_OFFS_L_TC 0x07
#define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS 两个寄存器合在一起
#define MPU6050_RA_YA_OFFS_L_TC 0x09
#define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS 两个寄存器合在一起
#define MPU6050_RA_ZA_OFFS_L_TC 0x0B
#define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR 两个寄存器合在一起
#define MPU6050_RA_XG_OFFS_USRL 0x14
#define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR 两个寄存器合在一起
#define MPU6050_RA_YG_OFFS_USRL 0x16
#define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR 两个寄存器合在一起
#define MPU6050_RA_ZG_OFFS_USRL 0x18
/*陀螺仪的采样频率*/
/*传感器的寄存器输出,FIFO输出,DMP采样、运动检测、
*
*SMPLRT_DIV把陀螺仪输出率分频即可得到采样率
*=/ (1 + SMPLRT_DIV)
*DLPF的情况下(DLPF_CFG = 07) = 8 khz
*DLPF(26)= 1 khz
*1 khz,1 khz时,
*FIFODMP和传感器寄存器*/
#define MPU6050_RA_SMPLRT_DIV 0x19 //[0-7] 陀螺仪输出分频采样率
/*配置外部引脚采样和DLPF数字低通滤波器*/
#define MPU6050_RA_CONFIG 0x1A
//bit5-bit3 一个连接到FSYNC端口的外部信号可以通过配置EXT_SYNC_SET来采样
// 也就是说,这里设置之后,FSYNC的电平0或1进入最终数据寄存器,具体如下
// 0 不使用 1 FSYNC电平进入所有数据寄存器 2 FSYNC电平进入GYRO_XOUT_L 3 FSYNC电平进入GYRO_YOUT_L
// 4 FSYNC电平进入GYRO_ZOUT_L 5 FSYNC电平进入ACCEL_XOUT_L 6 FSYNC电平进入ACCEL_YOUT_L
// 7 FSYNC电平进入SYNC_ACCEL_ZOUT_L
//bit2-bit0 数字低通滤波器 用于滤除高频干扰 高于这个频率的干扰被滤除掉
/*对应关系如下
* * | |
* * DLPF_CFG | | | | |
* -------------+--------+-------+--------+------+-------------
* 0 | 260Hz | 0ms | 256Hz | 0.98ms | 8kHz
* 1 | 184Hz | 2.0ms | 188Hz | 1.9ms | 1kHz
* 2 | 94Hz | 3.0ms | 98Hz | 2.8ms | 1kHz
* 3 | 44Hz | 4.9ms | 42Hz | 4.8ms | 1kHz
* 4 | 21Hz | 8.5ms | 20Hz | 8.3ms | 1kHz
* 5 | 10Hz | 13.8ms | 10Hz | 13.4ms | 1kHz
* 6 | 5Hz | 19.0ms | 5Hz | 18.6ms | 1kHz
* 7 | Reserved | Reserved | Reserved
* */
/*陀螺仪的配置,主要是配置陀螺仪的量程与自检(通过相应的位7 6 5 开启自检)*/
#define MPU6050_RA_GYRO_CONFIG 0x1B
//bit4-bit3 量程设置如下
// 0 = +/- 250 度/秒
// 1 = +/- 500 度/秒
// 2 = +/- 1000 度/秒
// 3 = +/- 2000 度/秒*/
/*加速度计的配置,主要是配置加速度计的量程与自检(通过相应的位7 6 5 开启自检)
*,*/
#define MPU6050_RA_ACCEL_CONFIG 0x1C
//bit7 启动X自检 加速度计的自检
//bit6 启动Y自检
//bit5 启动Z自检
//bit4-bit3 加速度传感器的量程配置
// 0 = +/- 2g
// 1 = +/- 4g
// 2 = +/- 8g
// 3 = +/- 16g*/
//bit0到bit2 加速度传感器的高通滤波器
/*DHPF是在路径中连接于运动探测器(自由落体,运动阈值,零运动)的一个滤波器模块。
*
*
*:
*:
*:,
*
* ACCEL_HPF | |
* ----------+-------------+------------------
* 0 | Reset | None
* 1 | On | 5Hz
* 2 | On | 2.5Hz
* 3 | On | 1.25Hz
* 4 | On | 0.63Hz
* 7 | Hold | None
*/
#define MPU6050_RA_FF_THR 0x1D
/*自由落体加速度的阈值
*
*FF_THR的单位是1LSB = 2mg
*(+1,)
* (30)
*FF_DUR中规定的时间时()
**/
#define MPU6050_RA_FF_DUR 0x1E
/*
*
*
* 1 khz,FF_DUR的单位是 1 LSB = 1
*
*
*
* ()
* */
#define MPU6050_RA_MOT_THR 0x1F
/*
*
*
*MOT_THR的单位是 1LSB = 2mg
*
*
*MOT_DUR的规定时间时
* MOT_DETECT_STATUS (Register 97)
*/
#define MPU6050_RA_MOT_DUR 0x20
/*
*
*
*1 kHz MOT_THR的单位是 1LSB = 1ms
*(Register 31)
*
*
**/
#define MPU6050_RA_ZRMOT_THR 0x21
/*
*
*
* ZRMOT_THR的单位是1LSB = 2mg
*
* (34)
* ZRMOT_DUR (Register 34)
*
* ,MOT_DETECT_STATUS寄存器(97)
* ,1,
* 0
**/
#define MPU6050_RA_ZRMOT_DUR 0x22
/*
*
*
* 16 Hz,ZRMOT_DUR的单位是1 LSB = 64 ms
* (Register 33)
*
*
**/
/*
*FIFO使能,
*FIFO缓冲中
**/
#define MPU6050_RA_FIFO_EN 0x23
//bit7 温度fifo使能
//bit6 陀螺仪Xfifo使能
//bit5 陀螺仪Yfifo使能
//bit4 陀螺仪Zfifo使能
//bit3 加速度传感器fifo使能
//bit2 外部从设备2fifo使能
//bit1 外部从设备1fifo使能
//bit0 外部从设备0fifo使能
#define MPU6050_RA_I2C_MST_CTRL 0x24
//配置单主机或者多主机下的IIC总线
//bit7 监视从设备总线,看总线是否可用 MULT_MST_EN设置为1时,MPU-60X0的总线仲裁检测逻辑被打开
//bit6 延迟数据就绪中断,直达从设备数据也进入主机再触发 相当于数据同步等待
//bit5 当设置为1时,与Slave3 相连的外部传感器数据(寄存器73 到寄存器 96)写入FIFO缓冲中,每次都写入
//bit4 主机读取一个从机到下一个从机读取之间的动作 为0 读取之间有一个restart,为1 下一次读取前会有一个重启,然后
// 一直读取直到切换写入或者切换设备
//bit3-bit0 配置MPU作为IIC主机时的时钟,基于MPU内部8M的分频
/* I2C_MST_CLK | I2C 主时钟速度 | 8MHz 时钟分频器
* ------------+------------------------+-------------------
* 0 | 348kHz | 23
* 1 | 333kHz | 24
* 2 | 320kHz | 25
* 3 | 308kHz | 26
* 4 | 296kHz | 27
* 5 | 286kHz | 28
* 6 | 276kHz | 29
* 7 | 267kHz | 30
* 8 | 258kHz | 31
* 9 | 500kHz | 16
* 10 | 471kHz | 17
* 11 | 444kHz | 18
* 12 | 421kHz | 19
* 13 | 400kHz | 20
* 14 | 381kHz | 21
* 15 | 364kHz | 22
* */
/**************************MPU链接IIC从设备控制寄存器,没使用从机连接的基本不用考虑这些************************************/
/*指定slave (0-3)的I2C地址
* Bit 7 (MSB)/Bit 7,,
* ,(6-0)slave设备的7-bit设备地址
* ,EXT_SENS_DATA寄存器中
* MPU-60505slaveSlave 4(getSlave4* setSlave4*)
* 25I2C数据转换通过采样率体现I2C数据转换能够
*
* I2C slave数据传输速率可根据采样率来减小
* I2C_MST_DLY(52)
* slave数据传输速率是否根据采样率来减小是由I2C_MST_DELAY_CTRL (103)
* slave的处理指令是固定的Slave的处理顺序是Slave 1, Slave 2, Slave 3 Slave 4
* Slave被禁用了
* slave可按采样率或降低的采样率来读取slave以采样率读取有些以减小
* slave的读取顺序依旧不变
* slave的读取速率不能在特定循环中进行读取
* ,52
* Slave是否按采样率或降低的采样率来读取由寄存器103得Delay Enable位来决定
**/
//从机0设置相关
#define MPU6050_RA_I2C_SLV0_ADDR 0x25
//bit7 当前IIC 从设备0的操作,1为读取 0写入
//bit6-bit0 从机设备的地址
/* 要读取或者要写入的设备内部的寄存器地址,不管读取还是写入*/
#define MPU6050_RA_I2C_SLV0_REG 0x26
/*iic从机系统配置寄存器*/
#define MPU6050_RA_I2C_SLV0_CTRL 0x27
//bit7 启动或者禁止这个设备的IIC数据传送过程
//bit6 当设置为1时,字节交换启用。当启用字节交换时,词对的高低字节即可交换
//bit5 当 I2C_SLV0_REG_DIS 置 1只能进行读取或者写入数据。当该位清 0可以再读取
// 或写入数据之前写入一个寄存器地址。当指定从机设备内部的寄存器地址进行发送或接收
// 数据时,该位必须等于 0
//bit4 指定从寄存器收到的字符对的分组顺序。当该位清 0寄存器地址
// 0和 1, 2 和 3 的字节是分别成对(甚至,奇数寄存器地址 ,作为一个字符对。当该位置 1
// 寄存器地址 1 和 2 3 和 4 的字节是分别成对的,作为一个字符对
//bit3-bit0 指定从机 0 发送字符的长度。由Slave 0转换而来和转换至Slave 0的字节数,(IIC一次传输的长度)
// 该位清 0I2C_SLV0_EN 位自动置 0.
/*IIC SLAVE1配置寄存器,与0相同*/
#define MPU6050_RA_I2C_SLV1_ADDR 0x28
#define MPU6050_RA_I2C_SLV1_REG 0x29
#define MPU6050_RA_I2C_SLV1_CTRL 0x2A
/*IIC SLAVE2配置寄存器,与0相同*/
#define MPU6050_RA_I2C_SLV2_ADDR 0x2B
#define MPU6050_RA_I2C_SLV2_REG 0x2C
#define MPU6050_RA_I2C_SLV2_CTRL 0x2D
/*IIC SLAVE3配置寄存器,与0相同*/
#define MPU6050_RA_I2C_SLV3_ADDR 0x2E
#define MPU6050_RA_I2C_SLV3_REG 0x2F
#define MPU6050_RA_I2C_SLV3_CTRL 0x30
/*slave4的I2C地址 IIC4与前几个的寄存器定义有所不同*/
#define MPU6050_RA_I2C_SLV4_ADDR 0x31 //与IIC SLAVE1类似
#define MPU6050_RA_I2C_SLV4_REG 0x32 /*slave4的当前内部寄存器*/
#define MPU6050_RA_I2C_SLV4_DO 0x33
/*写于slave4的新字节这一寄存器可储存写于slave4的数据。
* I2C_SLV4_RW设置为1*/
#define MPU6050_RA_I2C_SLV4_CTRL 0x34
//当设置为1时此位启用了slave4的转换操作。当设置为0时则禁用该操作
#define MPU6050_I2C_SLV4_EN_BIT 7
//当设置为1时此位启用了slave4事务完成的中断信号的生成。
// 当清除为0时则禁用了该信号的生成。这一中断状态可在寄存器54中看到。
#define MPU6050_I2C_SLV4_INT_EN_BIT 6
//当设置为1时,只进行数据的读或写操作。当设置为0时,
// 在读写数据之前将编写一个寄存器地址。当指定寄存器地址在slave设备中时
// 这应该等于0而在该寄存器中会进行数据处理。
#define MPU6050_I2C_SLV4_REG_DIS_BIT 5
//采样率延迟,这为根据采样率减小的I2C slaves传输速率进行了配置。
// 当一个slave的传输速率是根据采样率而降低的,那么该slave是以每1 / (1 + I2C_MST_DLY) 个样本进行传输。
// 这一基本的采样率也是由SMPLRT_DIV (寄存器 25)和DLPF_CFG (寄存器26)所决定的的。
// slave传输速率是否根据采样率来减小是由I2C_MST_DELAY_CTRL (寄存器103)所决定的
#define MPU6050_I2C_SLV4_MST_DLY_BIT 4 //[4:0]
#define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5
/*slave4中可读取的最后可用字节*/
#define MPU6050_RA_I2C_SLV4_DI 0x35
/*
* IIC辅助从机系统中断状态
**/
#define MPU6050_RA_I2C_MST_STATUS 0x36
//bit7 此位反映了一个与MPU-60X0相连的外部设备的FSYNC中断状态。
// 当设置为1且在INT_PIN_CFG(寄存器55)中断言FSYNC_INT_EN时中断产生。
//bit6 当slave4事务完成时设备会自动设置为1 如果定义了INT_ENABLE中的I2C_MST_INT_EN则产生中断
//bit5 I2C主机失去辅助I2C总线一个错误状态的仲裁此位自动设置为1.如果断言了INT_ENABLE寄存器
// 寄存器56中的I2C_MST_INT_EN位则中断产生
//bit4 slave4的NACK状态
//bit3 slave3的NACK状态
//bit2 slave2的NACK状态
//bit1 slave1的NACK状态
//bit0 slave0的NACK状态
/*中断引脚配置寄存器*/
#define MPU6050_RA_INT_PIN_CFG 0x37
//bit7 中断的逻辑电平模式,高电平时设置为0低电平时设置为1
//bit6 中断驱动模式,推拉模式设置为0开漏模式设置为1.
//bit5 中断锁存模式.50us-pulse模式设置为0latch-until-int-cleared模式设置为1
//bit4 中断锁存清除模式 status-read-only状态设置为0any-register-read状态设置为1.
//bit3 FSYNC中断逻辑电平模式 0=active-high, 1=active-low
//bit2 FSYNC端口中断启用设置设置为0时禁用设置为1时启用
//bit1 I2C支路启用状态,此位等于1且I2C_MST_EN (寄存器 106 位[5])等于0时,主机应用程序处理器能够直接访问MPU-60X0的辅助I2C总线
// 否则无论如何都不能直接访问
//bit0 当此位为1时CLKOUT端口可以输出参考时钟。当此位为0时输出禁用
/*部分中断使能*/
#define MPU6050_RA_INT_ENABLE 0x38
//bit7 自由落体中断使能
//bit6 运动检测中断使能
//bit5 零运动检测中断使能
//bit4 FIFO溢出中断使能
//bit3 IIC主机所有中断源使能
//bit0 数据就绪中断使能
/*DMP中断使能*/
#define MPU6050_RA_DMP_INT_STATUS 0x39
//不知道这些位的具体作用是什么,官方语焉不详,但是的确存在
#define MPU6050_DMPINT_4_BIT 4
#define MPU6050_DMPINT_3_BIT 3
#define MPU6050_DMPINT_2_BIT 2
#define MPU6050_DMPINT_1_BIT 1
#define MPU6050_DMPINT_0_BIT 0
/*DMP中断配置*/
#define MPU6050_RA_INT_STATUS 0x3A
//DMP中断位之一使能
#define MPU6050_INTERRUPT_PLL_RDY_INT_BIT 2
//DMP中断位之二使能
#define MPU6050_INTERRUPT_DMP_INT_BIT 1
/*加速度X输出*/
#define MPU6050_RA_ACCEL_XOUT_H 0x3B
#define MPU6050_RA_ACCEL_XOUT_L 0x3C
/*加速度Y输出*/
#define MPU6050_RA_ACCEL_YOUT_H 0x3D
#define MPU6050_RA_ACCEL_YOUT_L 0x3E
/*加速度Z输出*/
#define MPU6050_RA_ACCEL_ZOUT_H 0x3F
#define MPU6050_RA_ACCEL_ZOUT_L 0x40
/*温度值输出*/
#define MPU6050_RA_TEMP_OUT_H 0x41
#define MPU6050_RA_TEMP_OUT_L 0x42
/*陀螺仪X输出*/
#define MPU6050_RA_GYRO_XOUT_H 0x43
#define MPU6050_RA_GYRO_XOUT_L 0x44
/*陀螺仪Y输出*/
#define MPU6050_RA_GYRO_YOUT_H 0x45
#define MPU6050_RA_GYRO_YOUT_L 0x46
/*陀螺仪Z输出*/
#define MPU6050_RA_GYRO_ZOUT_H 0x47
#define MPU6050_RA_GYRO_ZOUT_L 0x48
/*从IIC从机上获取到的数据*/
#define MPU6050_RA_EXT_SENS_DATA_00 0x49
#define MPU6050_RA_EXT_SENS_DATA_01 0x4A
#define MPU6050_RA_EXT_SENS_DATA_02 0x4B
#define MPU6050_RA_EXT_SENS_DATA_03 0x4C
#define MPU6050_RA_EXT_SENS_DATA_04 0x4D
#define MPU6050_RA_EXT_SENS_DATA_05 0x4E
#define MPU6050_RA_EXT_SENS_DATA_06 0x4F
#define MPU6050_RA_EXT_SENS_DATA_07 0x50
#define MPU6050_RA_EXT_SENS_DATA_08 0x51
#define MPU6050_RA_EXT_SENS_DATA_09 0x52
#define MPU6050_RA_EXT_SENS_DATA_10 0x53
#define MPU6050_RA_EXT_SENS_DATA_11 0x54
#define MPU6050_RA_EXT_SENS_DATA_12 0x55
#define MPU6050_RA_EXT_SENS_DATA_13 0x56
#define MPU6050_RA_EXT_SENS_DATA_14 0x57
#define MPU6050_RA_EXT_SENS_DATA_15 0x58
#define MPU6050_RA_EXT_SENS_DATA_16 0x59
#define MPU6050_RA_EXT_SENS_DATA_17 0x5A
#define MPU6050_RA_EXT_SENS_DATA_18 0x5B
#define MPU6050_RA_EXT_SENS_DATA_19 0x5C
#define MPU6050_RA_EXT_SENS_DATA_20 0x5D
#define MPU6050_RA_EXT_SENS_DATA_21 0x5E
#define MPU6050_RA_EXT_SENS_DATA_22 0x5F
#define MPU6050_RA_EXT_SENS_DATA_23 0x60
//运动检测的状态
#define MPU6050_RA_MOT_DETECT_STATUS 0x61
//bit7 x轴反向运动检测中断状态
//bit6 x轴正向运动检测中断状态
//bit5 Y轴反向运动检测中断状态
//bit4 Y轴正向运动检测中断状态
//bit3 Z轴反向运动检测中断状态
//bit2 Z轴正向运动检测中断状态
//bit1
//bit0 零运动检测中断状态
//
/*写入到IIC从机中的数据,指定的slv数据输出容器*/
#define MPU6050_RA_I2C_SLV0_DO 0x63
#define MPU6050_RA_I2C_SLV1_DO 0x64
#define MPU6050_RA_I2C_SLV2_DO 0x65
#define MPU6050_RA_I2C_SLV3_DO 0x66
/*外部影子寄存器的配置,这个寄存器用于指定外部传感器数据影子的时间
*slave
*slave的传输速率是根据采样率而降低的,slave是以
*1 / (1 + I2C_MST_DLY)
* 1 / (1 + I2C_MST_DLY) Samples
* SMPLRT_DIV ( 25)DLPF_CFG (26)*/
#define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67
//DELAY_ES_SHADOW设置为1,跟随外部传感器数据影子将会延迟到所有的数据接收完毕。
#define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT 7
//slv4-0的配置
#define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4
#define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3
#define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2
#define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1
#define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0
/*用于陀螺仪,加速度计,温度传感器的模拟和数字信号通道的复位。
*/
#define MPU6050_RA_SIGNAL_PATH_RESET 0x68
//bit2 重置陀螺仪的信号路径
//bit1 重置加速度传感器的信号路径
//bit0 重置温度传感器的信号路径
/*获取加速度传感器启动延迟 还有滤波器的一些配置
*
*
*
* 43ACCEL_ON_DELAY中规定
* 1 LSB = 1 InvenSense另行指示
* */
#define MPU6050_RA_MOT_DETECT_CTRL 0x69
//具体的有效控制位
//bit5-bit4 [5:4]1-4ms 延时时间1-4ms选择
//bit3-bit2 自由落体检测计数器的减量配置。
// 当指定数量的样本的加速度测量都满足其各自的阈值条件时,
// 检测结果存储于自由落体检测模块中。当满足阈值条件时,
// 相应的检测计数器递增1。用户可通过FF_COUNT配置不满足阈值条件来减量。
// 减量率可根据下表进行设置:
/* FF_COUNT | 计数器减量
* ---------+------------------
* 0 |
* 1 | 1
* 2 | 2
* 3 | 4
* FF_COUNT配置为0(),0*/
//bit1-bit0 运动检测计数器的减量配置。
// 当指定数量的样本的加速度测量都满足其各自的阈值条件时,
// 检测结果存储于运动检测模块中。当满足阈值条件时相应的检测计数器递增1。
// 用户可通过MOT_COUNT配置不满足阈值条件来减量。减量率可根据下表进行设置
// MOT_COUNT | 计数器减量
/* ----------+------------------
* 0 |
* 1 | 1
* 2 | 2
* 3 | 4
* MOT_COUNT配置为0(),0*/
/*这个寄存器允许用户使能或使能 FIFO 缓冲区,
*I2C I2C FIFO
I2C 使*/
#define MPU6050_RA_USER_CTRL 0x6A
//bit7 DMP禁止
//bit6 当此位设置为0,FIFO缓冲是禁用的
//bit5 当这个模式被启用,MPU-60X0即成为辅助I2C总线上的外部传感器slave设备的I2C主机
// 当此位被清除为0时,辅助I2C总线线路(AUX_DA and AUX_CL)理论上是由I2C总线
// (SDA和SCL)驱动的。这是启用旁路模式的一个前提
//bit4 I2C转换至SPI模式(只允许MPU-6000)
//bit3 重置DMP模式,官方文档未说明的寄存器
//bit2 重置FIFO当设置为1时此位将重置FIFO缓冲区此时FIFO_EN等于0。触发重置后此位将自动清为0
//bit1 重置I2C主机当设置为1时此位将重置I2C主机此时I2C_MST_EN等于0。触发重置后此位将自动清为0
//bit0 重置所有传感器寄存器和信号路径 如果只重置信号路径不重置传感器寄存器请使用寄存器104
/*允许用户配置电源模式和时钟源。还提供了复位整个设备和禁用温度传感器的位*/
#define MPU6050_RA_PWR_MGMT_1 0x6B
//bit7 触发一个设备的完整重置。 触发重置后,一个~ 50 毫秒的小延迟是合理的
//bit6 寄存器的SLEEP位设置使设备处于非常低功率的休眠模式。
//bit5 唤醒周期启用状态当此位设为1且SLEEP禁用时.在休眠模式和唤醒模式间循环,以此从活跃的传感器中获取数据样本
//bit3 温度传感器启用状态控制内部温度传感器的使用
//bit2-bit0 设定时钟源设置,一个频率为8 mhz的内部振荡器,基于陀螺仪的时钟或外部信息源都可以被选为MPU-60X0的时钟源
/* CLK_SEL | 时钟源
* --------+--------------------------------------
* 0 |
* 1 | PLL with X Gyro reference
* 2 | PLL with Y Gyro reference
* 3 | PLL with Z Gyro reference
* 4 | PLL with external 32.768kHz reference
* 5 | PLL with external 19.2MHz reference
* 6 | Reserved
* 7 | Stops the clock and keeps the timing generator in reset
* */
/*这个寄存器允许用户配置加速度计在低功耗模式下唤起的频率。也允许用户让加速度计和
*/
#define MPU6050_RA_PWR_MGMT_2 0x6C
//bit7-bit6 Accel-Only低电量模式下的唤醒频率
/* 通过把Power Management 1寄存器寄存器107中的PWRSEL设为1
* MPU-60X0可以处于Accerlerometer Only的低电量模式,
I2C接口以外的所有设备accelerometer以固定时间
LP_WAKE_CTRL进行配置
* LP_WAKE_CTRL |  
* -------------+------------------
* 0 | 1.25 Hz
* 1 | 2.5 Hz
* 2 | 5 Hz
* 3 | 10 Hz
* */
//bit5 备用的x轴加速度传感器启用状态,也就是进入待机模式
//bit4 备用的Y轴加速度传感器启用状态
//bit3 备用的Z轴加速度传感器启用状态
//bit2 备用的x轴陀螺仪启用状态
//bit1 备用的Y轴陀螺仪启用状态
//bit0 备用的Z轴陀螺仪启用状态
/*设定DMP模式下的bank*/
#define MPU6050_RA_BANK_SEL 0x6D
//DMP内存配置
#define MPU6050_BANKSEL_PRFTCH_EN_BIT 6
#define MPU6050_BANKSEL_CFG_USER_BANK_BIT 5
#define MPU6050_BANKSEL_MEM_SEL_BIT 4
#define MPU6050_BANKSEL_MEM_SEL_LENGTH 5
//dmp内存地址设置
#define MPU6050_DMP_MEMORY_BANKS 8
#define MPU6050_DMP_MEMORY_BANK_SIZE 256
#define MPU6050_DMP_MEMORY_CHUNK_SIZE 16
/*设定DMP模式下的起始地址*/
#define MPU6050_RA_MEM_START_ADDR 0x6E
/*一个字节的dmp数据缓存*/
#define MPU6050_RA_MEM_R_W 0x6F
/*DMP配置寄存器1*/
#define MPU6050_RA_DMP_CFG_1 0x70
/*DMP配置寄存器2*/
#define MPU6050_RA_DMP_CFG_2 0x71
/*当前FIFO缓冲区大小
* FIFO缓冲区的字节数
* FIFO缓冲区读取的字节数
* FIFO(3536)
* 16*/
#define MPU6050_RA_FIFO_COUNTH 0x72
#define MPU6050_RA_FIFO_COUNTL 0x73
/*这个寄存器用于从FIFO缓冲区中读取和编写数据。数据在寄存器编号(从低到高)的指
*FIFOFIFO启用标志()
*(7396)slave设备相连
*,5996
* 5996FIFO启用标志在FIFO_EN
* 35)1FIFO缓冲区I2C_MST_CTRL ( 36)
* I2C Slave 3
* FIFO缓冲区溢出,FIFO_OFLOW_INT自动设置为1
* INT_STATUS (58)FIFO缓冲区溢出时,
* FIFOFIFO缓冲区为空, FIFO中读取的
* FIFO_COUNT,FIFO缓冲为空时读取*/
#define MPU6050_RA_FIFO_R_W 0x74
/*寄存器是用来验证设备的身份的 默认值是0X34*/
#define MPU6050_RA_WHO_AM_I 0x75
//bit6-bit1 设备身份验证 0x34 最高位和最低位都剔除掉
#ifdef __cplusplus
}
#endif
#endif