IZAR Flight Controller 1.0.0
IZAR Flight Controller running with an ESP32.
mpu6050_regs.h
Go to the documentation of this file.
1#ifndef __MPU6050_REGS_H__
2#define __MPU6050_REGS_H__
3
4#define MPU6050_REGISTER_XG_OFFS_TC (0)
5#define MPU6050_REGISTER_YG_OFFS_TC (0x01)
6#define MPU6050_REGISTER_ZG_OFFS_TC (0x02)
7#define MPU6050_REGISTER_X_FINE_GAIN (0x03)
8#define MPU6050_REGISTER_Y_FINE_GAIN (0x04)
9#define MPU6050_REGISTER_Z_FINE_GAIN (0x05)
10#define MPU6050_REGISTER_XA_OFFS_H (0x06)
11#define MPU6050_REGISTER_XA_OFFS_L_TC (0x07)
12#define MPU6050_REGISTER_YA_OFFS_H (0x08)
13#define MPU6050_REGISTER_YA_OFFS_L_TC (0x09)
14#define MPU6050_REGISTER_ZA_OFFS_H (0x0A)
15#define MPU6050_REGISTER_ZA_OFFS_L_TC (0x0B)
16#define MPU6050_REGISTER_SELF_TEST_X (0x0D)
17#define MPU6050_REGISTER_SELF_TEST_Y (0x0E)
18#define MPU6050_REGISTER_SELF_TEST_Z (0x0F)
19#define MPU6050_REGISTER_SELF_TEST_A (0x10)
20#define MPU6050_REGISTER_XG_OFFS_USRH (0x13)
21#define MPU6050_REGISTER_XG_OFFS_USRL (0x14)
22#define MPU6050_REGISTER_YG_OFFS_USRH (0x15)
23#define MPU6050_REGISTER_YG_OFFS_USRL (0x16)
24#define MPU6050_REGISTER_ZG_OFFS_USRH (0x17)
25#define MPU6050_REGISTER_ZG_OFFS_USRL (0x18)
26#define MPU6050_REGISTER_SMPLRT_DIV (0x19)
27#define MPU6050_REGISTER_CONFIG (0x1A)
28#define MPU6050_REGISTER_GYRO_CONFIG (0x1B)
29#define MPU6050_REGISTER_ACCEL_CONFIG (0x1C)
30#define MPU6050_REGISTER_FF_THR (0x1D)
31#define MPU6050_REGISTER_FF_DUR (0x1E)
32#define MPU6050_REGISTER_MOT_THR (0x1F)
33#define MPU6050_REGISTER_MOT_DUR (0x20)
34#define MPU6050_REGISTER_ZRMOT_THR (0x21)
35#define MPU6050_REGISTER_ZRMOT_DUR (0x22)
36#define MPU6050_REGISTER_FIFO_EN (0x23)
37#define MPU6050_REGISTER_I2C_MST_CTRL (0x24)
38#define MPU6050_REGISTER_I2C_SLV0_ADDR (0x25)
39#define MPU6050_REGISTER_I2C_SLV0_REG (0x26)
40#define MPU6050_REGISTER_I2C_SLV0_CTRL (0x27)
41#define MPU6050_REGISTER_I2C_SLV1_ADDR (0x28)
42#define MPU6050_REGISTER_I2C_SLV1_REG (0x29)
43#define MPU6050_REGISTER_I2C_SLV1_CTRL (0x2A)
44#define MPU6050_REGISTER_I2C_SLV2_ADDR (0x2B)
45#define MPU6050_REGISTER_I2C_SLV2_REG (0x2C)
46#define MPU6050_REGISTER_I2C_SLV2_CTRL (0x2D)
47#define MPU6050_REGISTER_I2C_SLV3_ADDR (0x2E)
48#define MPU6050_REGISTER_I2C_SLV3_REG (0x2F)
49#define MPU6050_REGISTER_I2C_SLV3_CTRL (0x30)
50#define MPU6050_REGISTER_I2C_SLV4_ADDR (0x31)
51#define MPU6050_REGISTER_I2C_SLV4_REG (0x32)
52#define MPU6050_REGISTER_I2C_SLV4_DO (0x33)
53#define MPU6050_REGISTER_I2C_SLV4_CTRL (0x34)
54#define MPU6050_REGISTER_I2C_SLV4_DI (0x35)
55#define MPU6050_REGISTER_I2C_MST_STATUS (0x36)
56#define MPU6050_REGISTER_INT_PIN_CFG (0x37)
57#define MPU6050_REGISTER_INT_ENABLE (0x38)
58#define MPU6050_REGISTER_DMP_INT_STATUS (0x39)
59#define MPU6050_REGISTER_INT_STATUS (0x3A)
60#define MPU6050_REGISTER_ACCEL_XOUT_H (0x3B)
61#define MPU6050_REGISTER_ACCEL_XOUT_L (0x3C)
62#define MPU6050_REGISTER_ACCEL_YOUT_H (0x3D)
63#define MPU6050_REGISTER_ACCEL_YOUT_L (0x3E)
64#define MPU6050_REGISTER_ACCEL_ZOUT_H (0x3F)
65#define MPU6050_REGISTER_ACCEL_ZOUT_L (0x40)
66#define MPU6050_REGISTER_TEMP_OUT_H (0x41)
67#define MPU6050_REGISTER_TEMP_OUT_L (0x42)
68#define MPU6050_REGISTER_GYRO_XOUT_H (0x43)
69#define MPU6050_REGISTER_GYRO_XOUT_L (0x44)
70#define MPU6050_REGISTER_GYRO_YOUT_H (0x45)
71#define MPU6050_REGISTER_GYRO_YOUT_L (0x46)
72#define MPU6050_REGISTER_GYRO_ZOUT_H (0x47)
73#define MPU6050_REGISTER_GYRO_ZOUT_L (0x48)
74#define MPU6050_REGISTER_EXT_SENS_DATA_00 (0x49)
75#define MPU6050_REGISTER_EXT_SENS_DATA_01 (0x4A)
76#define MPU6050_REGISTER_EXT_SENS_DATA_02 (0x4B)
77#define MPU6050_REGISTER_EXT_SENS_DATA_03 (0x4C)
78#define MPU6050_REGISTER_EXT_SENS_DATA_04 (0x4D)
79#define MPU6050_REGISTER_EXT_SENS_DATA_05 (0x4E)
80#define MPU6050_REGISTER_EXT_SENS_DATA_06 (0x4F)
81#define MPU6050_REGISTER_EXT_SENS_DATA_07 (0x50)
82#define MPU6050_REGISTER_EXT_SENS_DATA_08 (0x51)
83#define MPU6050_REGISTER_EXT_SENS_DATA_09 (0x52)
84#define MPU6050_REGISTER_EXT_SENS_DATA_10 (0x53)
85#define MPU6050_REGISTER_EXT_SENS_DATA_11 (0x54)
86#define MPU6050_REGISTER_EXT_SENS_DATA_12 (0x55)
87#define MPU6050_REGISTER_EXT_SENS_DATA_13 (0x56)
88#define MPU6050_REGISTER_EXT_SENS_DATA_14 (0x57)
89#define MPU6050_REGISTER_EXT_SENS_DATA_15 (0x58)
90#define MPU6050_REGISTER_EXT_SENS_DATA_16 (0x59)
91#define MPU6050_REGISTER_EXT_SENS_DATA_17 (0x5A)
92#define MPU6050_REGISTER_EXT_SENS_DATA_18 (0x5B)
93#define MPU6050_REGISTER_EXT_SENS_DATA_19 (0x5C)
94#define MPU6050_REGISTER_EXT_SENS_DATA_20 (0x5D)
95#define MPU6050_REGISTER_EXT_SENS_DATA_21 (0x5E)
96#define MPU6050_REGISTER_EXT_SENS_DATA_22 (0x5F)
97#define MPU6050_REGISTER_EXT_SENS_DATA_23 (0x60)
98#define MPU6050_REGISTER_MOT_DETECT_STATUS (0x61)
99#define MPU6050_REGISTER_I2C_SLV0_DO (0x63)
100#define MPU6050_REGISTER_I2C_SLV1_DO (0x64)
101#define MPU6050_REGISTER_I2C_SLV2_DO (0x65)
102#define MPU6050_REGISTER_I2C_SLV3_DO (0x66)
103#define MPU6050_REGISTER_I2C_MST_DELAY_CTRL (0x67)
104#define MPU6050_REGISTER_SIGNAL_PATH_RESET (0x68)
105#define MPU6050_REGISTER_MOT_DETECT_CTRL (0x69)
106#define MPU6050_REGISTER_USER_CTRL (0x6A)
107#define MPU6050_REGISTER_PWR_MGMT_1 (0x6B)
108#define MPU6050_REGISTER_PWR_MGMT_2 (0x6C)
109#define MPU6050_REGISTER_BANK_SEL (0x6D)
110#define MPU6050_REGISTER_MEM_START_ADDR (0x6E)
111#define MPU6050_REGISTER_MEM_R_W (0x6F)
112#define MPU6050_REGISTER_DMP_CFG_1 (0x70)
113#define MPU6050_REGISTER_DMP_CFG_2 (0x71)
114#define MPU6050_REGISTER_FIFO_COUNTH (0x72)
115#define MPU6050_REGISTER_FIFO_COUNTL (0x73)
116#define MPU6050_REGISTER_FIFO_R_W (0x74)
117#define MPU6050_REGISTER_WHO_AM_I (0x75)
118
119// DLPF values
120#define MPU6050_DLPF_BW_256 (0x00)
121#define MPU6050_DLPF_BW_188 (0x01)
122#define MPU6050_DLPF_BW_98 (0x02)
123#define MPU6050_DLPF_BW_42 (0x03)
124#define MPU6050_DLPF_BW_20 (0x04)
125#define MPU6050_DLPF_BW_10 (0x05)
126#define MPU6050_DLPF_BW_5 (0x06)
127
128// DHPF values:
129#define MPU6050_DHPF_RESET (0x00)
130#define MPU6050_DHPF_5 (0x01)
131#define MPU6050_DHPF_2P5 (0x02)
132#define MPU6050_DHPF_1P25 (0x03)
133#define MPU6050_DHPF_0P63 (0x04)
134#define MPU6050_DHPF_HOLD (0x07)
135
136
137// Decrement values:
138#define MPU6050_DETECT_DECREMENT_RESET (0x0)
139#define MPU6050_DETECT_DECREMENT_1 (0x1)
140#define MPU6050_DETECT_DECREMENT_2 (0x2)
141#define MPU6050_DETECT_DECREMENT_4 (0x3)
142
143// External sync values:
144#define MPU6050_EXT_SYNC_DISABLED (0x0)
145#define MPU6050_EXT_SYNC_TEMP_OUT_L (0x1)
146#define MPU6050_EXT_SYNC_GYRO_XOUT_L (0x2)
147#define MPU6050_EXT_SYNC_GYRO_YOUT_L (0x3)
148#define MPU6050_EXT_SYNC_GYRO_ZOUT_L (0x4)
149#define MPU6050_EXT_SYNC_ACCEL_XOUT_L (0x5)
150#define MPU6050_EXT_SYNC_ACCEL_YOUT_L (0x6)
151#define MPU6050_EXT_SYNC_ACCEL_ZOUT_L (0x7)
152
153// Clock division values:
154#define MPU6050_CLOCK_DIV_348 (0x0)
155#define MPU6050_CLOCK_DIV_333 (0x1)
156#define MPU6050_CLOCK_DIV_320 (0x2)
157#define MPU6050_CLOCK_DIV_308 (0x3)
158#define MPU6050_CLOCK_DIV_296 (0x4)
159#define MPU6050_CLOCK_DIV_286 (0x5)
160#define MPU6050_CLOCK_DIV_276 (0x6)
161#define MPU6050_CLOCK_DIV_267 (0x7)
162#define MPU6050_CLOCK_DIV_258 (0x8)
163#define MPU6050_CLOCK_DIV_500 (0x9)
164#define MPU6050_CLOCK_DIV_471 (0xA)
165#define MPU6050_CLOCK_DIV_444 (0xB)
166#define MPU6050_CLOCK_DIV_421 (0xC)
167#define MPU6050_CLOCK_DIV_400 (0xD)
168#define MPU6050_CLOCK_DIV_381 (0xE)
169#define MPU6050_CLOCK_DIV_364 (0xF)
170
171// Bit and length defines for SELF_TEST register:
172#define MPU6050_SELF_TEST_XA_1_BIT (0x07)
173#define MPU6050_SELF_TEST_XA_1_LENGTH (0x03)
174#define MPU6050_SELF_TEST_XA_2_BIT (0x05)
175#define MPU6050_SELF_TEST_XA_2_LENGTH (0x02)
176#define MPU6050_SELF_TEST_YA_1_BIT (0x07)
177#define MPU6050_SELF_TEST_YA_1_LENGTH (0x03)
178#define MPU6050_SELF_TEST_YA_2_BIT (0x03)
179#define MPU6050_SELF_TEST_YA_2_LENGTH (0x02)
180#define MPU6050_SELF_TEST_ZA_1_BIT (0x07)
181#define MPU6050_SELF_TEST_ZA_1_LENGTH (0x03)
182#define MPU6050_SELF_TEST_ZA_2_BIT (0x01)
183#define MPU6050_SELF_TEST_ZA_2_LENGTH (0x02)
184#define MPU6050_SELF_TEST_XG_1_BIT (0x04)
185#define MPU6050_SELF_TEST_XG_1_LENGTH (0x05)
186#define MPU6050_SELF_TEST_YG_1_BIT (0x04)
187#define MPU6050_SELF_TEST_YG_1_LENGTH (0x05)
188#define MPU6050_SELF_TEST_ZG_1_BIT (0x04)
189#define MPU6050_SELF_TEST_ZG_1_LENGTH (0x05)
190
191// Bit and length defines for CONFIG register:
192#define MPU6050_CFG_EXT_SYNC_SET_BIT (3)
193#define MPU6050_CFG_EXT_SYNC_SET_MASK (7 << MPU6050_CFG_EXT_SYNC_SET_BIT)
194#define MPU6050_CFG_DLPF_CFG_BIT (0)
195#define MPU6050_CFG_DLPF_CFG_MASK (7 << MPU6050_CFG_DLPF_CFG_BIT)
196
197// Bit and length defines for GYRO_CONFIG register:
198#define MPU6050_GCONFIG_FS_SEL_BIT (3)
199#define MPU6050_GCONFIG_FS_SEL_MASK (3 << MPU6050_GCONFIG_FS_SEL_BIT)
200
201// Bit and length defines for ACCEL_CONFIG register:
202#define MPU6050_ACONFIG_XA_ST_BIT (7)
203#define MPU6050_ACONFIG_YA_ST_BIT (6)
204#define MPU6050_ACONFIG_ZA_ST_BIT (5)
205#define MPU6050_ACONFIG_AFS_SEL_BIT (3)
206#define MPU6050_ACONFIG_AFS_SEL_MASK (3 << MPU6050_ACONFIG_AFS_SEL_BIT)
207#define MPU6050_ACONFIG_ACCEL_HPF_BIT (0)
208#define MPU6050_ACONFIG_ACCEL_HPF_MASK (7 << MPU6050_ACONFIG_ACCEL_HPF_BIT)
209
210// Bit and length defines for FIFO_EN register:
211#define MPU6050_TEMP_FIFO_EN_BIT (7)
212#define MPU6050_XG_FIFO_EN_BIT (6)
213#define MPU6050_YG_FIFO_EN_BIT (5)
214#define MPU6050_ZG_FIFO_EN_BIT (4)
215#define MPU6050_ACCEL_FIFO_EN_BIT (3)
216#define MPU6050_SLV2_FIFO_EN_BIT (2)
217#define MPU6050_SLV1_FIFO_EN_BIT (1)
218#define MPU6050_SLV0_FIFO_EN_BIT (0)
219
220// Bit and length defines for I2C_MST_CTRL register:
221#define MPU6050_MULT_MST_EN_BIT (7)
222#define MPU6050_WAIT_FOR_ES_BIT (6)
223#define MPU6050_SLV_3_FIFO_EN_BIT (5)
224#define MPU6050_I2C_MST_P_NSR_BIT (4)
225#define MPU6050_I2C_MST_CLK_BIT (0)
226#define MPU6050_I2C_MST_CLK_MASK (7 << MPU6050_I2C_MST_CLK_BIT)
227
228// Bit and length defines for I2C_SLV* register:
229#define MPU6050_I2C_SLV_RW_BIT (7)
230#define MPU6050_I2C_SLV_ADDR_BIT (6)
231#define MPU6050_I2C_SLV_ADDR_LENGTH (7)
232#define MPU6050_I2C_SLV_EN_BIT (7)
233#define MPU6050_I2C_SLV_BYTE_SW_BIT (6)
234#define MPU6050_I2C_SLV_REG_DIS_BIT (5)
235#define MPU6050_I2C_SLV_GRP_BIT (4)
236#define MPU6050_I2C_SLV_LEN_BIT (0)
237#define MPU6050_I2C_SLV_LEN_MASK (7 << MPU6050_I2C_SLV_LEN_BIT)
238
239// Bit and length defines for I2C_SLV4 register:
240#define MPU6050_I2C_SLV4_RW_BIT (7)
241#define MPU6050_I2C_SLV4_ADDR_BIT (6)
242#define MPU6050_I2C_SLV4_ADDR_LENGTH (7)
243#define MPU6050_I2C_SLV4_EN_BIT (7)
244#define MPU6050_I2C_SLV4_INT_EN_BIT (6)
245#define MPU6050_I2C_SLV4_REG_DIS_BIT (5)
246#define MPU6050_I2C_SLV4_MST_DLY_BIT (4)
247#define MPU6050_I2C_SLV4_MST_DLY_LENGTH (5)
248
249// Bit and length defines for I2C_MST_STATUS register:
250#define MPU6050_MST_PASS_THROUGH_BIT (7)
251#define MPU6050_MST_I2C_SLV4_DONE_BIT (6)
252#define MPU6050_MST_I2C_LOST_ARB_BIT (5)
253#define MPU6050_MST_I2C_SLV4_NACK_BIT (4)
254#define MPU6050_MST_I2C_SLV3_NACK_BIT (3)
255#define MPU6050_MST_I2C_SLV2_NACK_BIT (2)
256#define MPU6050_MST_I2C_SLV1_NACK_BIT (1)
257#define MPU6050_MST_I2C_SLV0_NACK_BIT (0)
258
259// Bit and length defines for INT_PIN_CFG register:
260#define MPU6050_INTCFG_INT_LEVEL_BIT (7)
261#define MPU6050_INTCFG_INT_OPEN_BIT (6)
262#define MPU6050_INTCFG_LATCH_INT_EN_BIT (5)
263#define MPU6050_INTCFG_INT_RD_CLEAR_BIT (4)
264#define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT (3)
265#define MPU6050_INTCFG_FSYNC_INT_EN_BIT (2)
266#define MPU6050_INTCFG_I2C_BYPASS_EN_BIT (1)
267#define MPU6050_INTCFG_CLKOUT_EN_BIT (0)
268
269// Bit and length defines for INT_ENABLE and INT_STATUS registers:
270#define MPU6050_INTERRUPT_FF_BIT (7)
271#define MPU6050_INTERRUPT_MOT_BIT (6)
272#define MPU6050_INTERRUPT_ZMOT_BIT (5)
273#define MPU6050_INTERRUPT_FIFO_OFLOW_BIT (4)
274#define MPU6050_INTERRUPT_I2C_MST_INT_BIT (3)
275#define MPU6050_INTERRUPT_PLL_RDY_INT_BIT (2)
276#define MPU6050_INTERRUPT_DMP_INT_BIT (1)
277#define MPU6050_INTERRUPT_DATA_RDY_BIT (0)
278
279// Bit and length defines for MOT_DETECT_STATUS register:
280#define MPU6050_MOTION_MOT_XNEG_BIT (7)
281#define MPU6050_MOTION_MOT_XPOS_BIT (6)
282#define MPU6050_MOTION_MOT_YNEG_BIT (5)
283#define MPU6050_MOTION_MOT_YPOS_BIT (4)
284#define MPU6050_MOTION_MOT_ZNEG_BIT (3)
285#define MPU6050_MOTION_MOT_ZPOS_BIT (2)
286#define MPU6050_MOTION_MOT_ZRMOT_BIT (0)
287
288// Bit and length defines for I2C_MST_DELAY_CTRL register:
289#define MPU6050_DLYCTRL_DELAY_ES_SHADOW_BIT (7)
290#define MPU6050_DLYCTRL_I2C_SLV4_DLY_EN_BIT (4)
291#define MPU6050_DLYCTRL_I2C_SLV3_DLY_EN_BIT (3)
292#define MPU6050_DLYCTRL_I2C_SLV2_DLY_EN_BIT (2)
293#define MPU6050_DLYCTRL_I2C_SLV1_DLY_EN_BIT (1)
294#define MPU6050_DLYCTRL_I2C_SLV0_DLY_EN_BIT (0)
295
296// Bit and length defines for SIGNAL_PATH_RESET register:
297#define MPU6050_PATHRESET_GYRO_RESET_BIT (2)
298#define MPU6050_PATHRESET_ACCEL_RESET_BIT (1)
299#define MPU6050_PATHRESET_TEMP_RESET_BIT (0)
300
301// Bit and length defines for MOT_DETECT_CTRL register:
302#define MPU6050_DETECT_ACCEL_DELAY_BIT (4)
303#define MPU6050_DETECT_ACCEL_DELAY_MASK (3 << MPU6050_DETECT_ACCEL_DELAY_BIT)
304#define MPU6050_DETECT_FF_COUNT_BIT (2)
305#define MPU6050_DETECT_FF_COUNT_MASK (3 << MPU6050_DETECT_FF_COUNT_BIT)
306#define MPU6050_DETECT_MOT_COUNT_BIT (0)
307#define MPU6050_DETECT_MOT_COUNT_MASK (3 << MPU6050_DETECT_MOT_COUNT_BIT)
308
309// Bit and length defines for USER_CTRL register:
310#define MPU6050_USERCTRL_DMP_EN_BIT (7)
311#define MPU6050_USERCTRL_FIFO_EN_BIT (6)
312#define MPU6050_USERCTRL_I2C_MST_EN_BIT (5)
313#define MPU6050_USERCTRL_I2C_IF_DIS_BIT (4)
314#define MPU6050_USERCTRL_DMP_RESET_BIT (3)
315#define MPU6050_USERCTRL_FIFO_RESET_BIT (2)
316#define MPU6050_USERCTRL_I2C_MST_RESET_BIT (1)
317#define MPU6050_USERCTRL_SIG_COND_RESET_BIT (0)
318
319// Bit and length defines for PWR_MGMT_1 register:
320#define MPU6050_PWR1_DEVICE_RESET_BIT (7)
321#define MPU6050_PWR1_SLEEP_BIT (6)
322#define MPU6050_PWR1_CYCLE_BIT (5)
323#define MPU6050_PWR1_TEMP_DIS_BIT (3)
324#define MPU6050_PWR1_CLKSEL_BIT (0)
325#define MPU6050_PWR1_CLKSEL_MASK (7 << MPU6050_PWR1_CLKSEL_BIT)
326
327// Bit and length defines for PWR_MGMT_2 register:
328#define MPU6050_PWR2_LP_WAKE_CTRL_BIT (6)
329#define MPU6050_PWR2_LP_WAKE_CTRL_MASK (3 << MPU6050_PWR2_LP_WAKE_CTRL_BIT)
330#define MPU6050_PWR2_STBY_XA_BIT (5)
331#define MPU6050_PWR2_STBY_YA_BIT (4)
332#define MPU6050_PWR2_STBY_ZA_BIT (3)
333#define MPU6050_PWR2_STBY_XG_BIT (2)
334#define MPU6050_PWR2_STBY_YG_BIT (1)
335#define MPU6050_PWR2_STBY_ZG_BIT (0)
336
337// Bit and length defines for WHO_AM_I register:
338#define MPU6050_WHO_AM_I_BIT (1)
339#define MPU6050_WHO_AM_I_MASK (0x3f << MPU6050_WHO_AM_I_BIT)
340
341// Undocumented bits and lengths:
342#define MPU6050_TC_PWR_MODE_BIT (7)
343#define MPU6050_TC_OFFSET_BIT (6)
344#define MPU6050_TC_OFFSET_LENGTH (6)
345#define MPU6050_TC_OTP_BNK_VLD_BIT (0)
346#define MPU6050_DMPINT_5_BIT (5)
347#define MPU6050_DMPINT_4_BIT (4)
348#define MPU6050_DMPINT_3_BIT (3)
349#define MPU6050_DMPINT_2_BIT (2)
350#define MPU6050_DMPINT_1_BIT (1)
351#define MPU6050_DMPINT_0_BIT (0)
352
353#endif // __MPU6050_REGS_H__