LibDriver MPU6050
Loading...
Searching...
No Matches
driver_mpu6050_fifo.c
Go to the documentation of this file.
1
36
37#include "driver_mpu6050_fifo.h"
38
39static mpu6050_handle_t gs_handle;
40
49{
50 if (mpu6050_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54 else
55 {
56 return 0;
57 }
58}
59
69{
70 uint8_t res;
71
72 /* link interface function */
81
82 /* set the addr pin */
83 res = mpu6050_set_addr_pin(&gs_handle, addr_pin);
84 if (res != 0)
85 {
86 mpu6050_interface_debug_print("mpu6050: set addr pin failed.\n");
87
88 return 1;
89 }
90
91 /* init */
92 res = mpu6050_init(&gs_handle);
93 if (res != 0)
94 {
95 mpu6050_interface_debug_print("mpu6050: init failed.\n");
96
97 return 1;
98 }
99
100 /* delay 100 ms */
102
103 /* disable sleep */
104 res = mpu6050_set_sleep(&gs_handle, MPU6050_BOOL_FALSE);
105 if (res != 0)
106 {
107 mpu6050_interface_debug_print("mpu6050: set sleep failed.\n");
108 (void)mpu6050_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* set the default clock source */
115 if (res != 0)
116 {
117 mpu6050_interface_debug_print("mpu6050: set clock source failed.\n");
118 (void)mpu6050_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* set the default rate */
124 res = mpu6050_set_sample_rate_divider(&gs_handle, (1000 / MPU6050_FIFO_DEFAULT_RATE) - 1);
125 if (res != 0)
126 {
127 mpu6050_interface_debug_print("mpu6050: set sample rate divider failed.\n");
128 (void)mpu6050_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* set the default accelerometer range */
135 if (res != 0)
136 {
137 mpu6050_interface_debug_print("mpu6050: set accelerometer range failed.\n");
138 (void)mpu6050_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* set the default gyroscope range */
145 if (res != 0)
146 {
147 mpu6050_interface_debug_print("mpu6050: set gyroscope range failed.\n");
148 (void)mpu6050_deinit(&gs_handle);
149
150 return 1;
151 }
152
153 /* set the default low pass filter */
155 if (res != 0)
156 {
157 mpu6050_interface_debug_print("mpu6050: set low pass filter failed.\n");
158 (void)mpu6050_deinit(&gs_handle);
159
160 return 1;
161 }
162
163 /* enable temperature sensor */
165 if (res != 0)
166 {
167 mpu6050_interface_debug_print("mpu6050: set temperature sensor failed.\n");
168 (void)mpu6050_deinit(&gs_handle);
169
170 return 1;
171 }
172
173 /* set the default wake up */
175 if (res != 0)
176 {
177 mpu6050_interface_debug_print("mpu6050: set cycle wake up failed.\n");
178 (void)mpu6050_deinit(&gs_handle);
179
180 return 1;
181 }
182
183 /* set the default wake up frequency */
185 if (res != 0)
186 {
187 mpu6050_interface_debug_print("mpu6050: set wake up frequency failed.\n");
188 (void)mpu6050_deinit(&gs_handle);
189
190 return 1;
191 }
192
193 /* enable acc x */
195 if (res != 0)
196 {
197 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
198 (void)mpu6050_deinit(&gs_handle);
199
200 return 1;
201 }
202
203 /* enable acc y */
205 if (res != 0)
206 {
207 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
208 (void)mpu6050_deinit(&gs_handle);
209
210 return 1;
211 }
212
213 /* enable acc z */
215 if (res != 0)
216 {
217 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
218 (void)mpu6050_deinit(&gs_handle);
219
220 return 1;
221 }
222
223 /* enable gyro x */
225 if (res != 0)
226 {
227 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
228 (void)mpu6050_deinit(&gs_handle);
229
230 return 1;
231 }
232
233 /* enable gyro y */
235 if (res != 0)
236 {
237 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
238 (void)mpu6050_deinit(&gs_handle);
239
240 return 1;
241 }
242
243 /* enable gyro z */
245 if (res != 0)
246 {
247 mpu6050_interface_debug_print("mpu6050: set standby mode failed.\n");
248 (void)mpu6050_deinit(&gs_handle);
249
250 return 1;
251 }
252
253 /* disable gyroscope x test */
255 if (res != 0)
256 {
257 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
258 (void)mpu6050_deinit(&gs_handle);
259
260 return 1;
261 }
262
263 /* disable gyroscope y test */
265 if (res != 0)
266 {
267 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
268 (void)mpu6050_deinit(&gs_handle);
269
270 return 1;
271 }
272
273 /* disable gyroscope z test */
275 if (res != 0)
276 {
277 mpu6050_interface_debug_print("mpu6050: set gyroscope test failed.\n");
278 (void)mpu6050_deinit(&gs_handle);
279
280 return 1;
281 }
282
283 /* disable accelerometer x test */
285 if (res != 0)
286 {
287 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
288 (void)mpu6050_deinit(&gs_handle);
289
290 return 1;
291 }
292
293 /* disable accelerometer y test */
295 if (res != 0)
296 {
297 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
298 (void)mpu6050_deinit(&gs_handle);
299
300 return 1;
301 }
302
303 /* disable accelerometer z test */
305 if (res != 0)
306 {
307 mpu6050_interface_debug_print("mpu6050: set accelerometer test failed.\n");
308 (void)mpu6050_deinit(&gs_handle);
309
310 return 1;
311 }
312
313 /* disable temp fifo */
315 if (res != 0)
316 {
317 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
318 (void)mpu6050_deinit(&gs_handle);
319
320 return 1;
321 }
322
323 /* enable xg fifo */
325 if (res != 0)
326 {
327 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
328 (void)mpu6050_deinit(&gs_handle);
329
330 return 1;
331 }
332
333 /* enable yg fifo */
335 if (res != 0)
336 {
337 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
338 (void)mpu6050_deinit(&gs_handle);
339
340 return 1;
341 }
342
343 /* enable zg fifo */
345 if (res != 0)
346 {
347 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
348 (void)mpu6050_deinit(&gs_handle);
349
350 return 1;
351 }
352
353 /* enable accel fifo */
355 if (res != 0)
356 {
357 mpu6050_interface_debug_print("mpu6050: set fifo enable failed.\n");
358 (void)mpu6050_deinit(&gs_handle);
359
360 return 1;
361 }
362
363 /* enable fifo */
364 res = mpu6050_set_fifo(&gs_handle, MPU6050_BOOL_TRUE);
365 if (res != 0)
366 {
367 mpu6050_interface_debug_print("mpu6050: set fifo failed.\n");
368 (void)mpu6050_deinit(&gs_handle);
369
370 return 1;
371 }
372
373 /* set the default interrupt level */
375 if (res != 0)
376 {
377 mpu6050_interface_debug_print("mpu6050: set interrupt level failed.\n");
378 (void)mpu6050_deinit(&gs_handle);
379
380 return 1;
381 }
382
383 /* set the default interrupt pin type */
385 if (res != 0)
386 {
387 mpu6050_interface_debug_print("mpu6050: set interrupt pin type failed.\n");
388 (void)mpu6050_deinit(&gs_handle);
389
390 return 1;
391 }
392
393 /* set the default motion */
395 if (res != 0)
396 {
397 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
398 (void)mpu6050_deinit(&gs_handle);
399
400 return 1;
401 }
402
403 /* set the default fifo overflow */
405 if (res != 0)
406 {
407 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
408 (void)mpu6050_deinit(&gs_handle);
409
410 return 1;
411 }
412
413 /* set the default dmp interrupt */
415 if (res != 0)
416 {
417 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
418 (void)mpu6050_deinit(&gs_handle);
419
420 return 1;
421 }
422
423 /* set the default i2c master */
425 if (res != 0)
426 {
427 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
428 (void)mpu6050_deinit(&gs_handle);
429
430 return 1;
431 }
432
433 /* set the default data ready */
435 if (res != 0)
436 {
437 mpu6050_interface_debug_print("mpu6050: set interrupt failed.\n");
438 (void)mpu6050_deinit(&gs_handle);
439
440 return 1;
441 }
442
443 /* set the default latch */
445 if (res != 0)
446 {
447 mpu6050_interface_debug_print("mpu6050: set interrupt latch failed.\n");
448 (void)mpu6050_deinit(&gs_handle);
449
450 return 1;
451 }
452
453 /* set the default interrupt read clear */
455 if (res != 0)
456 {
457 mpu6050_interface_debug_print("mpu6050: set interrupt read clear failed.\n");
458 (void)mpu6050_deinit(&gs_handle);
459
460 return 1;
461 }
462
463 /* set the default extern sync */
465 if (res != 0)
466 {
467 mpu6050_interface_debug_print("mpu6050: set extern sync failed.\n");
468 (void)mpu6050_deinit(&gs_handle);
469
470 return 1;
471 }
472
473 /* set the default fsync interrupt */
475 if (res != 0)
476 {
477 mpu6050_interface_debug_print("mpu6050: set fsync interrupt failed.\n");
478 (void)mpu6050_deinit(&gs_handle);
479
480 return 1;
481 }
482
483 /* set the default fsync interrupt level */
485 if (res != 0)
486 {
487 mpu6050_interface_debug_print("mpu6050: set fsync interrupt level failed.\n");
488 (void)mpu6050_deinit(&gs_handle);
489
490 return 1;
491 }
492
493 /* set the default iic master */
495 if (res != 0)
496 {
497 mpu6050_interface_debug_print("mpu6050: set iic master failed.\n");
498 (void)mpu6050_deinit(&gs_handle);
499
500 return 1;
501 }
502
503 /* set the default iic bypass */
505 if (res != 0)
506 {
507 mpu6050_interface_debug_print("mpu6050: set iic bypass failed.\n");
508 (void)mpu6050_deinit(&gs_handle);
509
510 return 1;
511 }
512
513 /* force fifo reset */
514 res = mpu6050_force_fifo_reset(&gs_handle);
515 if (res != 0)
516 {
517 mpu6050_interface_debug_print("mpu6050: force fifo reset failed.\n");
518 (void)mpu6050_deinit(&gs_handle);
519
520 return 1;
521 }
522
523 return 0;
524}
525
538uint8_t mpu6050_fifo_read(int16_t (*accel_raw)[3], float (*accel_g)[3],
539 int16_t (*gyro_raw)[3], float (*gyro_dps)[3],
540 uint16_t *len
541 )
542{
543 /* fifo read */
544 if (mpu6050_read(&gs_handle, accel_raw, accel_g,
545 gyro_raw, gyro_dps, len) != 0)
546 {
547 return 1;
548 }
549
550 return 0;
551}
552
561{
562 /* deinit */
563 if (mpu6050_deinit(&gs_handle) != 0)
564 {
565 return 1;
566 }
567
568 return 0;
569}
driver mpu6050 fifo header file
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_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_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_INTERRUPT_DMP
@ MPU6050_INTERRUPT_I2C_MAST
@ MPU6050_INTERRUPT_DATA_READY
@ MPU6050_INTERRUPT_FIFO_OVERFLOW
@ MPU6050_INTERRUPT_MOTION
@ MPU6050_BOOL_TRUE
@ MPU6050_BOOL_FALSE
@ MPU6050_AXIS_X
@ MPU6050_AXIS_Z
@ MPU6050_AXIS_Y
#define MPU6050_FIFO_DEFAULT_INTERRUPT_I2C_MAST
#define MPU6050_FIFO_DEFAULT_INTERRUPT_DATA_READY
uint8_t mpu6050_fifo_deinit(void)
fifo example deinit
#define MPU6050_FIFO_DEFAULT_INTERRUPT_PIN_LEVEL
#define MPU6050_FIFO_DEFAULT_IIC_MASTER
#define MPU6050_FIFO_DEFAULT_WAKE_UP_FREQUENCY
#define MPU6050_FIFO_DEFAULT_INTERRUPT_PIN_TYPE
#define MPU6050_FIFO_DEFAULT_INTERRUPT_READ_CLEAR
#define MPU6050_FIFO_DEFAULT_EXTERN_SYNC
#define MPU6050_FIFO_DEFAULT_INTERRUPT_DMP
#define MPU6050_FIFO_DEFAULT_ACCELEROMETER_RANGE
#define MPU6050_FIFO_DEFAULT_FSYNC_INTERRUPT_LEVEL
#define MPU6050_FIFO_DEFAULT_LOW_PASS_FILTER
#define MPU6050_FIFO_DEFAULT_INTERRUPT_LATCH
#define MPU6050_FIFO_DEFAULT_GYROSCOPE_RANGE
uint8_t mpu6050_fifo_init(mpu6050_address_t addr_pin)
fifo example init
#define MPU6050_FIFO_DEFAULT_INTERRUPT_MOTION
uint8_t mpu6050_fifo_read(int16_t(*accel_raw)[3], float(*accel_g)[3], int16_t(*gyro_raw)[3], float(*gyro_dps)[3], uint16_t *len)
fifo example read
#define MPU6050_FIFO_DEFAULT_FSYNC_INTERRUPT
#define MPU6050_FIFO_DEFAULT_CLOCK_SOURCE
mpu6050 fifo example default definition
#define MPU6050_FIFO_DEFAULT_INTERRUPT_FIFO_OVERFLOW
uint8_t mpu6050_fifo_irq_handler(void)
fifo irq
#define MPU6050_FIFO_DEFAULT_IIC_BYPASS
#define MPU6050_FIFO_DEFAULT_RATE
#define MPU6050_FIFO_DEFAULT_CYCLE_WAKE_UP
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