Hardware Abstraction Layer for FreeRTOS
mpu9250.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2016
5  */
6 #ifndef MPU_9250_H_
7 #define MPU_9250_H_
8 #include <stdint.h>
9 #include <spi.h>
10 #include <vec.h>
11 #include <accel.h>
12 #include <gyro.h>
25 #define MPU_READ BIT(7)
26 
27 #ifdef CONFIG_MPU9250
28 # define MPU_SELF_TEST_X_GYRO 0x00
29 # define MPU_SELF_TEST_Y_GYRO 0x01
30 # define MPU_SELF_TEST_Z_GYRO 0x02
31 # define MPU_SELF_TEST_X_ACCEL 0x0D
32 # define MPU_SELF_TEST_Y_ACCEL 0x0E
33 # define MPU_SELF_TEST_Z_ACCEL 0x0F
34 # define MPU_XG_OFFSET_H 0x13
35 # define MPU_XG_OFFSET_L 0x14
36 # define MPU_YG_OFFSET_H 0x15
37 # define MPU_YG_OFFSET_L 0x16
38 # define MPU_ZG_OFFSET_H 0x17
39 # define MPU_ZG_OFFSET_L 0x18
40 # define MPU_SMPLRT_DIV 0x19
41 # define MPU_CONFIG 0x1A
42 # define MPU_CONFIG_DLPF_CFG(x) (((x) & 0x7) << 0)
43 # define MPU_CONFIG_EXT_SYNC_SET(x) (((x) & 0x7) << 3)
44 # define MPU_CONFIG_FIFO_MODE BIT(6)
45 # define MPU_GYRO_CONFIG 0x1B
46 # define MPU_GYRO_CONFIG_FCHOICE_B(x) (((x) & 0x3) << 0)
47 # define MPU_GYRO_CONFIG_GYRO_FS_SEL(x) (((x) & 0x3) << 3)
48 # define MPU_GYRO_CONFIG_ZGYRO_CT_EN BIT(5)
49 # define MPU_GYRO_CONFIG_YGYRO_CT_EN BIT(6)
50 # define MPU_GYRO_CONFIG_XGYRO_CT_EN BIT(7)
51 # define MPU_ACCEL_CONFIG 0x1C
52 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL(x) (((x) & 0x3) << 3)
53 # define MPU_ACCEL_CONFIG_AZ_ST_EN BIT(5)
54 # define MPU_ACCEL_CONFIG_AY_ST_EN BIT(6)
55 # define MPU_ACCEL_CONFIG_AX_ST_EN BIT(7)
56 # define MPU_ACCEL_CONFIG_2 0x1D
57 # define MPU_ACCEL_CONFIG_2_A_DLPF_CFG(x) (((x) & 0x3) << 0)
58 # define MPU_ACCEL_CONFIG_2_ACCEL_FCHOICE_B(x) (((x) & 0x3) << 2)
59 # define MPU_LP_ACCEL_ODR 0x1E
60 # define MPU_LP_ACCEL_ODR_LPOSC_CLKSEL (((x) & 0xF) << 0)
61 # define MPU_WOM_THR 0x1F
62 # define MPU_FIFO_EN 0x23
63 # define MPU_FIFO_EN_SLV0 BIT(0)
64 # define MPU_FIFO_EN_SLV1 BIT(1)
65 # define MPU_FIFO_EN_SLV2 BIT(2)
66 # define MPU_FIFO_EN_ACCEL BIT(3)
67 # define MPU_FIFO_EN_GYRO_ZOUT BIT(4)
68 # define MPU_FIFO_EN_GYRO_YOUT BIT(5)
69 # define MPU_FIFO_EN_GYRO_GYRO_XOUT BIT(6)
70 # define MPU_FIFO_EN_TEMP_FIFO_EN BIT(7)
71 # define MPU_I2C_MST_CTRL 0x24
72 # define MPU_I2C_MST_CTRL_I2C_MST_CLK(x) (((x) & 0xF) << 0)
73 # define MPU_I2C_MST_CTRL_I2C_MST_P_NSR(x) BIT(4)
74 # define MPU_I2C_MST_CTRL_SLV_3_FIFO_EN BIT(5)
75 # define MPU_I2C_MST_CTRL_WAIT_FOR_ES BIT(6)
76 # define MPU_I2C_MST_CTRL_MULT_MST_EN BIT(7)
77 # define MPU_I2C_SLV0_ADDR 0x25
78 # define MPU_I2C_SLV_ADDR_I2C_ID(x) (((x) & 0x7F) << 0)
79 # define MPU_I2C_SLV_ADDR_I2C_SLV0_RNW BIT(7)
80 # define MPU_I2C_SLV0_REG 0x38
81 # define MPU_I2C_SLV0_CTRL 0x27
82 # define MPU_I2C_SLV_CTRL_I2C_SLV_LENG(x) (((x) & 0xF) << 0)
83 # define MPU_I2C_SLV_CTRL_I2C_SLV_GRP BIT(4)
84 # define MPU_I2C_SLV_CTRL_I2C_SLV_REG_DIS BIT(5)
85 # define MPU_I2C_SLV_CTRL_I2C_SLV_BYTE_SW BIT(6)
86 # define MPU_I2C_SLV_CTRL_I2C_SLV_EN BIT(7)
87 # define MPU_I2C_SLV1_ADDR 0x28
88 # define MPU_I2C_SLV1_REG 0x29
89 # define MPU_I2C_SLV1_CTRL 0x2A
90 # define MPU_I2C_SLV2_ADDR 0x2B
91 # define MPU_I2C_SLV2_REG 0x2C
92 # define MPU_I2C_SLV2_CTRL 0x2D
93 # define MPU_I2C_SLV3_ADDR 0x2E
94 # define MPU_I2C_SLV3_REG 0x2F
95 # define MPU_I2C_SLV3_CTRL 0x30
96 # define MPU_I2C_SLV4_ADDR 0x31
97 # define MPU_I2C_SLV4_REG 0x32
98 # define MPU_I2C_SLV4_DO 0x33
99 # define MPU_I2C_SLV4_CTRL 0x34
100 # define MPU_I2C_SLV4_DI 0x35
101 # define MPU_I2C_MST_STATUS 0x36
102 # define MPU_I2C_MST_STATUS_I2C_SLV0_NACK BIT(0)
103 # define MPU_I2C_MST_STATUS_I2C_SLV1_NACK BIT(1)
104 # define MPU_I2C_MST_STATUS_I2C_SLV2_NACK BIT(2)
105 # define MPU_I2C_MST_STATUS_I2C_SLV3_NACK BIT(3)
106 # define MPU_I2C_MST_STATUS_I2C_SLV4_NACK BIT(4)
107 # define MPU_I2C_MST_STATUS_I2C_LOST_ARB BIT(5)
108 # define MPU_I2C_MST_STATUS_I2C_SLV4_DONE BIT(6)
109 # define MPU_I2C_MST_STATUS_PASS_THROUGH BIT(7)
110 # define MPU_INT_PIN_CFG 0x37
111 # define MPU_INT_PIN_CFG_BYPASS_EN BIT(1)
112 # define MPU_INT_PIN_CFG_FSYNC_INT_MODE_EN BIT(2)
113 # define MPU_INT_PIN_CFG_ACTL_FSYNC BIT(3)
114 # define MPU_INT_PIN_CFG_INT_ANYRD_2CLEAR BIT(4)
115 # define MPU_INT_PIN_CFG_LATCH_INT_EN BIT(5)
116 # define MPU_INT_PIN_CFG_OPEN BIT(6)
117 # define MPU_INT_PIN_CFG_ACTL BIT(7)
118 # define MPU_INT_ENABLE 0x38
119 # define MPU_INT_ENABLE_RAW_RDY_EN BIT(0)
120 # define MPU_INT_ENABLE_FSYNC_INT_EN BIT(3)
121 # define MPU_INT_ENABLE_FIFO_OFLOW_EN BIT(4)
122 # define MPU_INT_ENABLE_WOM_EN BIT(5)
123 # define MPU_INT_STATUS 0x3A
124 # define MPU_INT_STATUS_RAW_DATA_RDY_INT BIT(0)
125 # define MPU_INT_STATUS_FSYNC_INT BIT(3)
126 # define MPU_INT_STATUS_FIFO_OFLOW_INT BIT(4)
127 # define MPU_INT_STATUS_WOM_INT BIT(6)
128 # define MPU_ACCEL_XOUT_H 0x3B
129 # define MPU_ACCEL_XOUT_L 0x3C
130 # define MPU_ACCEL_YOUT_H 0x3D
131 # define MPU_ACCEL_YOUT_L 0x3E
132 # define MPU_ACCEL_ZOUT_H 0x3F
133 # define MPU_ACCEL_ZOUT_L 0x40
134 # define MPU_TEMP_OUT_H 0x41
135 # define MPU_TEMP_OUT_L 0x42
136 # define MPU_GYRO_XOUT_H 0x43
137 # define MPU_GYRO_XOUT_L 0x44
138 # define MPU_GYRO_YOUT_H 0x45
139 # define MPU_GYRO_YOUT_L 0x46
140 # define MPU_GYRO_ZOUT_H 0x47
141 # define MPU_GYRO_ZOUT_L 0x48
142 # define MPU_EXT_SENS_DATA(x) (0x49 + x)
143 # define MPU_I2C_SLV0_DO 0x63
144 # define MPU_I2C_SLV1_DO 0x64
145 # define MPU_I2C_SLV2_DO 0x65
146 # define MPU_I2C_SLV3_DO 0x66
147 # define MPU_I2C_MST_DELAY_CTRL 0x67
148 # define MPU_I2C_MST_DELAY_CTRL_I2C_SLV0_DLY_EN BIT(0)
149 # define MPU_I2C_MST_DELAY_CTRL_I2C_SLV1_DLY_EN BIT(1)
150 # define MPU_I2C_MST_DELAY_CTRL_I2C_SLV2_DLY_EN BIT(2)
151 # define MPU_I2C_MST_DELAY_CTRL_I2C_SLV3_DLY_EN BIT(3)
152 # define MPU_I2C_MST_DELAY_CTRL_I2C_SLV4_DLY_EN BIT(4)
153 # define MPU_I2C_MST_DELAY_CTRL_DELAY_ES_SHADOW BIT(5)
154 # define MPU_SIGNAL_PATH_RESET 0x68
155 # define MPU_SIGNAL_PATH_RESET_TEMP_RST BIT(0)
156 # define MPU_SIGNAL_PATH_RESET_ACCEL_RST BIT(1)
157 # define MPU_SIGNAL_PATH_RESET_GYRO_RST BIT(2)
158 # define MPU_MOT_DETECT_CTRL 0x69
159 # define MPU_MOT_DETECT_CTRL_ACCEL_INTEL_MODE BIT(6)
160 # define MPU_MOT_DETECT_CTRL_ACCEL_INTEL_EN BIT(7)
161 # define MPU_USER_CTRL 0x6A
162 # define MPU_USER_CTRL_SIG_COND_RST BIT(0)
163 # define MPU_USER_CTRL_I2C_MST_RST BIT(1)
164 # define MPU_USER_CTRL_FIFO_RST BIT(2)
165 # define MPU_USER_CTRL_I2C_IF_DIS BIT(4)
166 # define MPU_USER_CTRL_I2C_MST_EN BIT(5)
167 # define MPU_USER_CTRL_FIFO_EN BIT(6)
168 # define MPU_PWR_MGMT_1 0x6B
169 # define MPU_PWR_MGMT_1_CLKSEL(x) (((x) & 0x7) << 0)
170 # define MPU_PWR_MGMT_1_PD_PTAT BIT(3)
171 # define MPU_PWR_MGMT_1_GYRO_STANDBY BIT(4)
172 # define MPU_PWR_MGMT_1_CYCLE BIT(5)
173 # define MPU_PWR_MGMT_1_SLEEP BIT(6)
174 # define MPU_PWR_MGMT_1_H_RESET BIT(7)
175 # define MPU_PWR_MGMT_2 0x6C
176 # define MPU_PWR_MGMT_2_DIS_ZG BIT(0)
177 # define MPU_PWR_MGMT_2_DIS_YG BIT(1)
178 # define MPU_PWR_MGMT_2_DIS_XG BIT(2)
179 # define MPU_PWR_MGMT_2_DIS_ZA BIT(3)
180 # define MPU_PWR_MGMT_2_DIS_YA BIT(4)
181 # define MPU_PWR_MGMT_2_DIS_XA BIT(5)
182 # define MPU_FIFO_COUNTH 0x72
183 # define MPU_FIFO_COUNTL 0x73
184 # define MPU_FIFO_R_W 0x74
185 # define MPU_WHO_AM_I 0x75
186 # define MPU_WHO_AM_I_VAL 0x71
187 # define MPU_XA_OFFSET_H 0x77
188 # define MPU_XA_OFFSET_L 0x78
189 # define MPU_YA_OFFSET_H 0x7A
190 # define MPU_YA_OFFSET_L 0x7B
191 # define MPU_ZA_OFFSET_H 0x7D
192 # define MPU_ZA_OFFSET_L 0x7E
193 #else /* CONFIG_MPU9250 */
194 # define MPU_BANK1 (1 << 8)
195 # define MPU_BANK2 (2 << 8)
196 # define MPU_BANK3 (3 << 8)
197 # define MPU_BANK4 (4 << 8)
198 
199 # define MPU_REG_BANK_SEL 0x7F
200 # define MPU_REG_BANK_SEL_USER_BANK(x) (((x) & 0x3) << 4)
201 
202 # define MPU_WHO_AM_I (0x00 | MPU_BANK1)
203 # define MPU_WHO_AM_I_VAL 0xEA
204 # define MPU_USER_CTRL (0x03 | MPU_BANK1)
205 # define MPU_USER_CTRL_I2C_MST_RST BIT(1)
206 # define MPU_USER_CTRL_SRAM_RST BIT(2)
207 # define MPU_USER_CTRL_DMP_RST BIT(3)
208 # define MPU_USER_CTRL_I2C_IF_DIS BIT(4)
209 # define MPU_USER_CTRL_I2C_MST_EN BIT(5)
210 # define MPU_USER_CTRL_FIFO_EN BIT(6)
211 # define MPU_USER_CTRL_DMP_EN BIT(7)
212 # define MPU_LP_CONFIG (0x05 | MPU_BANK1)
213 # define MPU_PWR_MGMT_1 (0x06 | MPU_BANK1)
214 # define MPU_PWR_MGMT_1_CLKSEL(x) (((x) & 0x7) << 0)
215 # define MPU_PWR_MGMT_1_TEMP_DIS BIT(3)
216 # define MPU_PWR_MGMT_1_LP_EN BIT(5)
217 # define MPU_PWR_MGMT_1_SLEEP BIT(6)
218 # define MPU_PWR_MGMT_1_DEVICE_RESET BIT(7)
219 # define MPU_PWR_MGMT_2 (0x07 | MPU_BANK1)
220 # define MPU_INT_PIN_CFG (0x0F | MPU_BANK1)
221 # define MPU_INT_ENABLE (0x10 | MPU_BANK1)
222 # define MPU_INT_ENABLE_1 (0x11 | MPU_BANK1)
223 # define MPU_INT_ENABLE_2 (0x12 | MPU_BANK1)
224 # define MPU_INT_ENABLE_3 (0x13 | MPU_BANK1)
225 # define MPU_I2C_MST_STATUS (0x17 | MPU_BANK1)
226 # define MPU_INT_STATUS (0x19 | MPU_BANK1)
227 # define MPU_INT_STATUS_1 (0x1A | MPU_BANK1)
228 # define MPU_INT_STATUS_2 (0x1B | MPU_BANK1)
229 # define MPU_INT_STATUS_3 (0x1C | MPU_BANK1)
230 # define MPU_DELAY_TIMEH (0x28 | MPU_BANK1)
231 # define MPU_DELAY_TIMEL (0x29 | MPU_BANK1)
232 # define MPU_ACCEL_XOUT_H (0x2D | MPU_BANK1)
233 # define MPU_ACCEL_XOUT_L (0x2E | MPU_BANK1)
234 # define MPU_ACCEL_YOUT_H (0x2F | MPU_BANK1)
235 # define MPU_ACCEL_YOUT_L (0x30 | MPU_BANK1)
236 # define MPU_ACCEL_ZOUT_H (0x31 | MPU_BANK1)
237 # define MPU_ACCEL_ZOUT_L (0x32 | MPU_BANK1)
238 # define MPU_GYRO_XOUT_H (0x33 | MPU_BANK1)
239 # define MPU_GYRO_XOUT_L (0x34 | MPU_BANK1)
240 # define MPU_GYRO_YOUT_H (0x35 | MPU_BANK1)
241 # define MPU_GYRO_YOUT_L (0x36 | MPU_BANK1)
242 # define MPU_GYRO_ZOUT_H (0x37 | MPU_BANK1)
243 # define MPU_GYRO_ZOUT_L (0x38 | MPU_BANK1)
244 # define MPU_TEMP_OUT_H (0x39 | MPU_BANK1)
245 # define MPU_TEMP_OUT_L (0x3A | MPU_BANK1)
246 # define MPU_EXT_SLV_SENS_DATA_00 (0x3B | MPU_BANK1)
247 # define MPU_EXT_SLV_SENS_DATA_01 (0x3C | MPU_BANK1)
248 # define MPU_EXT_SLV_SENS_DATA_02 (0x3D | MPU_BANK1)
249 # define MPU_EXT_SLV_SENS_DATA_03 (0x3E | MPU_BANK1)
250 # define MPU_EXT_SLV_SENS_DATA_04 (0x3F | MPU_BANK1)
251 # define MPU_EXT_SLV_SENS_DATA_05 (0x40 | MPU_BANK1)
252 # define MPU_EXT_SLV_SENS_DATA_06 (0x41 | MPU_BANK1)
253 # define MPU_EXT_SLV_SENS_DATA_07 (0x42 | MPU_BANK1)
254 # define MPU_EXT_SLV_SENS_DATA_08 (0x43 | MPU_BANK1)
255 # define MPU_EXT_SLV_SENS_DATA_09 (0x44 | MPU_BANK1)
256 # define MPU_EXT_SLV_SENS_DATA_10 (0x45 | MPU_BANK1)
257 # define MPU_EXT_SLV_SENS_DATA_11 (0x46 | MPU_BANK1)
258 # define MPU_EXT_SLV_SENS_DATA_12 (0x47 | MPU_BANK1)
259 # define MPU_EXT_SLV_SENS_DATA_13 (0x48 | MPU_BANK1)
260 # define MPU_EXT_SLV_SENS_DATA_14 (0x49 | MPU_BANK1)
261 # define MPU_EXT_SLV_SENS_DATA_15 (0x4A | MPU_BANK1)
262 # define MPU_EXT_SLV_SENS_DATA_16 (0x4B | MPU_BANK1)
263 # define MPU_EXT_SLV_SENS_DATA_17 (0x4C | MPU_BANK1)
264 # define MPU_EXT_SLV_SENS_DATA_18 (0x4D | MPU_BANK1)
265 # define MPU_EXT_SLV_SENS_DATA_19 (0x4E | MPU_BANK1)
266 # define MPU_EXT_SLV_SENS_DATA_20 (0x4F | MPU_BANK1)
267 # define MPU_EXT_SLV_SENS_DATA_21 (0x50 | MPU_BANK1)
268 # define MPU_EXT_SLV_SENS_DATA_22 (0x51 | MPU_BANK1)
269 # define MPU_EXT_SLV_SENS_DATA_23 (0x52 | MPU_BANK1)
270 # define MPU_FIFO_EN_1 (0x66 | MPU_BANK1)
271 # define MPU_FIFO_EN_2 (0x67 | MPU_BANK1)
272 # define MPU_FIFO_EN_2_TEMP_FIFO_EN BIT(0)
273 # define MPU_FIFO_EN_2_GYRO_X_FIFO_EN BIT(1)
274 # define MPU_FIFO_EN_2_GYRO_Y_FIFO_EN BIT(2)
275 # define MPU_FIFO_EN_2_GYRO_Z_FIFO_EN BIT(3)
276 # define MPU_FIFO_EN_2_ACCEL_FIFO_EN BIT(4)
277 # define MPU_FIFO_RST (0x68 | MPU_BANK1)
278 # define MPU_FIFO_MODE (0x69 | MPU_BANK1)
279 # define MPU_FIFO_COUNTH (0x70 | MPU_BANK1)
280 # define MPU_FIFO_COUNTL (0x71 | MPU_BANK1)
281 # define MPU_FIFO_R_W (0x72 | MPU_BANK1)
282 # define MPU_DATA_RDY_STATUS (0x74 | MPU_BANK1)
283 # define MPU_FIFO_CFG (0x76 | MPU_BANK1)
284 
285 # define MPU_SELF_TEST_X_GYRO (0x02 | MPU_BANK2)
286 # define MPU_SELF_TEST_Y_GYRO (0x03 | MPU_BANK2)
287 # define MPU_SELF_TEST_Z_GYRO (0x04 | MPU_BANK2)
288 # define MPU_SELF_TEST_X_ACCEL (0x0E | MPU_BANK2)
289 # define MPU_SELF_TEST_Y_ACCEL (0x0F | MPU_BANK2)
290 # define MPU_SELF_TEST_Z_ACCEL (0x10 | MPU_BANK2)
291 # define MPU_XA_OFFS_H (0x14 | MPU_BANK2)
292 # define MPU_XA_OFFS_L (0x15 | MPU_BANK2)
293 # define MPU_YA_OFFS_H (0x17 | MPU_BANK2)
294 # define MPU_YA_OFFS_L (0x18 | MPU_BANK2)
295 # define MPU_ZA_OFFS_H (0x1A | MPU_BANK2)
296 # define MPU_ZA_OFFS_L (0x1B | MPU_BANK2)
297 # define MPU_TIMEBASE_CORRECTIO (0x28 | MPU_BANK2)
298 
299 # define MPU_GYRO_SMPLRT_DIV (0x00 | MPU_BANK3)
300 # define MPU_GYRO_CONFIG_1 (0x01 | MPU_BANK3)
301 # define MPU_GYRO_CONFIG_1_GYRO_FCHOICE BIT(0)
302 # define MPU_GYRO_CONFIG_1_GYRO_FS_SEL(x) (((x) & 0x3) << 1)
303 # define MPU_GYRO_CONFIG_1_GYRO_FS_SEL_250DPS MPU_GYRO_CONFIG_1_GYRO_FS_SEL(0)
304 # define MPU_GYRO_CONFIG_1_GYRO_FS_SEL_500DPS MPU_GYRO_CONFIG_1_GYRO_FS_SEL(1)
305 # define MPU_GYRO_CONFIG_1_GYRO_FS_SEL_1000DPS MPU_GYRO_CONFIG_1_GYRO_FS_SEL(2)
306 # define MPU_GYRO_CONFIG_1_GYRO_FS_SEL_2000DPS MPU_GYRO_CONFIG_1_GYRO_FS_SEL(3)
307 # define MPU_GYRO_CONFIG_1_GYRO_DLPFCFG(x) (((x) & 0x3) << 3)
308 # define MPU_GYRO_CONFIG_2 (0x02 | MPU_BANK3)
309 # define MPU_XG_OFFS_USRH (0x03 | MPU_BANK3)
310 # define MPU_XG_OFFS_USRL (0x04 | MPU_BANK3)
311 # define MPU_YG_OFFS_USRH (0x05 | MPU_BANK3)
312 # define MPU_YG_OFFS_USRL (0x06 | MPU_BANK3)
313 # define MPU_ZG_OFFS_USRH (0x07 | MPU_BANK3)
314 # define MPU_ZG_OFFS_USRL (0x08 | MPU_BANK3)
315 # define MPU_ODR_ALIGN_EN (0x09 | MPU_BANK3)
316 # define MPU_ACCEL_SMPLRT_DIV_1 (0x10 | MPU_BANK3)
317 # define MPU_ACCEL_SMPLRT_DIV_2 (0x11 | MPU_BANK3)
318 # define MPU_ACCEL_INTEL_CTRL (0x12 | MPU_BANK3)
319 # define MPU_ACCEL_WOM_THR (0x13 | MPU_BANK3)
320 # define MPU_ACCEL_CONFIG (0x14 | MPU_BANK3)
321 # define MPU_ACCEL_CONFIG_ACCEL_FCHOICE BIT(0)
322 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL(x) (((x) & 0x3) << 1)
323 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL_2G MPU_ACCEL_CONFIG_ACCEL_FS_SEL(0)
324 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL_4G MPU_ACCEL_CONFIG_ACCEL_FS_SEL(1)
325 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL_8G MPU_ACCEL_CONFIG_ACCEL_FS_SEL(2)
326 # define MPU_ACCEL_CONFIG_ACCEL_FS_SEL_16G MPU_ACCEL_CONFIG_ACCEL_FS_SEL(3)
327 # define MPU_ACCEL_CONFIG_ACCEL_DLPFCFG(x) (((x) & 0x3) << 3)
328 # define MPU_ACCEL_CONFIG_2 (0x15 | MPU_BANK3)
329 # define MPU_FSYNC_CONFIG (0x52 | MPU_BANK3)
330 # define MPU_TEMP_CONFIG (0x53 | MPU_BANK3)
331 # define MPU_MOD_CTRL_USR (0x54 | MPU_BANK3)
332 
333 # define MPU_I2C_MST_ODR_CONFIG (0x00 | MPU_BANK4)
334 # define MPU_I2C_MST_CTRL (0x01 | MPU_BANK4)
335 # define MPU_I2C_MST_DELAY_CTRL (0x02 | MPU_BANK4)
336 # define MPU_I2C_SLV0_ADDR (0x03 | MPU_BANK4)
337 # define MPU_I2C_SLV0_REG (0x04 | MPU_BANK4)
338 # define MPU_I2C_SLV0_CTRL (0x05 | MPU_BANK4)
339 # define MPU_I2C_SLV0_DO (0x06 | MPU_BANK4)
340 # define MPU_I2C_SLV1_ADDR (0x07 | MPU_BANK4)
341 # define MPU_I2C_SLV1_REG (0x08 | MPU_BANK4)
342 # define MPU_I2C_SLV1_CTRL (0x09 | MPU_BANK4)
343 # define MPU_I2C_SLV1_DO (0x0A | MPU_BANK4)
344 # define MPU_I2C_SLV2_ADDR (0x0B | MPU_BANK4)
345 # define MPU_I2C_SLV2_REG (0x0C | MPU_BANK4)
346 # define MPU_I2C_SLV2_CTRL (0x0D | MPU_BANK4)
347 # define MPU_I2C_SLV2_DO (0x0E | MPU_BANK4)
348 # define MPU_I2C_SLV3_ADDR (0x0F | MPU_BANK4)
349 # define MPU_I2C_SLV3_REG (0x10 | MPU_BANK4)
350 # define MPU_I2C_SLV3_CTRL (0x11 | MPU_BANK4)
351 # define MPU_I2C_SLV3_DO (0x12 | MPU_BANK4)
352 # define MPU_I2C_SLV4_ADDR (0x13 | MPU_BANK4)
353 # define MPU_I2C_SLV4_REG (0x14 | MPU_BANK4)
354 # define MPU_I2C_SLV4_CTRL (0x15 | MPU_BANK4)
355 # define MPU_I2C_SLV4_DO (0x16 | MPU_BANK4)
356 # define MPU_I2C_SLV4_DI (0x17 | MPU_BANK4)
357 #endif
358 
362 #define MPU_GRAVITY 16384
363 
367 struct mpu9250;
375  struct accel_generic gen;
379  struct mpu9250 *mpu;
383  struct vector accelBasis;
384 };
388 struct mpu9250_gyro {
392  struct gyro_generic gen;
396  struct mpu9250 *mpu;
400  struct vector gyroBasis;
401 };
402 
406 struct mpu9250 {
407  struct hal gen;
411  const struct spi_opt opt;
415  const uint32_t spi;
416 
420  uint32_t index;
424  struct spi_slave *slave;
436  uint32_t bank;
437 };
445  float x;
449  float y;
453  float z;
454 };
464 struct mpu9250 *mpu9250_init(uint32_t index, struct spi *spi, uint8_t cs, uint16_t gpio, TickType_t waittime);
470 int32_t mpu9250_deinit(struct mpu9250 *mpu);
477 int32_t mpu9250_reset(struct mpu9250 *mpu, TickType_t waittime);
485 int32_t mpu9250_getAccel(struct mpu9250 *mpu, struct mpu9250_vector *vec, TickType_t waittime);
493 int32_t mpu9250_getGyro(struct mpu9250 *mpu, struct mpu9250_vector *vec, TickType_t waittime);
495 #define ACCEL_PRV
496 #include <accel_prv.h>
497 #define GYRO_PRV
498 #include <gyro_prv.h>
499 extern const struct gyro_ops mpu9250_gyro_ops;
500 extern const struct accel_ops mpu9250_accel_ops;
508 #define MPU9250_ADDDEV(id) \
509  struct mpu9250 mpu9250_##id; \
510  struct mpu9250_accel mpu9250_accel_##id = { \
511  ACCEL_INIT_DEV(mpu9250) \
512  HAL_NAME("MPU9250 " #id " Accelerator") \
513  .mpu = &mpu9250_##id, \
514  .accelBasis = {0, 0, 0}, \
515  };\
516  struct mpu9250_gyro mpu9250_gyro_##id = { \
517  GYRO_INIT_DEV(mpu9250) \
518  HAL_NAME("MPU9250 " #id " Gyro") \
519  .mpu = &mpu9250_##id, \
520  .gyroBasis = {0, 0, 0}, \
521  };\
522  struct mpu9250 mpu9250_##id = { \
523  HAL_NAME("MPU9250 " #id) \
524  .gen.init = false, \
525  .slave = NULL, \
526  .accel = &mpu9250_accel_##id, \
527  .gyro = &mpu9250_gyro_##id, \
528  .bank = 0, \
529  }; \
530  ACCEL_ADDDEV(mpu9250, mpu9250_accel_##id); \
531  GYRO_ADDDEV(mpu9250, mpu9250_gyro_##id); \
532  HAL_ADD(mpu9250, mpu9250_##id)
533 
536 #define MPU9250_ID(id) HAL_GET_ID(hal, mpu9250, mpu9250_##id)
537 
538 #endif
mpu9250_accel::accelBasis
struct vector accelBasis
Definition: mpu9250.h:383
mpu9250::accel
struct mpu9250_accel * accel
Definition: mpu9250.h:428
mpu9250_reset
int32_t mpu9250_reset(struct mpu9250 *mpu, TickType_t waittime)
spi.h
gyro_prv.h
mpu9250_gyro::mpu
struct mpu9250 * mpu
Definition: mpu9250.h:396
mpu9250_vector::x
float x
Definition: mpu9250.h:445
mpu9250_getGyro
int32_t mpu9250_getGyro(struct mpu9250 *mpu, struct mpu9250_vector *vec, TickType_t waittime)
mpu9250_vector
Definition: mpu9250.h:441
hal
Definition: hal.h:48
mpu9250::gen
struct hal gen
Definition: mpu9250.h:407
mpu9250_gyro::gyroBasis
struct vector gyroBasis
Definition: mpu9250.h:400
mpu9250::slave
struct spi_slave * slave
Definition: mpu9250.h:424
mpu9250_gyro
Definition: mpu9250.h:388
accel_generic
Definition: accel.h:44
mpu9250_accel
Definition: mpu9250.h:371
vector
Definition: vec.h:12
mpu9250::opt
const struct spi_opt opt
Definition: mpu9250.h:411
mpu9250::gyro
struct mpu9250_gyro * gyro
Definition: mpu9250.h:432
mpu9250
Definition: mpu9250.h:406
mpu9250_deinit
int32_t mpu9250_deinit(struct mpu9250 *mpu)
mpu9250_vector::z
float z
Definition: mpu9250.h:453
mpu9250_accel::gen
struct accel_generic gen
Definition: mpu9250.h:375
spi_opt
Definition: spi.h:39
mpu9250::index
uint32_t index
Definition: mpu9250.h:420
mpu9250::spi
const uint32_t spi
Definition: mpu9250.h:415
mpu9250_accel::mpu
struct mpu9250 * mpu
Definition: mpu9250.h:379
mpu9250::bank
uint32_t bank
Definition: mpu9250.h:436
accel.h
mpu9250_gyro::gen
struct gyro_generic gen
Definition: mpu9250.h:392
mpu9250_getAccel
int32_t mpu9250_getAccel(struct mpu9250 *mpu, struct mpu9250_vector *vec, TickType_t waittime)
vec.h
gyro_generic
Definition: gyro.h:44
mpu9250_vector::y
float y
Definition: mpu9250.h:449
mpu9250_init
struct mpu9250 * mpu9250_init(uint32_t index, struct spi *spi, uint8_t cs, uint16_t gpio, TickType_t waittime)
gyro.h
accel_prv.h