1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  */
4 
5 #ifndef _MPU6050_H
6 #define _MPU6050_H
7 #include "k_api.h"
8 #include <math.h>
9 #include <stdbool.h>
10 // #include "inv_mpu_dmp_motion_driver.h"
11 
12 // #define MPU_ACCEL_OFFS_REG 0X06
13 // accel_offs寄存器,可读取版本号,寄存器手册未提到
14 // #define MPU_PROD_ID_REG 0X0C
15 // prod id寄存器,在寄存器手册未提到
16 #define MPU_SELF_TESTX_REG   0X0D
17 // 自检寄存器X
18 #define MPU_SELF_TESTY_REG   0X0E
19 // 自检寄存器Y
20 #define MPU_SELF_TESTZ_REG   0X0F
21 // 自检寄存器Z
22 #define MPU_SELF_TESTA_REG   0X10
23 // 自检寄存器A
24 #define MPU_SAMPLE_RATE_REG  0X19
25 // 采样频率分频器
26 #define MPU_CFG_REG          0X1A
27 // 配置寄存器
28 #define MPU_GYRO_CFG_REG     0X1B
29 // 陀螺仪配置寄存器
30 #define MPU_ACCEL_CFG_REG    0X1C
31 // 加速度计配置寄存器
32 #define MPU_MOTION_DET_REG   0X1F
33 // 运动检测阀值设置寄存器
34 #define MPU_FIFO_EN_REG      0X23
35 // FIFO使能寄存器
36 #define MPU_I2CMST_CTRL_REG  0X24
37 // IIC主机控制寄存器
38 #define MPU_I2CSLV0_ADDR_REG 0X25
39 // IIC从机0器件地址寄存器
40 #define MPU_I2CSLV0_REG      0X26
41 // IIC从机0数据地址寄存器
42 #define MPU_I2CSLV0_CTRL_REG 0X27
43 // IIC从机0控制寄存器
44 #define MPU_I2CSLV1_ADDR_REG 0X28
45 // IIC从机1器件地址寄存器
46 #define MPU_I2CSLV1_REG      0X29
47 // IIC从机1数据地址寄存器
48 #define MPU_I2CSLV1_CTRL_REG 0X2A
49 // IIC从机1控制寄存器
50 #define MPU_I2CSLV2_ADDR_REG 0X2B
51 // IIC从机2器件地址寄存器
52 #define MPU_I2CSLV2_REG      0X2C
53 // IIC从机2数据地址寄存器
54 #define MPU_I2CSLV2_CTRL_REG 0X2D
55 // IIC从机2控制寄存器
56 #define MPU_I2CSLV3_ADDR_REG 0X2E
57 // IIC从机3器件地址寄存器
58 #define MPU_I2CSLV3_REG      0X2F
59 // IIC从机3数据地址寄存器
60 #define MPU_I2CSLV3_CTRL_REG 0X30
61 // IIC从机3控制寄存器
62 #define MPU_I2CSLV4_ADDR_REG 0X31
63 // IIC从机4器件地址寄存器
64 #define MPU_I2CSLV4_REG      0X32
65 // IIC从机4数据地址寄存器
66 #define MPU_I2CSLV4_DO_REG   0X33
67 // IIC从机4写数据寄存器
68 #define MPU_I2CSLV4_CTRL_REG 0X34
69 // IIC从机4控制寄存器
70 #define MPU_I2CSLV4_DI_REG   0X35
71 // IIC从机4读数据寄存器
72 
73 #define MPU_I2CMST_STA_REG 0X36
74 // IIC主机状态寄存器
75 #define MPU_INTBP_CFG_REG  0X37
76 // 中断/旁路设置寄存器
77 #define MPU_INT_EN_REG     0X38
78 // 中断使能寄存器
79 #define MPU_INT_STA_REG    0X3A
80 // 中断状态寄存器
81 
82 #define MPU_ACCEL_XOUTH_REG 0X3B
83 // 加速度值,X轴高8位寄存器
84 #define MPU_ACCEL_XOUTL_REG 0X3C
85 // 加速度值,X轴低8位寄存器
86 #define MPU_ACCEL_YOUTH_REG 0X3D
87 // 加速度值,Y轴高8位寄存器
88 #define MPU_ACCEL_YOUTL_REG 0X3E
89 // 加速度值,Y轴低8位寄存器
90 #define MPU_ACCEL_ZOUTH_REG 0X3F
91 // 加速度值,Z轴高8位寄存器
92 #define MPU_ACCEL_ZOUTL_REG 0X40
93 // 加速度值,Z轴低8位寄存器
94 
95 #define MPU_TEMP_OUTH_REG 0X41
96 // 温度值高八位寄存器
97 #define MPU_TEMP_OUTL_REG 0X42
98 // 温度值低8位寄存器
99 
100 #define MPU_GYRO_XOUTH_REG 0X43
101 // 陀螺仪值,X轴高8位寄存器
102 #define MPU_GYRO_XOUTL_REG 0X44
103 // 陀螺仪值,X轴低8位寄存器
104 #define MPU_GYRO_YOUTH_REG 0X45
105 // 陀螺仪值,Y轴高8位寄存器
106 #define MPU_GYRO_YOUTL_REG 0X46
107 // 陀螺仪值,Y轴低8位寄存器
108 #define MPU_GYRO_ZOUTH_REG 0X47
109 // 陀螺仪值,Z轴高8位寄存器
110 #define MPU_GYRO_ZOUTL_REG 0X48
111 // 陀螺仪值,Z轴低8位寄存器
112 
113 #define MPU_I2CSLV0_DO_REG 0X63
114 // IIC从机0数据寄存器
115 #define MPU_I2CSLV1_DO_REG 0X64
116 // IIC从机1数据寄存器
117 #define MPU_I2CSLV2_DO_REG 0X65
118 // IIC从机2数据寄存器
119 #define MPU_I2CSLV3_DO_REG 0X66
120 // IIC从机3数据寄存器
121 
122 #define MPU_I2CMST_DELAY_REG 0X67
123 // IIC主机延时管理寄存器
124 #define MPU_SIGPATH_RST_REG  0X68
125 // 信号通道复位寄存器
126 #define MPU_MDETECT_CTRL_REG 0X69
127 // 运动检测控制寄存器
128 #define MPU_USER_CTRL_REG    0X6A
129 // 用户控制寄存器
130 #define MPU_PWR_MGMT1_REG    0X6B
131 // 电源管理寄存器1
132 #define MPU_PWR_MGMT2_REG    0X6C
133 // 电源管理寄存器2
134 #define MPU_FIFO_CNTH_REG    0X72
135 // FIFO计数寄存器高八位
136 #define MPU_FIFO_CNTL_REG    0X73
137 // FIFO计数寄存器低八位
138 #define MPU_FIFO_RW_REG      0X74
139 // FIFO读写寄存器
140 #define MPU_DEVICE_ID_REG    0X75
141 // 器件ID寄存器
142 
143 // 如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).
144 // 如果接V3.3,则IIC地址为0X69(不包含最低位).
145 #define MPU_I2C_PORT  0x1
146 #define MPU_ADDR      0X69
147 #define MPU_DEV_ID    0x68
148 
149 // 因为模块AD0默认接GND,所以转为读写地址后,为0XD1和0XD0(如果接VCC,则为0XD3和0XD2)
150 // #define MPU_READ    0XD1
151 // #define MPU_WRITE   0XD0
152 
153 extern uint8_t MPU_Init(void); // 初始化MPU6050
154 extern float MPU_Get_Temperature(void);
155 extern void MPU_Get_Gyroscope(short *gx, short *gy, short *gz);
156 extern void MPU_Get_Accelerometer(short *ax, short *ay, short *az);
157 extern void MPU_Deinit(void);
158 #endif
159