LibDriver MPU6050
Loading...
Searching...
No Matches
driver_mpu6050_fifo_test.c
Go to the documentation of this file.
1
36
38
39static mpu6050_handle_t gs_handle;
40static int16_t gs_accel_raw[80][3];
41static float gs_accel_g[80][3];
42static int16_t gs_gyro_raw[80][3];
43static float gs_gyro_dps[80][3];
44static uint16_t gs_len;
45
54{
55 if (mpu6050_irq_handler(&gs_handle) != 0)
56 {
57 return 1;
58 }
59 else
60 {
61 return 0;
62 }
63}
64
74uint8_t mpu6050_fifo_test(mpu6050_address_t addr, uint32_t times)
75{
76 uint8_t res;
77 uint32_t i;
78 mpu6050_info_t info;
79
80 /* link interface function */
89
90 /* get information */
91 res = mpu6050_info(&info);
92 if (res != 0)
93 {
94 mpu6050_interface_debug_print("mpu6050: get info failed.\n");
95
96 return 1;
97 }
98 else
99 {
100 /* print chip info */
101 mpu6050_interface_debug_print("mpu6050: chip is %s.\n", info.chip_name);
102 mpu6050_interface_debug_print("mpu6050: manufacturer is %s.\n", info.manufacturer_name);
103 mpu6050_interface_debug_print("mpu6050: interface is %s.\n", info.interface);
104 mpu6050_interface_debug_print("mpu6050: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
105 mpu6050_interface_debug_print("mpu6050: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
106 mpu6050_interface_debug_print("mpu6050: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
107 mpu6050_interface_debug_print("mpu6050: max current is %0.2fmA.\n", info.max_current_ma);
108 mpu6050_interface_debug_print("mpu6050: max temperature is %0.1fC.\n", info.temperature_max);
109 mpu6050_interface_debug_print("mpu6050: min temperature is %0.1fC.\n", info.temperature_min);
110 }
111
112 /* start fifo test */
113 mpu6050_interface_debug_print("mpu6050: start fifo test.\n");
114
115 /* set the addr pin */
116 res = mpu6050_set_addr_pin(&gs_handle, addr);
117 if (res != 0)
118 {
119 mpu6050_interface_debug_print("mpu6050: set addr pin failed.\n");
120
121 return 1;
122 }
123
124 /* init */
125 res = mpu6050_init(&gs_handle);
126 if (res != 0)
127 {
128 mpu6050_interface_debug_print("mpu6050: init failed.\n");
129
130 return 1;
131 }
132
133 /* delay 100 ms */
135
136 /* disable sleep */
137 res = mpu6050_set_sleep(&gs_handle, MPU6050_BOOL_FALSE);
138 if (res != 0)
139 {
140 mpu6050_interface_debug_print("mpu6050: set sleep failed.\n");
141 (void)mpu6050_deinit(&gs_handle);
142
143 return 1;
144 }
145
146 /* set pll x */
148 if (res != 0)
149 {
150 mpu6050_interface_debug_print("mpu6050: set clock source failed.\n");
151 (void)mpu6050_deinit(&gs_handle);
152
153 return 1;
154 }
155
156 /* set 50Hz */
157 res = mpu6050_set_sample_rate_divider(&gs_handle, (1000 / 50) - 1);
158 if (res != 0)
159 {
160 mpu6050_interface_debug_print("mpu6050: set sample rate divider failed.\n");
161 (void)mpu6050_deinit(&gs_handle);
162
163 return 1;
164 }
165
166 /* ±2g */
168 if (res != 0)
169 {
170 mpu6050_interface_debug_print("mpu6050: set accelerometer range failed.\n");
171 (void)mpu6050_deinit(&gs_handle);
172
173 return 1;
174 }
175
176 /* ±2000dps */
178 if (res != 0)
179 {
180 mpu6050_interface_debug_print("mpu6050: set gyroscope range failed.\n");
181 (void)mpu6050_deinit(&gs_handle);
182
183 return 1;
184 }
185
186 /* set low pass filter 3 */
188 if (res != 0)
189 {
190 mpu6050_interface_debug_print("mpu6050: set low pass filter failed.\n");
191 (void)mpu6050_deinit(&gs_handle);
192
193 return 1;
194 }
195
196 /* enable temperature sensor */
198 if (res != 0)
199 {
200 mpu6050_interface_debug_print("mpu6050: set temperature sensor failed.\n");
201 (void)mpu6050_deinit(&gs_handle);
202
203 return 1;
204 }
205
206 /* disable cycle wake up */
208 if (res != 0)
209 {
210 mpu6050_interface_debug_print("mpu6050: set cycle wake up failed.\n");
211 (void)mpu6050_deinit(&gs_handle);
212
213 return 1;
214 }
215
216 /* set wake up frequency 1.25Hz */
218 if (res != 0)
219 {
220 mpu6050_interface_debug_print("mpu6050: set wake up frequency failed.\n");
221 (void)mpu6050_deinit(&gs_handle);
222
223 return 1;
224 }
225
226 /* enable acc x */
228 if (res != 0)
229 {
230 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
231 (void)mpu6050_deinit(&gs_handle);
232
233 return 1;
234 }
235
236 /* enable acc y */
238 if (res != 0)
239 {
240 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
241 (void)mpu6050_deinit(&gs_handle);
242
243 return 1;
244 }
245
246 /* enable acc z */
248 if (res != 0)
249 {
250 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
251 (void)mpu6050_deinit(&gs_handle);
252
253 return 1;
254 }
255
256 /* enable gyro x */
258 if (res != 0)
259 {
260 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
261 (void)mpu6050_deinit(&gs_handle);
262
263 return 1;
264 }
265
266 /* enable gyro y */
268 if (res != 0)
269 {
270 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
271 (void)mpu6050_deinit(&gs_handle);
272
273 return 1;
274 }
275
276 /* enable gyro z */
278 if (res != 0)
279 {
280 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
281 (void)mpu6050_deinit(&gs_handle);
282
283 return 1;
284 }
285
286 /* disable gyroscope x test */
288 if (res != 0)
289 {
290 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
291 (void)mpu6050_deinit(&gs_handle);
292
293 return 1;
294 }
295
296 /* disable gyroscope y test */
298 if (res != 0)
299 {
300 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
301 (void)mpu6050_deinit(&gs_handle);
302
303 return 1;
304 }
305
306 /* disable gyroscope z test */
308 if (res != 0)
309 {
310 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
311 (void)mpu6050_deinit(&gs_handle);
312
313 return 1;
314 }
315
316 /* disable accelerometer x test */
318 if (res != 0)
319 {
320 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
321 (void)mpu6050_deinit(&gs_handle);
322
323 return 1;
324 }
325
326 /* disable accelerometer y test */
328 if (res != 0)
329 {
330 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
331 (void)mpu6050_deinit(&gs_handle);
332
333 return 1;
334 }
335
336 /* disable accelerometer z test */
338 if (res != 0)
339 {
340 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
341 (void)mpu6050_deinit(&gs_handle);
342
343 return 1;
344 }
345
346 /* disable temp fifo */
348 if (res != 0)
349 {
350 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
351 (void)mpu6050_deinit(&gs_handle);
352
353 return 1;
354 }
355
356 /* enable xg fifo */
358 if (res != 0)
359 {
360 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
361 (void)mpu6050_deinit(&gs_handle);
362
363 return 1;
364 }
365
366 /* enable yg fifo */
368 if (res != 0)
369 {
370 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
371 (void)mpu6050_deinit(&gs_handle);
372
373 return 1;
374 }
375
376 /* enable zg fifo */
378 if (res != 0)
379 {
380 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
381 (void)mpu6050_deinit(&gs_handle);
382
383 return 1;
384 }
385
386 /* enable accel fifo */
388 if (res != 0)
389 {
390 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
391 (void)mpu6050_deinit(&gs_handle);
392
393 return 1;
394 }
395
396 /* enable fifo */
397 res = mpu6050_set_fifo(&gs_handle, MPU6050_BOOL_TRUE);
398 if (res != 0)
399 {
400 mpu6050_interface_debug_print("mpu6050: set fifo failed.\n");
401 (void)mpu6050_deinit(&gs_handle);
402
403 return 1;
404 }
405
406 /* set interrupt level low */
408 if (res != 0)
409 {
410 mpu6050_interface_debug_print("mpu6050: set interrupt level failed.\n");
411 (void)mpu6050_deinit(&gs_handle);
412
413 return 1;
414 }
415
416 /* push pull */
418 if (res != 0)
419 {
420 mpu6050_interface_debug_print("mpu6050: set interrupt pin type failed.\n");
421 (void)mpu6050_deinit(&gs_handle);
422
423 return 1;
424 }
425
426 /* disable motion */
428 if (res != 0)
429 {
430 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
431 (void)mpu6050_deinit(&gs_handle);
432
433 return 1;
434 }
435
436 /* enable fifo overflow */
438 if (res != 0)
439 {
440 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
441 (void)mpu6050_deinit(&gs_handle);
442
443 return 1;
444 }
445
446 /* disable dmp interrupt */
448 if (res != 0)
449 {
450 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
451 (void)mpu6050_deinit(&gs_handle);
452
453 return 1;
454 }
455
456 /* disable i2c master */
458 if (res != 0)
459 {
460 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
461 (void)mpu6050_deinit(&gs_handle);
462
463 return 1;
464 }
465
466 /* disable data ready */
468 if (res != 0)
469 {
470 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
471 (void)mpu6050_deinit(&gs_handle);
472
473 return 1;
474 }
475
476 /* enable latch */
478 if (res != 0)
479 {
480 mpu6050_interface_debug_print("mpu6050: set interrupt latch failed.\n");
481 (void)mpu6050_deinit(&gs_handle);
482
483 return 1;
484 }
485
486 /* enable interrupt read clear */
488 if (res != 0)
489 {
490 mpu6050_interface_debug_print("mpu6050: set interrupt read clear failed.\n");
491 (void)mpu6050_deinit(&gs_handle);
492
493 return 1;
494 }
495
496 /* disable sync input */
498 if (res != 0)
499 {
500 mpu6050_interface_debug_print("mpu6050: set extern sync failed.\n");
501 (void)mpu6050_deinit(&gs_handle);
502
503 return 1;
504 }
505
506 /* disable fsync interrupt */
508 if (res != 0)
509 {
510 mpu6050_interface_debug_print("mpu6050: set fsync interrupt failed.\n");
511 (void)mpu6050_deinit(&gs_handle);
512
513 return 1;
514 }
515
516 /* fsync interrupt level low */
518 if (res != 0)
519 {
520 mpu6050_interface_debug_print("mpu6050: set fsync interrupt level failed.\n");
521 (void)mpu6050_deinit(&gs_handle);
522
523 return 1;
524 }
525
526 /* disable iic master */
528 if (res != 0)
529 {
530 mpu6050_interface_debug_print("mpu6050: set iic master failed.\n");
531 (void)mpu6050_deinit(&gs_handle);
532
533 return 1;
534 }
535
536 /* disable iic bypass */
538 if (res != 0)
539 {
540 mpu6050_interface_debug_print("mpu6050: set iic bypass failed.\n");
541 (void)mpu6050_deinit(&gs_handle);
542
543 return 1;
544 }
545
546 /* force fifo reset */
547 res = mpu6050_force_fifo_reset(&gs_handle);
548 if (res != 0)
549 {
550 mpu6050_interface_debug_print("mpu6050: force fifo reset failed.\n");
551 (void)mpu6050_deinit(&gs_handle);
552
553 return 1;
554 }
555
556 /* delay 1000 ms */
558
559 for (i = 0; i < times; i++)
560 {
561 /* read data */
562 gs_len = 80;
563 res = mpu6050_read(&gs_handle, gs_accel_raw, gs_accel_g, gs_gyro_raw, gs_gyro_dps, &gs_len);
564 if (res != 0)
565 {
566 mpu6050_interface_debug_print("mpu6050: read failed.\n");
567 (void)mpu6050_deinit(&gs_handle);
568
569 return 1;
570 }
571
572 /* output data */
573 mpu6050_interface_debug_print("mpu6050: fifo %d.\n", gs_len);
574 mpu6050_interface_debug_print("mpu6050: acc x[0] is %0.2fg.\n", gs_accel_g[0][0]);
575 mpu6050_interface_debug_print("mpu6050: acc y[0] is %0.2fg.\n", gs_accel_g[0][1]);
576 mpu6050_interface_debug_print("mpu6050: acc z[0] is %0.2fg.\n", gs_accel_g[0][2]);
577 mpu6050_interface_debug_print("mpu6050: gyro x[0] is %0.2fdps.\n", gs_gyro_dps[0][0]);
578 mpu6050_interface_debug_print("mpu6050: gyro y[0] is %0.2fdps.\n", gs_gyro_dps[0][1]);
579 mpu6050_interface_debug_print("mpu6050: gyro z[0] is %0.2fdps.\n", gs_gyro_dps[0][2]);
580
581 /* delay 1000 ms */
583
584 }
585
586 /* finish fifo test */
587 mpu6050_interface_debug_print("mpu6050: finish fifo test.\n");
588 (void)mpu6050_deinit(&gs_handle);
589
590 return 0;
591}
driver mpu6050 fifo test header file
struct mpu6050_info_s mpu6050_info_t
mpu6050 information structure definition
uint8_t mpu6050_set_wake_up_frequency(mpu6050_handle_t *handle, mpu6050_wake_up_frequency_t frequency)
set the wake up frequency
uint8_t mpu6050_init(mpu6050_handle_t *handle)
initialize the chip
uint8_t mpu6050_set_accelerometer_range(mpu6050_handle_t *handle, mpu6050_accelerometer_range_t range)
set the accelerometer range
mpu6050_address_t
mpu6050 address enumeration definition
uint8_t mpu6050_set_standby_mode(mpu6050_handle_t *handle, mpu6050_source_t source, mpu6050_bool_t enable)
set source into standby mode
uint8_t mpu6050_set_sample_rate_divider(mpu6050_handle_t *handle, uint8_t d)
set the sample rate divider
uint8_t mpu6050_set_gyroscope_range(mpu6050_handle_t *handle, mpu6050_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu6050_set_addr_pin(mpu6050_handle_t *handle, mpu6050_address_t addr_pin)
set the chip address pin
uint8_t mpu6050_set_interrupt_read_clear(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu6050_read(mpu6050_handle_t *handle, int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], uint16_t *len)
read the data
uint8_t mpu6050_set_fifo_enable(mpu6050_handle_t *handle, mpu6050_fifo_t fifo, mpu6050_bool_t enable)
enable or disable the fifo function
uint8_t mpu6050_set_interrupt(mpu6050_handle_t *handle, mpu6050_interrupt_t type, mpu6050_bool_t enable)
enable or disable the interrupt
uint8_t mpu6050_set_iic_bypass(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6050_info(mpu6050_info_t *info)
get the chip's information
uint8_t mpu6050_set_gyroscope_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the gyroscope test
uint8_t mpu6050_set_cycle_wake_up(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu6050_set_interrupt_pin_type(mpu6050_handle_t *handle, mpu6050_pin_type_t type)
set the interrupt pin type
uint8_t mpu6050_irq_handler(mpu6050_handle_t *handle)
irq handler
uint8_t mpu6050_set_iic_master(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the iic master mode
uint8_t mpu6050_force_fifo_reset(mpu6050_handle_t *handle)
force reset the fifo
uint8_t mpu6050_set_temperature_sensor(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu6050_set_interrupt_latch(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6050_set_accelerometer_test(mpu6050_handle_t *handle, mpu6050_axis_t axis, mpu6050_bool_t enable)
set the accelerometer test
uint8_t mpu6050_set_extern_sync(mpu6050_handle_t *handle, mpu6050_extern_sync_t sync)
set the extern sync type
uint8_t mpu6050_set_sleep(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the sleep mode
struct mpu6050_handle_s mpu6050_handle_t
mpu6050 handle structure definition
uint8_t mpu6050_set_fifo(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable fifo
uint8_t mpu6050_set_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the interrupt level
uint8_t mpu6050_set_clock_source(mpu6050_handle_t *handle, mpu6050_clock_source_t clock_source)
set the chip clock source
uint8_t mpu6050_set_fsync_interrupt(mpu6050_handle_t *handle, mpu6050_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6050_set_low_pass_filter(mpu6050_handle_t *handle, mpu6050_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu6050_deinit(mpu6050_handle_t *handle)
close the chip
uint8_t mpu6050_set_fsync_interrupt_level(mpu6050_handle_t *handle, mpu6050_pin_level_t level)
set the fsync interrupt level
@ MPU6050_PIN_TYPE_PUSH_PULL
@ MPU6050_WAKE_UP_FREQUENCY_1P25_HZ
@ MPU6050_GYROSCOPE_RANGE_2000DPS
@ MPU6050_EXTERN_SYNC_INPUT_DISABLED
@ MPU6050_SOURCE_ACC_Y
@ MPU6050_SOURCE_GYRO_Y
@ MPU6050_SOURCE_ACC_Z
@ MPU6050_SOURCE_ACC_X
@ MPU6050_SOURCE_GYRO_Z
@ MPU6050_SOURCE_GYRO_X
@ MPU6050_FIFO_XG
@ MPU6050_FIFO_ACCEL
@ MPU6050_FIFO_TEMP
@ MPU6050_FIFO_ZG
@ MPU6050_FIFO_YG
@ MPU6050_CLOCK_SOURCE_PLL_X_GYRO
@ MPU6050_PIN_LEVEL_LOW
@ MPU6050_INTERRUPT_DMP
@ MPU6050_INTERRUPT_I2C_MAST
@ MPU6050_INTERRUPT_DATA_READY
@ MPU6050_INTERRUPT_FIFO_OVERFLOW
@ MPU6050_INTERRUPT_MOTION
@ MPU6050_ACCELEROMETER_RANGE_2G
@ MPU6050_BOOL_TRUE
@ MPU6050_BOOL_FALSE
@ MPU6050_LOW_PASS_FILTER_3
@ MPU6050_AXIS_X
@ MPU6050_AXIS_Z
@ MPU6050_AXIS_Y
uint8_t mpu6050_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu6050_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void mpu6050_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu6050_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu6050_interface_iic_init(void)
interface iic bus init
void mpu6050_interface_receive_callback(uint8_t type)
interface receive callback
void mpu6050_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mpu6050_fifo_test_irq_handler(void)
fifo test irq
uint8_t mpu6050_fifo_test(mpu6050_address_t addr, uint32_t times)
fifo test
uint32_t driver_version
char manufacturer_name[32]