LibDriver MPU6500
Loading...
Searching...
No Matches
driver_mpu6500_dmp.c
Go to the documentation of this file.
1
36
37#include "driver_mpu6500_dmp.h"
38
39static mpu6500_handle_t gs_handle;
40
49{
50 if (mpu6500_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54
55 return 0;
56}
57
71 void (*receive_callback)(uint8_t type),
72 void (*tap_callback)(uint8_t count, uint8_t direction),
73 void (*orient_callback)(uint8_t orientation)
74 )
75{
76 uint8_t res;
77 uint8_t reg;
78 int32_t gyro_offset_raw[3];
79 int32_t accel_offset_raw[3];
80 int32_t gyro_offset[3];
81 int32_t accel_offset[3];
82 int8_t gyro_orientation[9] = {1, 0, 0,
83 0, 1, 0,
84 0, 0, 1};
85
86 /* link interface function */
98 DRIVER_MPU6500_LINK_RECEIVE_CALLBACK(&gs_handle, receive_callback);
99
100 /* set the interface */
101 res = mpu6500_set_interface(&gs_handle, interface);
102 if (res != 0)
103 {
104 mpu6500_interface_debug_print("mpu6500: set interface failed.\n");
105
106 return 1;
107 }
108
109 /* set the addr pin */
110 res = mpu6500_set_addr_pin(&gs_handle, addr_pin);
111 if (res != 0)
112 {
113 mpu6500_interface_debug_print("mpu6500: set addr pin failed.\n");
114
115 return 1;
116 }
117
118 /* init */
119 res = mpu6500_init(&gs_handle);
120 if (res != 0)
121 {
122 mpu6500_interface_debug_print("mpu6500: init failed.\n");
123
124 return 1;
125 }
126
127 /* delay 100 ms */
129
130 /* disable sleep */
131 res = mpu6500_set_sleep(&gs_handle, MPU6500_BOOL_FALSE);
132 if (res != 0)
133 {
134 mpu6500_interface_debug_print("mpu6500: set sleep failed.\n");
135 (void)mpu6500_deinit(&gs_handle);
136
137 return 1;
138 }
139
140 /* set fifo 1024kb */
141 res = mpu6500_set_fifo_1024kb(&gs_handle);
142 if (res != 0)
143 {
144 mpu6500_interface_debug_print("mpu6500: set fifo 1024kb failed.\n");
145 (void)mpu6500_deinit(&gs_handle);
146
147 return 1;
148 }
149
150 /* run the self test */
151 res = mpu6500_self_test(&gs_handle, gyro_offset_raw, accel_offset_raw);
152 if (res != 0)
153 {
154 mpu6500_interface_debug_print("mpu6500: self test failed.\n");
155 (void)mpu6500_deinit(&gs_handle);
156
157 return 1;
158 }
159
160
161 /* if spi interface, disable iic interface */
162 if (interface == MPU6500_INTERFACE_SPI)
163 {
164 /* disable iic */
166 if (res != 0)
167 {
168 mpu6500_interface_debug_print("mpu6500: set disable iic slave failed.\n");
169 (void)mpu6500_deinit(&gs_handle);
170
171 return 1;
172 }
173 }
174
175 /* set fifo 1024kb */
176 res = mpu6500_set_fifo_1024kb(&gs_handle);
177 if (res != 0)
178 {
179 mpu6500_interface_debug_print("mpu6500: set fifo 1024kb failed.\n");
180 (void)mpu6500_deinit(&gs_handle);
181
182 return 1;
183 }
184
185 /* set the default clock source */
187 if (res != 0)
188 {
189 mpu6500_interface_debug_print("mpu6500: set clock source failed.\n");
190 (void)mpu6500_deinit(&gs_handle);
191
192 return 1;
193 }
194
195 /* set the default rate */
196 res = mpu6500_set_sample_rate_divider(&gs_handle, (1000 / MPU6500_DMP_DEFAULT_RATE) - 1);
197 if (res != 0)
198 {
199 mpu6500_interface_debug_print("mpu6500: set sample rate divider failed.\n");
200 (void)mpu6500_deinit(&gs_handle);
201
202 return 1;
203 }
204
205 /* set the default accelerometer range */
207 if (res != 0)
208 {
209 mpu6500_interface_debug_print("mpu6500: set accelerometer range failed.\n");
210 (void)mpu6500_deinit(&gs_handle);
211
212 return 1;
213 }
214
215 /* set the default gyroscope_range */
217 if (res != 0)
218 {
219 mpu6500_interface_debug_print("mpu6500: set gyroscope range failed.\n");
220 (void)mpu6500_deinit(&gs_handle);
221
222 return 1;
223 }
224
225 /* set the default low pass filter */
227 if (res != 0)
228 {
229 mpu6500_interface_debug_print("mpu6500: set low pass filter failed.\n");
230 (void)mpu6500_deinit(&gs_handle);
231
232 return 1;
233 }
234
235 /* enable temperature sensor */
236 res = mpu6500_set_ptat(&gs_handle, MPU6500_BOOL_TRUE);
237 if (res != 0)
238 {
239 mpu6500_interface_debug_print("mpu6500: set ptat failed.\n");
240 (void)mpu6500_deinit(&gs_handle);
241
242 return 1;
243 }
244
245 /* set the default cycle wake up */
247 if (res != 0)
248 {
249 mpu6500_interface_debug_print("mpu6500: set cycle wake up failed.\n");
250 (void)mpu6500_deinit(&gs_handle);
251
252 return 1;
253 }
254
255 /* enable acc x */
257 if (res != 0)
258 {
259 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
260 (void)mpu6500_deinit(&gs_handle);
261
262 return 1;
263 }
264
265 /* enable acc y */
267 if (res != 0)
268 {
269 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
270 (void)mpu6500_deinit(&gs_handle);
271
272 return 1;
273 }
274
275 /* enable acc z */
277 if (res != 0)
278 {
279 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
280 (void)mpu6500_deinit(&gs_handle);
281
282 return 1;
283 }
284
285 /* enable gyro x */
287 if (res != 0)
288 {
289 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
290 (void)mpu6500_deinit(&gs_handle);
291
292 return 1;
293 }
294
295 /* enable gyro y */
297 if (res != 0)
298 {
299 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
300 (void)mpu6500_deinit(&gs_handle);
301
302 return 1;
303 }
304
305 /* enable gyro z */
307 if (res != 0)
308 {
309 mpu6500_interface_debug_print("mpu6500: set standby mode failed.\n");
310 (void)mpu6500_deinit(&gs_handle);
311
312 return 1;
313 }
314
315 /* disable gyroscope x test */
317 if (res != 0)
318 {
319 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
320 (void)mpu6500_deinit(&gs_handle);
321
322 return 1;
323 }
324
325 /* disable gyroscope y test */
327 if (res != 0)
328 {
329 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
330 (void)mpu6500_deinit(&gs_handle);
331
332 return 1;
333 }
334
335 /* disable gyroscope z test */
337 if (res != 0)
338 {
339 mpu6500_interface_debug_print("mpu6500: set gyroscope test failed.\n");
340 (void)mpu6500_deinit(&gs_handle);
341
342 return 1;
343 }
344
345 /* disable accelerometer x test */
347 if (res != 0)
348 {
349 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
350 (void)mpu6500_deinit(&gs_handle);
351
352 return 1;
353 }
354
355 /* disable accelerometer y test */
357 if (res != 0)
358 {
359 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
360 (void)mpu6500_deinit(&gs_handle);
361
362 return 1;
363 }
364
365 /* disable accelerometer z test */
367 if (res != 0)
368 {
369 mpu6500_interface_debug_print("mpu6500: set accelerometer test failed.\n");
370 (void)mpu6500_deinit(&gs_handle);
371
372 return 1;
373 }
374
375 /* disable temp fifo */
377 if (res != 0)
378 {
379 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
380 (void)mpu6500_deinit(&gs_handle);
381
382 return 1;
383 }
384
385 /* disable xg fifo */
387 if (res != 0)
388 {
389 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
390 (void)mpu6500_deinit(&gs_handle);
391
392 return 1;
393 }
394
395 /* disable yg fifo */
397 if (res != 0)
398 {
399 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
400 (void)mpu6500_deinit(&gs_handle);
401
402 return 1;
403 }
404
405 /* disable zg fifo */
407 if (res != 0)
408 {
409 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
410 (void)mpu6500_deinit(&gs_handle);
411
412 return 1;
413 }
414
415 /* disable accel fifo */
417 if (res != 0)
418 {
419 mpu6500_interface_debug_print("mpu6500: set fifo enable failed.\n");
420 (void)mpu6500_deinit(&gs_handle);
421
422 return 1;
423 }
424
425 /* enable fifo */
426 res = mpu6500_set_fifo(&gs_handle, MPU6500_BOOL_TRUE);
427 if (res != 0)
428 {
429 mpu6500_interface_debug_print("mpu6500: set fifo failed.\n");
430 (void)mpu6500_deinit(&gs_handle);
431
432 return 1;
433 }
434
435 /* set the default interrupt level */
437 if (res != 0)
438 {
439 mpu6500_interface_debug_print("mpu6500: set interrupt level failed.\n");
440 (void)mpu6500_deinit(&gs_handle);
441
442 return 1;
443 }
444
445 /* set the default interrupt pin type */
447 if (res != 0)
448 {
449 mpu6500_interface_debug_print("mpu6500: set interrupt pin type failed.\n");
450 (void)mpu6500_deinit(&gs_handle);
451
452 return 1;
453 }
454
455 if (tap_callback != NULL)
456 {
457 /* set the default motion threshold */
459 if (res != 0)
460 {
461 mpu6500_interface_debug_print("mpu6500: motion threshold convert to register failed.\n");
462 (void)mpu6500_deinit(&gs_handle);
463
464 return 1;
465 }
466
467 /* set the motion threshold */
468 res = mpu6500_set_motion_threshold(&gs_handle, reg);
469 if (res != 0)
470 {
471 mpu6500_interface_debug_print("mpu6500: set motion threshold failed.\n");
472 (void)mpu6500_deinit(&gs_handle);
473
474 return 1;
475 }
476
477 /* enable wake on motion */
479 if (res != 0)
480 {
481 mpu6500_interface_debug_print("mpu6500: set wake on motion failed.\n");
482 (void)mpu6500_deinit(&gs_handle);
483
484 return 1;
485 }
486 }
487
488 /* set the default motion interrupt */
490 if (res != 0)
491 {
492 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
493 (void)mpu6500_deinit(&gs_handle);
494
495 return 1;
496 }
497
498 /* set the default fifo overflow interrupt */
500 if (res != 0)
501 {
502 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
503 (void)mpu6500_deinit(&gs_handle);
504
505 return 1;
506 }
507
508 /* set the default dmp interrupt */
510 if (res != 0)
511 {
512 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
513 (void)mpu6500_deinit(&gs_handle);
514
515 return 1;
516 }
517
518 /* set the default fsync int interrupt */
520 if (res != 0)
521 {
522 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
523 (void)mpu6500_deinit(&gs_handle);
524
525 return 1;
526 }
527
528 /* set the default data ready interrupt */
530 if (res != 0)
531 {
532 mpu6500_interface_debug_print("mpu6500: set interrupt failed.\n");
533 (void)mpu6500_deinit(&gs_handle);
534
535 return 1;
536 }
537
538 /* set the default latch */
540 if (res != 0)
541 {
542 mpu6500_interface_debug_print("mpu6500: set interrupt latch failed.\n");
543 (void)mpu6500_deinit(&gs_handle);
544
545 return 1;
546 }
547
548 /* set the default interrupt read clear */
550 if (res != 0)
551 {
552 mpu6500_interface_debug_print("mpu6500: set interrupt read clear failed.\n");
553 (void)mpu6500_deinit(&gs_handle);
554
555 return 1;
556 }
557
558 /* set the default extern sync */
560 if (res != 0)
561 {
562 mpu6500_interface_debug_print("mpu6500: set extern sync failed.\n");
563 (void)mpu6500_deinit(&gs_handle);
564
565 return 1;
566 }
567
568 /* set the default fsync interrupt */
570 if (res != 0)
571 {
572 mpu6500_interface_debug_print("mpu6500: set fsync interrupt failed.\n");
573 (void)mpu6500_deinit(&gs_handle);
574
575 return 1;
576 }
577
578 /* set the default fsync interrupt level */
580 if (res != 0)
581 {
582 mpu6500_interface_debug_print("mpu6500: set fsync interrupt level failed.\n");
583 (void)mpu6500_deinit(&gs_handle);
584
585 return 1;
586 }
587
588 /* set the default iic master */
590 if (res != 0)
591 {
592 mpu6500_interface_debug_print("mpu6500: set iic master failed.\n");
593 (void)mpu6500_deinit(&gs_handle);
594
595 return 1;
596 }
597
598 /* set the default iic bypass */
600 if (res != 0)
601 {
602 mpu6500_interface_debug_print("mpu6500: set iic bypass failed.\n");
603 (void)mpu6500_deinit(&gs_handle);
604
605 return 1;
606 }
607
608 /* set the default gyro standby */
610 if (res != 0)
611 {
612 mpu6500_interface_debug_print("mpu6500: set gyro standby failed.\n");
613 (void)mpu6500_deinit(&gs_handle);
614
615 return 1;
616 }
617
618 /* set the default fifo mode */
620 if (res != 0)
621 {
622 mpu6500_interface_debug_print("mpu6500: set fifo mode failed.\n");
623 (void)mpu6500_deinit(&gs_handle);
624
625 return 1;
626 }
627
628 /* set the default gyroscope choice */
630 if (res != 0)
631 {
632 mpu6500_interface_debug_print("mpu6500: set gyroscope choice failed.\n");
633 (void)mpu6500_deinit(&gs_handle);
634
635 return 1;
636 }
637
638 /* set the default low pass filter */
640 if (res != 0)
641 {
642 mpu6500_interface_debug_print("mpu6500: set low pass filter failed.\n");
643 (void)mpu6500_deinit(&gs_handle);
644
645 return 1;
646 }
647
648 /* set the default accelerometer choice */
650 if (res != 0)
651 {
652 mpu6500_interface_debug_print("mpu6500: set accelerometer choice failed.\n");
653 (void)mpu6500_deinit(&gs_handle);
654
655 return 1;
656 }
657
658 /* set the default accelerometer low pass filter */
660 if (res != 0)
661 {
662 mpu6500_interface_debug_print("mpu6500: set accelerometer low pass filter failed.\n");
663 (void)mpu6500_deinit(&gs_handle);
664
665 return 1;
666 }
667
668 /* set the default low power accel output rate */
670 if (res != 0)
671 {
672 mpu6500_interface_debug_print("mpu6500: set low power accel output rate failed.\n");
673 (void)mpu6500_deinit(&gs_handle);
674
675 return 1;
676 }
677
678 /* set the default accel compare with previous sample */
680 if (res != 0)
681 {
682 mpu6500_interface_debug_print("mpu6500: set accel compare with previous sample failed.\n");
683 (void)mpu6500_deinit(&gs_handle);
684
685 return 1;
686 }
687
688 /* dmp load firmware */
689 res = mpu6500_dmp_load_firmware(&gs_handle);
690 if (res != 0)
691 {
692 mpu6500_interface_debug_print("mpu6500: dmp load firmware failed.\n");
693 (void)mpu6500_deinit(&gs_handle);
694
695 return 1;
696 }
697
698 /* enable axis x */
700 if (res != 0)
701 {
702 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
703 (void)mpu6500_deinit(&gs_handle);
704
705 return 1;
706 }
707
708 /* enable axis y */
710 if (res != 0)
711 {
712 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
713 (void)mpu6500_deinit(&gs_handle);
714
715 return 1;
716 }
717
718 /* enable axis z */
720 if (res != 0)
721 {
722 mpu6500_interface_debug_print("mpu6500: dmp set tap axes failed.\n");
723 (void)mpu6500_deinit(&gs_handle);
724
725 return 1;
726 }
727
728 /* set the default fifo rate */
730 if (res != 0)
731 {
732 mpu6500_interface_debug_print("mpu6500: dmp set fifo rate failed.\n");
733 (void)mpu6500_deinit(&gs_handle);
734
735 return 1;
736 }
737
738 /* set the default interrupt mode */
740 if (res != 0)
741 {
742 mpu6500_interface_debug_print("mpu6500: dmp set interrupt mode failed.\n");
743 (void)mpu6500_deinit(&gs_handle);
744
745 return 1;
746 }
747
748 /* set the default dmp orientation */
749 res = mpu6500_dmp_set_orientation(&gs_handle, gyro_orientation);
750 if (res != 0)
751 {
752 mpu6500_interface_debug_print("mpu6500: dmp set orientation failed.\n");
753 (void)mpu6500_deinit(&gs_handle);
754
755 return 1;
756 }
757
758 /* enable feature */
762 if (res != 0)
763 {
764 mpu6500_interface_debug_print("mpu6500: dmp set feature failed.\n");
765 (void)mpu6500_deinit(&gs_handle);
766
767 return 1;
768 }
769
770 /* dmp set tap callback */
771 res = mpu6500_dmp_set_tap_callback(&gs_handle, tap_callback);
772 if (res != 0)
773 {
774 mpu6500_interface_debug_print("mpu6500: dmp set tap callback failed.\n");
775 (void)mpu6500_deinit(&gs_handle);
776
777 return 1;
778 }
779
780 /* dmp set orient callback */
781 res = mpu6500_dmp_set_orient_callback(&gs_handle, orient_callback);
782 if (res != 0)
783 {
784 mpu6500_interface_debug_print("mpu6500: dmp set orient callback failed.\n");
785 (void)mpu6500_deinit(&gs_handle);
786
787 return 1;
788 }
789
790 /* set the default pedometer walk time */
792 if (res != 0)
793 {
794 mpu6500_interface_debug_print("mpu6500: dmp set pedometer walk time failed.\n");
795 (void)mpu6500_deinit(&gs_handle);
796
797 return 1;
798 }
799
800 /* set the default pedometer step count */
802 if (res != 0)
803 {
804 mpu6500_interface_debug_print("mpu6500: dmp set pedometer step count failed.\n");
805 (void)mpu6500_deinit(&gs_handle);
806
807 return 1;
808 }
809
810 /* set the default shake reject timeout */
812 if (res != 0)
813 {
814 mpu6500_interface_debug_print("mpu6500: dmp set shake reject timeout failed.\n");
815 (void)mpu6500_deinit(&gs_handle);
816
817 return 1;
818 }
819
820 /* set the default shake reject time */
822 if (res != 0)
823 {
824 mpu6500_interface_debug_print("mpu6500: dmp set shake reject time failed.\n");
825 (void)mpu6500_deinit(&gs_handle);
826
827 return 1;
828 }
829
830 /* set the default shake reject thresh */
832 if (res != 0)
833 {
834 mpu6500_interface_debug_print("mpu6500: dmp set shake reject thresh failed.\n");
835 (void)mpu6500_deinit(&gs_handle);
836
837 return 1;
838 }
839
840 /* set the default tap time multi */
842 if (res != 0)
843 {
844 mpu6500_interface_debug_print("mpu6500: dmp set tap time multi failed.\n");
845 (void)mpu6500_deinit(&gs_handle);
846
847 return 1;
848 }
849
850 /* set the default tap time */
852 if (res != 0)
853 {
854 mpu6500_interface_debug_print("mpu6500: dmp set tap time failed.\n");
855 (void)mpu6500_deinit(&gs_handle);
856
857 return 1;
858 }
859
860 /* set the default min tap count */
862 if (res != 0)
863 {
864 mpu6500_interface_debug_print("mpu6500: dmp set min tap count failed.\n");
865 (void)mpu6500_deinit(&gs_handle);
866
867 return 1;
868 }
869
870 /* set the default tap thresh x */
872 if (res != 0)
873 {
874 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
875 (void)mpu6500_deinit(&gs_handle);
876
877 return 1;
878 }
879
880 /* set the default tap thresh y */
882 if (res != 0)
883 {
884 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
885 (void)mpu6500_deinit(&gs_handle);
886
887 return 1;
888 }
889
890 /* set the default tap thresh z */
892 if (res != 0)
893 {
894 mpu6500_interface_debug_print("mpu6500: dmp set tap thresh failed.\n");
895 (void)mpu6500_deinit(&gs_handle);
896
897 return 1;
898 }
899
900 /* dmp gyro accel raw offset convert */
901 res = mpu6500_dmp_gyro_accel_raw_offset_convert(&gs_handle, gyro_offset_raw, accel_offset_raw,
902 gyro_offset, accel_offset);
903 if (res != 0)
904 {
905 mpu6500_interface_debug_print("mpu6500: dmp gyro accel raw offset convert failed.\n");
906 (void)mpu6500_deinit(&gs_handle);
907
908 return 1;
909 }
910
911 /* dmp set accel bias */
912 res = mpu6500_dmp_set_accel_bias(&gs_handle, accel_offset);
913 if (res != 0)
914 {
915 mpu6500_interface_debug_print("mpu6500: dmp set accel bias failed.\n");
916 (void)mpu6500_deinit(&gs_handle);
917
918 return 1;
919 }
920
921 /* dmp set gyro bias */
922 res = mpu6500_dmp_set_gyro_bias(&gs_handle, gyro_offset);
923 if (res != 0)
924 {
925 mpu6500_interface_debug_print("mpu6500: dmp set gyro bias failed.\n");
926 (void)mpu6500_deinit(&gs_handle);
927
928 return 1;
929 }
930
931 /* enable the dmp */
932 res = mpu6500_dmp_set_enable(&gs_handle, MPU6500_BOOL_TRUE);
933 if (res != 0)
934 {
935 mpu6500_interface_debug_print("mpu6500: dmp set enable failed.\n");
936 (void)mpu6500_deinit(&gs_handle);
937
938 return 1;
939 }
940
941 /* force fifo reset */
942 res = mpu6500_force_fifo_reset(&gs_handle);
943 if (res != 0)
944 {
945 mpu6500_interface_debug_print("mpu6500: force fifo reset failed.\n");
946 (void)mpu6500_deinit(&gs_handle);
947
948 return 1;
949 }
950
951 return 0;
952}
953
963{
964 /* get the pedometer counter */
965 if (mpu6500_dmp_get_pedometer_step_count(&gs_handle, cnt) != 0)
966 {
967 return 1;
968 }
969
970 return 0;
971}
972
989uint8_t mpu6500_dmp_read_all(int16_t (*accel_raw)[3], float (*accel_g)[3],
990 int16_t (*gyro_raw)[3], float (*gyro_dps)[3],
991 int32_t (*quat)[4],
992 float *pitch, float *roll, float *yaw,
993 uint16_t *l
994 )
995{
996 /* dmp read */
997 if (mpu6500_dmp_read(&gs_handle, accel_raw, accel_g,
998 gyro_raw, gyro_dps, quat,
999 pitch, roll, yaw, l) != 0
1000 )
1001 {
1002 return 1;
1003 }
1004
1005 return 0;
1006}
1007
1016{
1017 /* deinit */
1018 if (mpu6500_deinit(&gs_handle) != 0)
1019 {
1020 return 1;
1021 }
1022
1023 return 0;
1024}
driver mpu6500 dmp header file
uint8_t mpu6500_set_motion_threshold(mpu6500_handle_t *handle, uint8_t threshold)
set the motion_threshold
uint8_t mpu6500_set_ptat(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the temperature sensor
uint8_t mpu6500_set_accelerometer_choice(mpu6500_handle_t *handle, uint8_t choice)
set the accelerometer choice
uint8_t mpu6500_set_interface(mpu6500_handle_t *handle, mpu6500_interface_t interface)
set the chip interface
mpu6500_address_t
mpu6500 address enumeration definition
uint8_t mpu6500_set_gyro_standby(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the gyro standby
uint8_t mpu6500_set_addr_pin(mpu6500_handle_t *handle, mpu6500_address_t addr_pin)
set the chip address pin
uint8_t mpu6500_set_iic_bypass(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic bypass
uint8_t mpu6500_force_fifo_reset(mpu6500_handle_t *handle)
force reset the fifo
uint8_t mpu6500_set_accel_compare_with_previous_sample(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable accel compare with previous sample
uint8_t mpu6500_set_fifo(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable fifo
uint8_t mpu6500_set_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the interrupt level
uint8_t mpu6500_set_fsync_interrupt_level(mpu6500_handle_t *handle, mpu6500_pin_level_t level)
set the fsync interrupt level
struct mpu6500_handle_s mpu6500_handle_t
mpu6500 handle structure definition
uint8_t mpu6500_set_gyroscope_choice(mpu6500_handle_t *handle, uint8_t choice)
set the gyroscope choice
uint8_t mpu6500_set_fsync_interrupt(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the fsync interrupt
uint8_t mpu6500_set_sleep(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the sleep mode
uint8_t mpu6500_set_interrupt_latch(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the interrupt latch
uint8_t mpu6500_set_gyroscope_range(mpu6500_handle_t *handle, mpu6500_gyroscope_range_t range)
set the gyroscope range
uint8_t mpu6500_set_clock_source(mpu6500_handle_t *handle, mpu6500_clock_source_t clock_source)
set the chip clock source
uint8_t mpu6500_set_wake_on_motion(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable wake on motion
uint8_t mpu6500_set_interrupt_read_clear(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the interrupt reading clear
uint8_t mpu6500_set_interrupt(mpu6500_handle_t *handle, mpu6500_interrupt_t type, mpu6500_bool_t enable)
enable or disable the interrupt
uint8_t mpu6500_set_fifo_enable(mpu6500_handle_t *handle, mpu6500_fifo_t fifo, mpu6500_bool_t enable)
enable or disable the fifo function
uint8_t mpu6500_deinit(mpu6500_handle_t *handle)
close the chip
uint8_t mpu6500_set_low_pass_filter(mpu6500_handle_t *handle, mpu6500_low_pass_filter_t filter)
set the low pass filter
uint8_t mpu6500_irq_handler(mpu6500_handle_t *handle)
irq handler
uint8_t mpu6500_set_extern_sync(mpu6500_handle_t *handle, mpu6500_extern_sync_t sync)
set the extern sync type
uint8_t mpu6500_set_low_power_accel_output_rate(mpu6500_handle_t *handle, mpu6500_low_power_accel_output_rate_t rate)
set the low power accel output rate
uint8_t mpu6500_set_fifo_mode(mpu6500_handle_t *handle, mpu6500_fifo_mode mode)
set the fifo mode
uint8_t mpu6500_set_disable_iic_slave(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic slave mode
uint8_t mpu6500_set_iic_master(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the iic master mode
uint8_t mpu6500_set_cycle_wake_up(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the cycle wake up mode
uint8_t mpu6500_motion_threshold_convert_to_register(mpu6500_handle_t *handle, float mg, uint8_t *reg)
convert the motion threshold to the register raw data
uint8_t mpu6500_init(mpu6500_handle_t *handle)
initialize the chip
uint8_t mpu6500_set_accelerometer_range(mpu6500_handle_t *handle, mpu6500_accelerometer_range_t range)
set the accelerometer range
uint8_t mpu6500_set_accelerometer_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
set the accelerometer test
mpu6500_interface_t
mpu6500 interface enumeration definition
uint8_t mpu6500_set_fifo_1024kb(mpu6500_handle_t *handle)
set fifo 1024kb
uint8_t mpu6500_set_standby_mode(mpu6500_handle_t *handle, mpu6500_source_t source, mpu6500_bool_t enable)
set source into standby mode
uint8_t mpu6500_set_accelerometer_low_pass_filter(mpu6500_handle_t *handle, mpu6500_accelerometer_low_pass_filter_t filter)
set the accelerometer low pass filter
uint8_t mpu6500_set_interrupt_pin_type(mpu6500_handle_t *handle, mpu6500_pin_type_t type)
set the interrupt pin type
uint8_t mpu6500_set_gyroscope_test(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
set the gyroscope test
uint8_t mpu6500_self_test(mpu6500_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3])
run the self test
uint8_t mpu6500_set_sample_rate_divider(mpu6500_handle_t *handle, uint8_t d)
set the sample rate divider
@ MPU6500_BOOL_FALSE
@ MPU6500_BOOL_TRUE
@ MPU6500_INTERRUPT_DATA_READY
@ MPU6500_INTERRUPT_FIFO_OVERFLOW
@ MPU6500_INTERRUPT_MOTION
@ MPU6500_INTERRUPT_FSYNC_INT
@ MPU6500_INTERRUPT_DMP
@ MPU6500_SOURCE_ACC_Y
@ MPU6500_SOURCE_GYRO_X
@ MPU6500_SOURCE_GYRO_Y
@ MPU6500_SOURCE_ACC_X
@ MPU6500_SOURCE_ACC_Z
@ MPU6500_SOURCE_GYRO_Z
@ MPU6500_AXIS_Y
@ MPU6500_AXIS_Z
@ MPU6500_AXIS_X
@ MPU6500_FIFO_TEMP
@ MPU6500_FIFO_YG
@ MPU6500_FIFO_ZG
@ MPU6500_FIFO_ACCEL
@ MPU6500_FIFO_XG
@ MPU6500_INTERFACE_SPI
uint8_t mpu6500_dmp_set_tap_time(mpu6500_handle_t *handle, uint16_t ms)
dmp set the tap time
uint8_t mpu6500_dmp_set_accel_bias(mpu6500_handle_t *handle, int32_t bias[3])
dmp set the accel bias
uint8_t mpu6500_dmp_set_gyro_bias(mpu6500_handle_t *handle, int32_t bias[3])
dmp set the gyro bias
uint8_t mpu6500_dmp_gyro_accel_raw_offset_convert(mpu6500_handle_t *handle, int32_t gyro_offset_raw[3], int32_t accel_offset_raw[3], int32_t gyro_offset[3], int32_t accel_offset[3])
dmp gyro accel raw offset convert
uint8_t mpu6500_dmp_set_tap_thresh(mpu6500_handle_t *handle, mpu6500_axis_t axis, uint16_t mg_ms)
dmp set the tap thresh
uint8_t mpu6500_dmp_set_shake_reject_time(mpu6500_handle_t *handle, uint16_t ms)
dmp set the shake reject time
uint8_t mpu6500_dmp_set_min_tap_count(mpu6500_handle_t *handle, uint8_t cnt)
dmp set the min tap count
uint8_t mpu6500_dmp_set_fifo_rate(mpu6500_handle_t *handle, uint16_t rate)
dmp set the fifo rate
uint8_t mpu6500_dmp_set_orient_callback(mpu6500_handle_t *handle, void(*callback)(uint8_t orientation))
dmp set the orient callback
uint8_t mpu6500_dmp_read(mpu6500_handle_t *handle, int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], int32_t(*quat)[4], float *pitch, float *roll, float *yaw, uint16_t *l)
dmp read the data
uint8_t mpu6500_dmp_set_shake_reject_timeout(mpu6500_handle_t *handle, uint16_t ms)
dmp set the shake reject timeout
uint8_t mpu6500_dmp_set_tap_callback(mpu6500_handle_t *handle, void(*callback)(uint8_t count, uint8_t direction))
dmp set the tap callback
uint8_t mpu6500_dmp_set_pedometer_step_count(mpu6500_handle_t *handle, uint32_t count)
dmp set the pedometer step count
uint8_t mpu6500_dmp_set_tap_axes(mpu6500_handle_t *handle, mpu6500_axis_t axis, mpu6500_bool_t enable)
dmp enable or disable the tap axes
uint8_t mpu6500_dmp_load_firmware(mpu6500_handle_t *handle)
load the dmp firmware
uint8_t mpu6500_dmp_set_feature(mpu6500_handle_t *handle, uint16_t mask)
dmp enable or disable the dmp feature
uint8_t mpu6500_dmp_set_orientation(mpu6500_handle_t *handle, int8_t mat[9])
dmp set the orientation
uint8_t mpu6500_dmp_set_pedometer_walk_time(mpu6500_handle_t *handle, uint32_t ms)
dmp set the pedometer walk time
uint8_t mpu6500_dmp_set_interrupt_mode(mpu6500_handle_t *handle, mpu6500_dmp_interrupt_mode_t mode)
dmp set the interrupt mode
uint8_t mpu6500_dmp_set_tap_time_multi(mpu6500_handle_t *handle, uint16_t ms)
dmp set max time between taps to register as a multi tap
uint8_t mpu6500_dmp_set_shake_reject_thresh(mpu6500_handle_t *handle, uint16_t dps)
dmp set the shake reject thresh
uint8_t mpu6500_dmp_set_enable(mpu6500_handle_t *handle, mpu6500_bool_t enable)
enable or disable the dmp
uint8_t mpu6500_dmp_get_pedometer_step_count(mpu6500_handle_t *handle, uint32_t *count)
dmp get the pedometer step count
@ MPU6500_DMP_FEATURE_GYRO_CAL
@ MPU6500_DMP_FEATURE_PEDOMETER
@ MPU6500_DMP_FEATURE_SEND_CAL_GYRO
@ MPU6500_DMP_FEATURE_TAP
@ MPU6500_DMP_FEATURE_ORIENT
@ MPU6500_DMP_FEATURE_SEND_RAW_ACCEL
@ MPU6500_DMP_FEATURE_6X_QUAT
#define MPU6500_DMP_DEFAULT_TAP_X_THRESH
#define MPU6500_DMP_DEFAULT_INTERRUPT_FIFO_OVERFLOW
#define MPU6500_DMP_DEFAULT_EXTERN_SYNC
#define MPU6500_DMP_DEFAULT_PEOMETER_WALK_TIME
#define MPU6500_DMP_DEFAULT_ACCELEROMETER_RANGE
#define MPU6500_DMP_DEFAULT_INTERRUPT_MOTION
#define MPU6500_DMP_DEFAULT_FSYNC_INTERRUPT
#define MPU6500_DMP_DEFAULT_TAP_Y_THRESH
#define MPU6500_DMP_DEFAULT_TAP_TIME
#define MPU6500_DMP_DEFAULT_TAP_TIME_MULTI
#define MPU6500_DMP_DEFAULT_GYROSCOPE_CHOICE
#define MPU6500_DMP_DEFAULT_INTERRUPT_PIN_TYPE
#define MPU6500_DMP_DEFAULT_INTERRUPT_READ_CLEAR
#define MPU6500_DMP_DEFAULT_FIFO_MODE
#define MPU6500_DMP_DEFAULT_LOW_POWER_ACCEL_OUTPUT_RATE
#define MPU6500_DMP_DEFAULT_MOTION_THRESHOLD
uint8_t mpu6500_dmp_deinit(void)
dmp example deinit
#define MPU6500_DMP_DEFAULT_INTERRUPT_LATCH
#define MPU6500_DMP_DEFAULT_RATE
#define MPU6500_DMP_DEFAULT_GYROSCOPE_RANGE
#define MPU6500_DMP_DEFAULT_INTERRUPT_DMP
#define MPU6500_DMP_DEFAULT_IIC_BYPASS
#define MPU6500_DMP_DEFAULT_MIN_TAP_COUNT
#define MPU6500_DMP_DEFAULT_LOW_PASS_FILTER
#define MPU6500_DMP_DEFAULT_TAP_Z_THRESH
uint8_t mpu6500_dmp_irq_handler(void)
dmp irq
#define MPU6500_DMP_DEFAULT_SHAKE_REJECT_TIME
#define MPU6500_DMP_DEFAULT_FSYNC_INTERRUPT_LEVEL
#define MPU6500_DMP_DEFAULT_CLOCK_SOURCE
mpu6500 dmp example default definition
#define MPU6500_DMP_DEFAULT_ACCELEROMETER_LOW_PASS_FILTER
uint8_t mpu6500_dmp_init(mpu6500_interface_t interface, mpu6500_address_t addr_pin, void(*receive_callback)(uint8_t type), void(*tap_callback)(uint8_t count, uint8_t direction), void(*orient_callback)(uint8_t orientation))
dmp example init
#define MPU6500_DMP_DEFAULT_INTERRUPT_DATA_READY
#define MPU6500_DMP_DEFAULT_INTERRUPT_PIN_LEVEL
#define MPU6500_DMP_DEFAULT_GYROSCOPE_STANDBY
#define MPU6500_DMP_DEFAULT_ACCELEROMETER_COMPARE
#define MPU6500_DMP_DEFAULT_SHAKE_REJECT_THRESH
#define MPU6500_DMP_DEFAULT_IIC_MASTER
#define MPU6500_DMP_DEFAULT_PEOMETER_STEP_COUNT
#define MPU6500_DMP_DEFAULT_SHAKE_REJECT_TIMEOUT
#define MPU6500_DMP_DEFAULT_INTERRUPT_FSYNC_INT
#define MPU6500_DMP_DEFAULT_INTERRUPT_MODE
#define MPU6500_DMP_DEFAULT_CYCLE_WAKE_UP
uint8_t mpu6500_dmp_read_all(int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], int32_t(*quat)[4], float *pitch, float *roll, float *yaw, uint16_t *l)
dmp example read
#define MPU6500_DMP_DEFAULT_ACCELEROMETER_CHOICE
uint8_t mpu6500_dmp_get_pedometer_counter(uint32_t *cnt)
dmp example get pedometer counter
uint8_t mpu6500_interface_spi_deinit(void)
interface spi bus deinit
void mpu6500_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mpu6500_interface_iic_init(void)
interface iic bus init
uint8_t mpu6500_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mpu6500_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mpu6500_interface_spi_init(void)
interface spi bus init
uint8_t mpu6500_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void mpu6500_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mpu6500_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t mpu6500_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write