/*********************************************************************************************************************
* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
*
* ļ TC264 Դһ
*
* TC264 Դ 
* Ըᷢ GPLGNU General Public License GNUͨù֤
*  GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸
*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
*
* ӦյԴͬʱյһ GPL ĸ
* ûУ<https://www.gnu.org/licenses/>
*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
* ֤ libraries ļ ļµ LICENSE ļ
* ӭλʹò ޸ʱ뱣ɿƼİȨ
*
* ļ          zf_device_mpu6050
* ˾          ɶɿƼ޹˾
* 汾Ϣ          鿴 libraries/doc ļ version ļ 汾˵
*           ADS v1.9.4
* ƽ̨          TC264D
*           https://seekfree.taobao.com/
*
* ޸ļ¼
*                               ע
* 2022-09-15       pudding            first version
* 2023-04-28       pudding            ע˵
********************************************************************************************************************/
/*********************************************************************************************************************
* ߶壺
*                  ------------------------------------
*                  ģܽ             Ƭܽ
*                   IIC ͨŶӦϵ
*                  SCL                鿴 zf_device_mpu6050.h  MPU6050_SOFT_IIC_SCL 궨
*                  SDA                鿴 zf_device_mpu6050.h  MPU6050_SOFT_IIC_SDA 궨
*                  VCC                3.3VԴ
*                  GND                Դ
*                  
*
*                  Ӳ IIC ͨӦϵ
*                  SCL                鿴 zf_device_mpu6050.h  MPU6050_IIC_SCL 궨
*                  SDA                鿴 zf_device_mpu6050.h  MPU6050_IIC_SDA 궨
*                  VCC                3.3VԴ
*                  GND                Դ
*                  
*                  ------------------------------------
********************************************************************************************************************/

#ifndef _zf_device_mpu6050_h_
#define _zf_device_mpu6050_h_

#include "zf_common_typedef.h"

//================================================ MPU6050 ================================================
#define MPU6050_USE_SOFT_IIC        (1)                                         // Ĭʹ IIC ʽ ʹ IIC ʽ
#if MPU6050_USE_SOFT_IIC                                                        //  ɫĲȷ ɫҵľûõ
//==================================================== IIC ====================================================
#define MPU6050_SOFT_IIC_DELAY      (59 )                                       //  IIC ʱʱ ֵԽС IIC ͨԽ
#define MPU6050_SCL_PIN             (P20_11)                                    //  IIC SCL   MPU6050  SCL 
#define MPU6050_SDA_PIN             (P20_14)                                    //  IIC SDA   MPU6050  SDA 
//==================================================== IIC ====================================================
#else
#error "ݲ֧ӲIICͨѶ"
#endif

#define MPU6050_TIMEOUT_COUNT       (0x00FF)                                    // MPU6050 ʱ
//================================================ MPU6050 ================================================


//================================================ MPU6050 ڲַ================================================
#define MPU6050_DEV_ADDR            (0xD0>>1)                                   // IICдʱĵַֽݣ+1Ϊȡ

#define MPU6050_SMPLRT_DIV          (0x19)                                      // ǲʣֵ0x07(125Hz)
#define MPU6050_CONFIG              (0x1A)                                      // ͨ˲Ƶʣֵ0x06(5Hz)
#define MPU6050_GYRO_CONFIG         (0x1B)                                      // Լ켰Χֵ0x18(Լ죬2000deg/s)
#define MPU6050_ACCEL_CONFIG        (0x1C)                                      // ټԼ졢Χͨ˲Ƶʣֵ0x01(Լ죬2G5Hz)
#define MPU6050_INT_PIN_CFG         (0x37)                                      // 6050I2CΪֱͨģʽĴ
#define MPU6050_ACCEL_XOUT_H        (0x3B)
#define MPU6050_GYRO_XOUT_H         (0x43)
#define MPU6050_USER_CONTROL        (0x6A)                                      // ر6050ԸI2C豸Ŀ
#define MPU6050_PWR_MGMT_1          (0x6B)                                      // Դֵ0x00()
#define MPU6050_WHO_AM_I            (0x75)                                      // IICַĴ(Ĭֵ0x68ֻ)

#define MPU6050_ACC_SAMPLE          (0x10)                                      // ٶȼ
// Ϊ:0x00 Ϊ:250 dps     ȡݳ131.2         תΪλݣλΪ/s
// Ϊ:0x08 Ϊ:500 dps     ȡݳ65.6          תΪλݣλΪ/s
// Ϊ:0x10 Ϊ:1000dps     ȡݳ32.8          תΪλݣλΪ/s
// Ϊ:0x18 Ϊ:2000dps     ȡݳ16.4          תΪλݣλΪ/s

#define MPU6050_GYR_SAMPLE          (0x18)                                      // 
// Ϊ:0x00 Ϊ:250 dps     ȡݳ131.2         תΪλݣλΪ/s
// Ϊ:0x08 Ϊ:500 dps     ȡݳ65.6          תΪλݣλΪ/s
// Ϊ:0x10 Ϊ:1000dps     ȡݳ32.8          תΪλݣλΪ/s
// Ϊ:0x18 Ϊ:2000dps     ȡݳ16.4          תΪλݣλΪ/s

//================================================ MPU6050 ڲַ================================================


//================================================ MPU6050 ȫֱ================================================
extern int16 mpu6050_gyro_x, mpu6050_gyro_y, mpu6050_gyro_z;                    //      gyro ()
extern int16 mpu6050_acc_x,  mpu6050_acc_y,  mpu6050_acc_z;                     // ٶȼ    acc (accelerometer ٶȼ)
//================================================ MPU6050 ȫֱ================================================


//================================================ MPU6050 ================================================
void    mpu6050_get_acc             (void);                                     // ȡ MPU6050 ٶȼ
void    mpu6050_get_gyro            (void);                                     // ȡ MPU6050 
float   mpu6050_acc_transition      (int16 acc_value);                          //    MPU6050 ٶȼתΪʵ
float   mpu6050_gyro_transition     (int16 gyro_value);                         //    MPU6050 תΪʵ
uint8   mpu6050_init                (void);                                     // ʼ MPU6050
//================================================ MPU6050 ================================================

#endif
