MPU6050 FreeIMU library

Dependents:   FreeIMU FreeIMU_external_magnetometer

Fork of MPU6050_tmp by Aloïs Wolff

Async MPU6050 library

My port of the MPU6050 library samples the chip at 500Hz using Timer. Async I2C is achieved using a custom I2C library, which supports I2C calls from interrupts. Link given below:

Import libraryMODI2C

Improvements to Olieman's MODI2C library. Supports calls from IRQ.

Difference between this port and the Arduino MPU6050 library

The getMotion6 function only returns a copy of the last obtained readings, which is sampled at a frequency of 500Hz (adjustable). Hence it can be called at any frequency without taxing the I2C.

Revision:
10:11cc1b413f49
Parent:
9:d879deb55ae1
--- a/I2Cdev.cpp	Sat Nov 09 08:51:07 2013 +0000
+++ b/I2Cdev.cpp	Mon Dec 23 08:34:58 2013 +0000
@@ -262,31 +262,25 @@
 
 bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data)
 {
-    //i2c.start();
-    //i2c.write(devAddr<<1);
-    //i2c.write(regAddr);
-    //for(int i = 0; i < length; i++) {
-    //    i2c.write(data[i]);
-    //}
-    //i2c.stop();
     char* mem = NULL;
-    mem = allocbuffer();//(char*)malloc(length+1);
+    mem = allocbuffer();
     *mem = regAddr;
     memcpy(mem+1, data, length);
     
-    i2c.write(devAddr, mem, length+1, &writefinhdl, mem);
+    i2c.write(devAddr, mem, length+1, &writefinhdl, this);
     return true;
 }
 
 char *I2Cdev::allocbuffer(){
     char *buff = (char *)pool.alloc();
+    while (buff==NULL) buff = (char *)pool.alloc();
     queue.put(buff);
     return buff;
 }
 
 void I2Cdev::freebuffer(){
     osEvent evt = queue.get(0);
-    pool.free((char(*)[20])evt.value.p);
+    pool.free((char(*)[14])evt.value.p);
 }
 
 bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data)