It is modified accordingly to work with sparkfun dmp library under mbed platform

Dependents:   MPU9250-dmp-bluepill MPU9250-dmp

Fork of MotionDriver_6_1 by Prosper Van

Committer:
mbedoguz
Date:
Thu Aug 10 14:42:44 2017 +0000
Revision:
4:f395d9cc57c4
Parent:
3:8f2d21735748
Child:
5:e4e36c17ba70
mdcompat is updated, mbed_i2c_write wasn't working properly, now it does)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedoguz 1:a6c3f8680fe0 1 #include "mdcompat.h"
mbedoguz 1:a6c3f8680fe0 2 #include "mbed.h" // must be out of the scope of extern "C"
mbedoguz 2:e7e761471df9 3 I2C imu9250(I2C_SDA,I2C_SCL);
mbedoguz 4:f395d9cc57c4 4 Ticker stamper;
mbedoguz 4:f395d9cc57c4 5 unsigned long stamper_count=0;
mbedoguz 4:f395d9cc57c4 6 void counter(){
mbedoguz 4:f395d9cc57c4 7 stamper_count++;
mbedoguz 4:f395d9cc57c4 8 }
mbedoguz 4:f395d9cc57c4 9 void stamper_init(void){
mbedoguz 4:f395d9cc57c4 10 stamper.attach(&counter,1);
mbedoguz 4:f395d9cc57c4 11 }
mbedoguz 1:a6c3f8680fe0 12 void imu_init(void){
mbedoguz 1:a6c3f8680fe0 13 imu9250.frequency(400000);
mbedoguz 1:a6c3f8680fe0 14 }
mbedoguz 1:a6c3f8680fe0 15 unsigned short constrain(
mbedoguz 1:a6c3f8680fe0 16 unsigned short x,
mbedoguz 1:a6c3f8680fe0 17 unsigned short a,
mbedoguz 1:a6c3f8680fe0 18 unsigned short b) {unsigned short result;
mbedoguz 1:a6c3f8680fe0 19 result= (x<a) ? a:x;
mbedoguz 1:a6c3f8680fe0 20 result= (x>b) ? b:x;
mbedoguz 1:a6c3f8680fe0 21 return result;
mbedoguz 1:a6c3f8680fe0 22 }
mbedoguz 1:a6c3f8680fe0 23
mbedoguz 1:a6c3f8680fe0 24 extern "C" {
mbedoguz 1:a6c3f8680fe0 25
mbedoguz 1:a6c3f8680fe0 26 int mbed_i2c_write(
mbedoguz 1:a6c3f8680fe0 27 unsigned char slave_addr,
mbedoguz 1:a6c3f8680fe0 28 unsigned char reg_addr,
mbedoguz 1:a6c3f8680fe0 29 unsigned char length,
mbedoguz 4:f395d9cc57c4 30 unsigned char *data) {
mbedoguz 4:f395d9cc57c4 31 unsigned char buffer[]={reg_addr,data[0]};
mbedoguz 4:f395d9cc57c4 32 const char* x=(const char*)buffer;//
mbedoguz 1:a6c3f8680fe0 33
mbedoguz 4:f395d9cc57c4 34 imu9250.write((int)slave_addr<<1,x,2,0);//sending register adress first to indicate which register we are writing and a write register(0)
mbedoguz 1:a6c3f8680fe0 35 return 0;
mbedoguz 1:a6c3f8680fe0 36 }
mbedoguz 1:a6c3f8680fe0 37
mbedoguz 1:a6c3f8680fe0 38 int mbed_i2c_read(
mbedoguz 1:a6c3f8680fe0 39 unsigned char slave_addr,
mbedoguz 1:a6c3f8680fe0 40 unsigned char reg_addr,
mbedoguz 1:a6c3f8680fe0 41 unsigned char length,
mbedoguz 4:f395d9cc57c4 42 unsigned char *data) {const char RA[]={reg_addr};
mbedoguz 3:8f2d21735748 43 imu9250.write((int)slave_addr<<1,RA, 1, 1); // no stop
mbedoguz 4:f395d9cc57c4 44 imu9250.read((int)slave_addr<<1,(char*)data, 1, 0);
mbedoguz 2:e7e761471df9 45 return 0;
mbedoguz 1:a6c3f8680fe0 46 }
mbedoguz 1:a6c3f8680fe0 47
mbedoguz 1:a6c3f8680fe0 48 int delay_ms(
mbedoguz 1:a6c3f8680fe0 49 unsigned long num_ms) {
mbedoguz 4:f395d9cc57c4 50 wait_ms(num_ms);
mbedoguz 1:a6c3f8680fe0 51 return 0;
mbedoguz 1:a6c3f8680fe0 52 }
mbedoguz 1:a6c3f8680fe0 53
mbedoguz 1:a6c3f8680fe0 54 int get_ms(
mbedoguz 4:f395d9cc57c4 55 unsigned long *count=(unsigned long*)malloc(sizeof(unsigned long))) {
mbedoguz 4:f395d9cc57c4 56 *count=stamper_count;
mbedoguz 1:a6c3f8680fe0 57 return 0;
mbedoguz 1:a6c3f8680fe0 58 }
mbedoguz 1:a6c3f8680fe0 59
mbedoguz 1:a6c3f8680fe0 60 int reg_int_cb(
mbedoguz 1:a6c3f8680fe0 61 void (*cb)(void),
mbedoguz 1:a6c3f8680fe0 62 unsigned char port,
mbedoguz 1:a6c3f8680fe0 63 unsigned char pin) {
mbedoguz 1:a6c3f8680fe0 64 return 0;
mbedoguz 1:a6c3f8680fe0 65 }
mbedoguz 1:a6c3f8680fe0 66
mbedoguz 1:a6c3f8680fe0 67 long labs(long x) {
mbedoguz 1:a6c3f8680fe0 68 return x > 0 ? x : -x;
mbedoguz 1:a6c3f8680fe0 69 }
mbedoguz 1:a6c3f8680fe0 70
mbedoguz 1:a6c3f8680fe0 71 float fabsf(float x) {
mbedoguz 1:a6c3f8680fe0 72 return x > 0 ? x : -x;
mbedoguz 1:a6c3f8680fe0 73 }
mbedoguz 1:a6c3f8680fe0 74
mbedoguz 1:a6c3f8680fe0 75 int min(int a, int b) {
mbedoguz 1:a6c3f8680fe0 76 return a > b ? b : a;
mbedoguz 1:a6c3f8680fe0 77 }
mbedoguz 1:a6c3f8680fe0 78
mbedoguz 1:a6c3f8680fe0 79 };