GeekIMU/2.Firmware/ICM42688P_HAL/Core/Inc/icm42688p.h

564 lines
25 KiB
C
Raw Blame History

#ifndef __ICM42688P_H__
#define __ICM42688P_H__
#include "spi.h"
#include "gpio.h"
#include "public_data.h"
#include "communicate.h"
#define SPI_CS_Enable() HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_RESET)
#define SPI_CS_Disable() HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_SET)
// expected value in UB0_REG_WHO_AM_I reg
#define WHO_AM_I 0x47
// Accesible from all user banks
#define REG_BANK_SEL 0x76
// User Bank 0
#define UB0_REG_DEVICE_CONFIG 0x11
// break
#define UB0_REG_DRIVE_CONFIG 0x13
#define UB0_REG_INT_CONFIG 0x14
// break
#define UB0_REG_FIFO_CONFIG 0x16
// break
#define UB0_REG_TEMP_DATA1 0x1D
#define UB0_REG_TEMP_DATA0 0x1E
#define UB0_REG_ACCEL_DATA_X1 0x1F
#define UB0_REG_ACCEL_DATA_X0 0x20
#define UB0_REG_ACCEL_DATA_Y1 0x21
#define UB0_REG_ACCEL_DATA_Y0 0x22
#define UB0_REG_ACCEL_DATA_Z1 0x23
#define UB0_REG_ACCEL_DATA_Z0 0x24
#define UB0_REG_GYRO_DATA_X1 0x25
#define UB0_REG_GYRO_DATA_X0 0x26
#define UB0_REG_GYRO_DATA_Y1 0x27
#define UB0_REG_GYRO_DATA_Y0 0x28
#define UB0_REG_GYRO_DATA_Z1 0x29
#define UB0_REG_GYRO_DATA_Z0 0x2A
#define UB0_REG_TMST_FSYNCH 0x2B
#define UB0_REG_TMST_FSYNCL 0x2C
#define UB0_REG_INT_STATUS 0x2D
#define UB0_REG_FIFO_COUNTH 0x2E
#define UB0_REG_FIFO_COUNTL 0x2F
#define UB0_REG_FIFO_DATA 0x30
#define UB0_REG_APEX_DATA0 0x31
#define UB0_REG_APEX_DATA1 0x32
#define UB0_REG_APEX_DATA2 0x33
#define UB0_REG_APEX_DATA3 0x34
#define UB0_REG_APEX_DATA4 0x35
#define UB0_REG_APEX_DATA5 0x36
#define UB0_REG_INT_STATUS2 0x37
#define UB0_REG_INT_STATUS3 0x38
// break
#define UB0_REG_SIGNAL_PATH_RESET 0x4B
#define UB0_REG_INTF_CONFIG0 0x4C
#define UB0_REG_INTF_CONFIG1 0x4D
#define UB0_REG_PWR_MGMT0 0x4E
#define UB0_REG_GYRO_CONFIG0 0x4F
#define UB0_REG_ACCEL_CONFIG0 0x50
#define UB0_REG_GYRO_CONFIG1 0x51
#define UB0_REG_GYRO_ACCEL_CONFIG0 0x52
#define UB0_REG_ACCEL_CONFIG1 0x53
#define UB0_REG_TMST_CONFIG 0x54
// break
#define UB0_REG_APEX_CONFIG0 0x56
#define UB0_REG_SMD_CONFIG 0x57
// break
#define UB0_REG_FIFO_CONFIG1 0x5F
#define UB0_REG_FIFO_CONFIG2 0x60
#define UB0_REG_FIFO_CONFIG3 0x61
#define UB0_REG_FSYNC_CONFIG 0x62
#define UB0_REG_INT_CONFIG0 0x63
#define UB0_REG_INT_CONFIG1 0x64
#define UB0_REG_INT_SOURCE0 0x65
#define UB0_REG_INT_SOURCE1 0x66
// break
#define UB0_REG_INT_SOURCE3 0x68
#define UB0_REG_INT_SOURCE4 0x69
// break
#define UB0_REG_FIFO_LOST_PKT0 0x6C
#define UB0_REG_FIFO_LOST_PKT1 0x6D
// break
#define UB0_REG_SELF_TEST_CONFIG 0x70
// break
#define UB0_REG_WHO_AM_I 0x75
// User Bank 1
#define UB1_REG_SENSOR_CONFIG0 0x03
// break
#define UB1_REG_GYRO_CONFIG_STATIC2 0x0B
#define UB1_REG_GYRO_CONFIG_STATIC3 0x0C
#define UB1_REG_GYRO_CONFIG_STATIC4 0x0D
#define UB1_REG_GYRO_CONFIG_STATIC5 0x0E
#define UB1_REG_GYRO_CONFIG_STATIC6 0x0F
#define UB1_REG_GYRO_CONFIG_STATIC7 0x10
#define UB1_REG_GYRO_CONFIG_STATIC8 0x11
#define UB1_REG_GYRO_CONFIG_STATIC9 0x12
#define UB1_REG_GYRO_CONFIG_STATIC10 0x13
// break
#define UB1_REG_XG_ST_DATA 0x5F
#define UB1_REG_YG_ST_DATA 0x60
#define UB1_REG_ZG_ST_DATA 0x61
#define UB1_REG_TMSTVAL0 0x62
#define UB1_REG_TMSTVAL1 0x63
#define UB1_REG_TMSTVAL2 0x64
// break
#define UB1_REG_INTF_CONFIG4 0x7A
#define UB1_REG_INTF_CONFIG5 0x7B
#define UB1_REG_INTF_CONFIG6 0x7C
// User Bank 2
#define UB2_REG_ACCEL_CONFIG_STATIC2 0x03
#define UB2_REG_ACCEL_CONFIG_STATIC3 0x04
#define UB2_REG_ACCEL_CONFIG_STATIC4 0x05
// break
#define UB2_REG_XA_ST_DATA 0x3B
#define UB2_REG_YA_ST_DATA 0x3C
#define UB2_REG_ZA_ST_DATA 0x3D
// User Bank 4
#define UB4_REG_APEX_CONFIG1 0x40
#define UB4_REG_APEX_CONFIG2 0x41
#define UB4_REG_APEX_CONFIG3 0x42
#define UB4_REG_APEX_CONFIG4 0x43
#define UB4_REG_APEX_CONFIG5 0x44
#define UB4_REG_APEX_CONFIG6 0x45
#define UB4_REG_APEX_CONFIG7 0x46
#define UB4_REG_APEX_CONFIG8 0x47
#define UB4_REG_APEX_CONFIG9 0x48
// break
#define UB4_REG_ACCEL_WOM_X_THR 0x4A
#define UB4_REG_ACCEL_WOM_Y_THR 0x4B
#define UB4_REG_ACCEL_WOM_Z_THR 0x4C
#define UB4_REG_INT_SOURCE6 0x4D
#define UB4_REG_INT_SOURCE7 0x4E
#define UB4_REG_INT_SOURCE8 0x4F
#define UB4_REG_INT_SOURCE9 0x50
#define UB4_REG_INT_SOURCE10 0x51
// break
#define UB4_REG_OFFSET_USER0 0x77
#define UB4_REG_OFFSET_USER1 0x78
#define UB4_REG_OFFSET_USER2 0x79
#define UB4_REG_OFFSET_USER3 0x7A
#define UB4_REG_OFFSET_USER4 0x7B
#define UB4_REG_OFFSET_USER5 0x7C
#define UB4_REG_OFFSET_USER6 0x7D
#define UB4_REG_OFFSET_USER7 0x7E
#define UB4_REG_OFFSET_USER8 0x7F
// BANK 1
// #define GYRO_CONFIG_STATIC2 0x0B
#define GYRO_NF_ENABLE 0x00
#define GYRO_NF_DISABLE 0x01
#define GYRO_AAF_ENABLE 0x00
#define GYRO_AAF_DISABLE 0x02
// BANK 2
// #define ACCEL_CONFIG_STATIC2 0x03
#define ACCEL_AAF_ENABLE 0x00
#define ACCEL_AAF_DISABLE 0x01
#define gyrX() _gyr[0]
#define gyrY() _gyr[1]
#define gyrZ() _gyr[2]
#define gyrX1() _gyr1[0]
#define gyrY1() _gyr1[1]
#define gyrZ1() _gyr1[2]
#define accX() _acc[0]
#define accY() _acc[1]
#define accZ() _acc[2]
#define accX1() _acc1[0]
#define accY1() _acc1[1]
#define accZ1() _acc1[2]
#define X_AXIS 0
#define Y_AXIS 2
#define Z_AXIS 4
#define GYRO 0
#define ACCEL 1
#define ALL 5
#define FSR_0 0
#define FSR_1 1
#define FSR_2 2
#define FSR_3 3
#define FSR_4 4
#define FSR_5 5
#define FSR_6 6
#define FSR_7 7
#define ODR_32KHZ 1
#define ODR_16KHZ 2
#define ODR_8KHZ 3
#define ODR_4KHZ 4
#define ODR_2KHZ 5
#define ODR_1KHZ 6
#define ODR_200HZ 7
#define ODR_100HZ 8
#define ODR_50HZ 9
#define ODR_25KHZ 10
#define ODR_12_5KHZ 11
#define ODR_6_25KHZ 12
#define ODR_3_125HZ 13
#define ODR_1_5625HZ 14
#define ODR_500HZ 15
/**
* @struct sAccelConfig0_t
* @brief Register:Accel_Config0
* @n -------------------------------------------------------------------------------------------------------------------------------------- -------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | ACCEL_FS_SEL | Reserved | ACCEL_ODR |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n ACCEL_FS_SEL :Full scale select for accelerometer UI interface output
* @n 000: <20><>16g (default)
* @n 001: <20><>8g
* @n 010: <20><>4g
* @n 011: <20><>2g
* @n 100: Reserved
* @n 101: Reserved
* @n 110: Reserved
* @n 111: Reserved
* @n ACCEL_ODR :Accelerometer ODR selection for UI interface output
* @n 0000: Reserved
* @n 0001: 32kHz (LN mode)
* @n 0010: 16kHz (LN mode)
* @n 0011: 8kHz (LN mode)
* @n 0100: 4kHz (LN mode)
* @n 0101: 2kHz (LN mode)
* @n 0110: 1kHz (LN mode) (default)
* @n 0111: 200Hz (LP or LN mode)
* @n 1000: 100Hz (LP or LN mode)
* @n 1001: 50Hz (LP or LN mode)
* @n 1010: 25Hz (LP or LN mode)
* @n 1011: 12.5Hz (LP or LN mode)
* @n 1100: 6.25Hz (LP mode)
* @n 1101: 3.125Hz (LP mode)
* @n 1110: 1.5625Hz (LP mode)
* @n 1111: 500Hz (LP or LN mode)
*/
typedef struct {
uint8_t accelODR: 4;
uint8_t reserved: 1;
uint8_t accelFsSel: 3;
} __attribute__ ((packed)) sAccelConfig0_t;
/**
* @struct sGyroConfig0_t
* @brief Register:Gyro_Config0
* @n -------------------------------------------------------------------------------------------------------------------------------------- -------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | GYRO_FS_SEL | Reserved | GYRO_ODR |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n GYRO_FS_SEL : Full scale select for gyroscope UI interface output
* @n 000: <20><>2000dps (default)
* @n 001: <20><>1000dps
* @n 010: <20><>500dps
* @n 011: <20><>250dps
* @n 100: <20><>125dps
* @n 101: <20><>62.5dps
* @n 110: <20><>31.25dps
* @n 111: <20><>15.625dps
* @n GYRO_ODR :Gyroscope ODR selection for UI interface output
* @n 0000: Reserved
* @n 0001: 32kHz
* @n 0010: 16kHz
* @n 0011: 8kHz
* @n 0100: 4kHz
* @n 0101: 2kHz
* @n 0110: 1kHz (default)
* @n 0111: 200Hz
* @n 1000: 100Hz
* @n 1001: 50Hz
* @n 1010: 25Hz
* @n 1011: 12.5Hz
* @n 1100: Reserved
* @n 1101: Reserved
* @n 1110: Reserved
* @n 1111: 500Hz
*/
typedef struct {
uint8_t gyroODR: 4;
uint8_t reserved: 1;
uint8_t gyroFsSel: 3;
} __attribute__ ((packed)) sGyroConfig0_t;
/**
* @struct sAccelConfig1_t
* @brief Register:Accel_Config1
* @n -------------------------------------------------------------------------------------------------------------------------------------- -------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | Reserved | ACCEL_UI_FILT_ORD | ACCEL_DEC2_M2_ORD | Reserved |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n ACCEL_UI_FILT_ORD : Selects order of ACCEL UI filter
* @n 00: 1st Order
* @n 01: 2nd Order
* @n 10: 3rd Order
* @n 11: Reserved
* @n ACCEL_DEC2_M2_ORD : Order of Accelerometer DEC2_M2 filter
* @n 00: Reserved
* @n 01: Reserved
* @n 10: 3rd order
* @n 11: Reserved
*/
typedef struct {
uint8_t reserved: 1;
uint8_t accelDec2M2ORD: 2;
uint8_t accelUIFiltORD: 2;
uint8_t reserved2: 3;
} __attribute__ ((packed)) sAccelConfig1_t;
/**
* @struct sGyroAccelConfig0_t
* @brief Register:Gyro_Accel_Config0
* @n -------------------------------------------------------------------------------------------------------------------------------------- -------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | ACCEL_UI_FILT_BW | GYRO_UI_FILT_BW |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n ACCEL_UI_FILT_BW : Bandwidth for Accel LPF
* @n LN Mode:
* @n 0 BW=ODR/2
* @n 1 BW=max(400Hz, ODR)/4 (default)
* @n 2 BW=max(400Hz, ODR)/5
* @n 3 BW=max(400Hz, ODR)/8
* @n 4 BW=max(400Hz, ODR)/10
* @n 5 BW=max(400Hz, ODR)/16
* @n 6 BW=max(400Hz, ODR)/20
* @n 7 BW=max(400Hz, ODR)/40
* @n 8 to 13: Reserved
* @n 14 Low Latency option: Trivial decimation @ ODR of Dec2 filter output. Dec2
* @n runs at max(400Hz, ODR)
* @n 15 Low Latency option: Trivial decimation @ ODR of Dec2 filter output. Dec2
* @n runs at max(200Hz, 8*ODR)
* @n LP Mode:
* @n 0 Reserved
* @n 1 1x AVG filter (default)
* @n 2 to 5 Reserved
* @n 6 16x AVG filter
* @n 7 to 15 Reserved
* @n GYRO_UI_FILT_BW :Bandwidth for Gyro LPF
* @n LN Mode:
* @n 0 BW=ODR/2
* @n 1 BW=max(400Hz, ODR)/4 (default)
* @n 2 BW=max(400Hz, ODR)/5
* @n 3 BW=max(400Hz, ODR)/8
* @n 4 BW=max(400Hz, ODR)/10
* @n 5 BW=max(400Hz, ODR)/16
* @n 6 BW=max(400Hz, ODR)/20
* @n 7 BW=max(400Hz, ODR)/40
* @n 8 to 13: Reserved
* @n 14 Low Latency option: Trivial decimation @ ODR of Dec2 filter output. Dec2 runs at max(400Hz, ODR)
* @n 15 Low Latency option: Trivial decimation @ ODR of Dec2 filter output. Dec2 runs at max(200Hz, 8*ODR)
*/
typedef struct {
uint8_t gyroUIFiltBW: 4;
uint8_t accelUIFiltBW: 4;
} __attribute__ ((packed)) sGyroAccelConfig0_t;
/**
* @struct sGyroConfig1_t
* @brief Register:Gyro_Config1
* @n -------------------------------------------------------------------------------------------------------------------------------------- -------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | TEMP_FILT_BW | reserved | GYRO_UI_FILT_ORD | GYRO_DEC2_M2_ORD |
* @n ----------------------------------------------------------------------------------------------------------------------------------------------------------
* @n TEMP_FILT_BW : Set the bandwidth of the temperature signal DLPF
* @n 000: DLPF BW = 4000Hz; DLPF Latency = 0.125ms (default)
* @n 001: DLPF BW = 170Hz; DLPF Latency = 1ms
* @n 010: DLPF BW = 82Hz; DLPF Latency = 2ms
* @n 011: DLPF BW = 40Hz; DLPF Latency = 4ms
* @n 100: DLPF BW = 20Hz; DLPF Latency = 8ms
* @n 101: DLPF BW = 10Hz; DLPF Latency = 16ms
* @n 110: DLPF BW = 5Hz; DLPF Latency = 32ms
* @n 111: DLPF BW = 5Hz; DLPF Latency = 32ms
* @n GYRO_UI_FILT_ORD :Selects order of GYRO UI filter
* @n 00: 1st Order
* @n 01: 2nd Order
* @n 10: 3rd Order
* @n 11: Reserved
* @n GYRO_DEC2_M2_ORD :Selects order of GYRO DEC2_M2 Filter
* @n 00: Reserved
* @n 01: Reserved
* @n 10: 3rd Order
* @n 11: Reserved
*/
typedef struct {
uint8_t gyroDec2M2ODR: 2;
uint8_t gyroUIFiltODR: 2;
uint8_t reserved: 1;
uint8_t agyroFiltBW: 3;
} __attribute__ ((packed)) sGyroConfig1_t;
/**
* @struct sAccelConfigStatic4_t
* @brief Register:Accel_Config_Static4
* @n -------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | ACCEL_AAF_BITSHIFT | ACCEL_AAF_DELTSQR[11:8] |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n ACCEL_AAF_BITSHIFT Controls bandwidth of the accelerometer anti-alias filter
* @n ACCEL_AAF_DELTSQR[11:8] Controls bandwidth of the accelerometer anti-alias filter
*/
typedef struct {
uint8_t accelAAFDeltsqr: 4;
uint8_t accelAAFBitshift: 4;
} __attribute__ ((packed)) sAccelConfigStatic4_t;
/**
* @struct sAccelConfigStatic2_t
* @brief Register:Accel_Config_Static2
* @n -------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | Reserved | ACCEL_AAF_DELT | ACCEL_AAF_DIS |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n ACCEL_AAF_DELT Controls bandwidth of the accelerometer anti-alias filter
* @n ACCEL_AAF_DIS 0: Enable accelerometer anti-aliasing filter (default)
* @n 1: Disable accelerometer anti-aliasing filter
*/
typedef struct {
uint8_t accelAAFDis: 1;
uint8_t accelAAFDelt: 6;
uint8_t reserved: 1;
} __attribute__ ((packed)) sAccelConfigStatic2_t;
/**
* @struct sGyroConfigStatic2_t
* @brief Register:Gyro_Config_Static2
* @n -------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | Reserved | GYRO_AAF_DIS | GYRO_NF_DIS |
* @n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n GYRO_AAF_DIS :0: Enable gyroscope anti-aliasing filter (default)
* @n 1: Disable gyroscope anti-aliasing filter
* @n GYRO_NF_DIS 0: Enable Notch Filter (default)
* @n 1: Disable Notch Filter
*/
typedef struct {
uint8_t gyroNFDis: 1;
uint8_t gyroAAFDis: 1;
uint8_t reserved: 6;
} __attribute__ ((packed)) sGyroConfigStatic2_t;
/**
* @struct sGyroConfigStatic5_t
* @brief Register:Gyro_Config_Static5
* @n -------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | GYRO_AAF_BITSHIFT | GYRO_AAF_DELTSQR[11:8] |
* @n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n GYRO_AAF_BITSHIFT :Controls bandwidth of the gyroscope anti-alias filter
* @n GYRO_AAF_DELTSQR[11:8] Controls bandwidth of the gyroscope anti-alias filter
*/
typedef struct {
uint8_t gyroAAFDeltsqr: 4;
uint8_t gyroAAFBitshift: 4;
} __attribute__ ((packed)) sGyroConfigStatic5_t;
/**
* @struct sGyroConfigStatic9_t
* @brief Register:Gyro_Config_Static9
* @n -------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------
* @n | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n | Reserved | GYRO_Z_NF_COSWZ_SEL[0] | GYRO_Y_NF_COSWZ_SEL[0] | GYRO_X_NF_COSWZ_SEL[0] | GYRO_Z_NF_COSWZ[8] | GYRO_Y_NF_COSWZ[8] | GYRO_X_NF_COSWZ[8] |
* @n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* @n GYRO_Z_NF_COSWZ_SEL[0] :Used for gyroscope Z-axis notch filter frequency selection
* @n GYRO_Y_NF_COSWZ_SEL[0] :Used for gyroscope Y-axis notch filter frequency selection
* @n GYRO_X_NF_COSWZ_SEL[0] :Used for gyroscope X-axis notch filter frequency selection
* @n GYRO_Z_NF_COSWZ[8] :Used for gyroscope Z-axis notch filter frequency selection
* @n GYRO_Y_NF_COSWZ[8] :Used for gyroscope Y-axis notch filter frequency selection
* @n GYRO_X_NF_COSWZ[8] :Used for gyroscope X-axis notch filter frequency selection
*/
typedef struct {
uint8_t gyroNFCoswzX8: 1;
uint8_t gyroNFCoswzY8: 1;
uint8_t gyroNFCoswzZ8: 1;
uint8_t gyroNFCoswzSelX: 1;
uint8_t gyroNFCoswzSelY: 1;
uint8_t gyroNFCoswzSelZ: 1;
uint8_t reserved:2;
} __attribute__ ((packed)) sGyroConfigStatic9_t;
enum GyroFS{
dps2000 = 0x00,
dps1000 = 0x01,
dps500 = 0x02,
dps250 = 0x03,
dps125 = 0x04,
dps62_5 = 0x05,
dps31_25 = 0x06,
dps15_625 = 0x07
};
enum AccelFS{
gpm16 = 0x00,
gpm8 = 0x01,
gpm4 = 0x02,
gpm2 = 0x03
};
extern float _acc[3];
extern float _gyr[3];
extern float _acc1[3];
extern float _gyr1[3];
extern float _accelScale;
extern float _gyroScale;
int ICM42688Begin(void);
int ICM42688_readRegisters(uint8_t subAddress, uint8_t* dest,uint8_t len);
void ICM42688_Init(void);
int getAGT(void);
#endif