ICM20648 - 6-axis Motion Sensor Driver

Detailed Description

Driver for the Invensense ICM20648 6-axis motion sensor.

Functions

uint32_t ICM20648_accelBandwidthSet (uint8_t accelBw)
Sets the bandwidth of the accelerometer.
uint32_t ICM20648_accelDataRead (float *accel)
Reads the raw acceleration value and converts to g value based on the actual resolution.
uint32_t ICM20648_accelFullscaleSet (uint8_t accelFs)
Sets the full scale value of the accelerometer.
uint32_t ICM20648_accelGyroCalibrate (float *accelBiasScaled, float *gyroBiasScaled)
Accelerometer and gyroscope calibration function. Reads the gyroscope and accelerometer values while the device is at rest and in level. The resulting values are loaded to the accel and gyro bias registers to cancel the static offset error.
uint32_t ICM20648_accelResolutionGet (float *accelRes)
Gets the actual resolution of the accelerometer.
float ICM20648_accelSampleRateSet (float sampleRate)
Sets the sample rate of the gyroscope.
void ICM20648_bankSelect (uint8_t bank)
Select the desired register bank.
uint32_t ICM20648_cycleModeEnable (bool enable)
Enables or disables the cycle mode operation of the accel and gyro.
uint32_t ICM20648_deInit (void)
De-initializes the ICM20648 sensor by disconnecting the supply and SPI lines.
uint32_t ICM20648_getDeviceID (uint8_t *devID)
Reads the device ID of the ICM20648.
uint32_t ICM20648_gyroBandwidthSet (uint8_t gyroBw)
Sets the bandwidth of the gyroscope.
uint32_t ICM20648_gyroCalibrate (float *gyroBiasScaled)
Gyroscope calibration function. Reads the gyroscope values while the device is at rest and in level. The resulting values are loaded to the gyro bias registers to cancel the static offset error.
uint32_t ICM20648_gyroDataRead (float *gyro)
Reads the raw gyroscope value and converts to deg/sec value based on the actual resolution.
uint32_t ICM20648_gyroFullscaleSet (uint8_t gyroFs)
Sets the full scale value of the gyroscope.
uint32_t ICM20648_gyroResolutionGet (float *gyroRes)
Gets the actual resolution of the gyroscope.
float ICM20648_gyroSampleRateSet (float sampleRate)
Sets the sample rate of the accelerometer.
uint32_t ICM20648_init (void)
Initializes the ICM20648 sensor. Enables the power supply and SPI lines, sets up the host SPI controller, configures the chip control interface, clock generator and interrupt line.
uint32_t ICM20648_interruptEnable (bool dataReadyEnable, bool womEnable)
Enables or disables the interrupts in the ICM20648 chip.
uint32_t ICM20648_interruptStatusRead (uint32_t *intStatus)
Reads the interrupt status registers of the ICM20648 chip.
bool ICM20648_isDataReady (void)
Checks if new data is available for read.
uint32_t ICM20648_lowPowerModeEnter (bool enAccel, bool enGyro, bool enTemp)
Enables or disables the sensors in low power mode in the ICM20648 chip.
void ICM20648_registerRead (uint16_t addr, int numBytes, uint8_t *data)
Reads register from the ICM20648 device.
void ICM20648_registerWrite (uint16_t addr, uint8_t data)
Writes a register in the ICM20648 device.
uint32_t ICM20648_reset (void)
Performs soft reset on the ICM20648 chip.
uint32_t ICM20648_sampleRateSet (float sampleRate)
Sets the sample rate both of the accelerometer and the gyroscope.
uint32_t ICM20648_sensorEnable (bool accel, bool gyro, bool temp)
Enables or disables the sensors in the ICM20648 chip.
uint32_t ICM20648_sleepModeEnable (bool enable)
Enables or disables the sleep mode of the device.
uint32_t ICM20648_spiInit (void)
Initializes the SPI bus in order to communicate with the ICM20648.
uint32_t ICM20648_temperatureRead (float *temperature)
Reads the temperature sensor raw value and converts to Celsius.
uint32_t ICM20648_wakeOnMotionITEnable (bool enable, uint8_t womThreshold, float sampleRate)
Sets up and enables the Wake-up On Motion feature.

Error Codes

#define ICM20648_OK 0x0000
#define ICM20648_ERROR_INVALID_DEVICE_ID 0x0001

ICM20648 register banks

#define ICM20648_BANK_0 (0 << 7)
#define ICM20648_BANK_1 (1 << 7)
#define ICM20648_BANK_2 (2 << 7)
#define ICM20648_BANK_3 (3 << 7)

Register and associated bit definitions

#define ICM20648_REG_WHO_AM_I ( ICM20648_BANK_0 | 0x00)
#define ICM20648_REG_USER_CTRL ( ICM20648_BANK_0 | 0x03)
#define ICM20648_BIT_DMP_EN 0x80
#define ICM20648_BIT_FIFO_EN 0x40
#define ICM20648_BIT_I2C_MST_EN 0x20
#define ICM20648_BIT_I2C_IF_DIS 0x10
#define ICM20648_BIT_DMP_RST 0x08
#define ICM20648_BIT_DIAMOND_DMP_RST 0x04
#define ICM20648_REG_LP_CONFIG ( ICM20648_BANK_0 | 0x05)
#define ICM20648_BIT_I2C_MST_CYCLE 0x40
#define ICM20648_BIT_ACCEL_CYCLE 0x20
#define ICM20648_BIT_GYRO_CYCLE 0x10
#define ICM20648_REG_PWR_MGMT_1 ( ICM20648_BANK_0 | 0x06)
#define ICM20648_BIT_H_RESET 0x80
#define ICM20648_BIT_SLEEP 0x40
#define ICM20648_BIT_LP_EN 0x20
#define ICM20648_BIT_TEMP_DIS 0x08
#define ICM20648_BIT_CLK_PLL 0x01
#define ICM20648_REG_PWR_MGMT_2 ( ICM20648_BANK_0 | 0x07)
#define ICM20648_BIT_PWR_ACCEL_STBY 0x38
#define ICM20648_BIT_PWR_GYRO_STBY 0x07
#define ICM20648_BIT_PWR_ALL_OFF 0x7F
#define ICM20648_REG_INT_PIN_CFG ( ICM20648_BANK_0 | 0x0F)
#define ICM20648_BIT_INT_ACTL 0x80
#define ICM20648_BIT_INT_OPEN 0x40
#define ICM20648_BIT_INT_LATCH_EN 0x20
#define ICM20648_REG_INT_ENABLE ( ICM20648_BANK_0 | 0x10)
#define ICM20648_BIT_WOM_INT_EN 0x08
#define ICM20648_REG_INT_ENABLE_1 ( ICM20648_BANK_0 | 0x11)
#define ICM20648_BIT_RAW_DATA_0_RDY_EN 0x01
#define ICM20648_REG_INT_ENABLE_2 ( ICM20648_BANK_0 | 0x12)
#define ICM20648_BIT_FIFO_OVERFLOW_EN_0 0x01
#define ICM20648_REG_INT_ENABLE_3 ( ICM20648_BANK_0 | 0x13)
#define ICM20648_REG_INT_STATUS ( ICM20648_BANK_0 | 0x19)
#define ICM20648_BIT_WOM_INT 0x08
#define ICM20648_BIT_PLL_RDY 0x04
#define ICM20648_REG_INT_STATUS_1 ( ICM20648_BANK_0 | 0x1A)
#define ICM20648_BIT_RAW_DATA_0_RDY_INT 0x01
#define ICM20648_REG_INT_STATUS_2 ( ICM20648_BANK_0 | 0x1B)
#define ICM20648_REG_ACCEL_XOUT_H_SH ( ICM20648_BANK_0 | 0x2D)
#define ICM20648_REG_ACCEL_XOUT_L_SH ( ICM20648_BANK_0 | 0x2E)
#define ICM20648_REG_ACCEL_YOUT_H_SH ( ICM20648_BANK_0 | 0x2F)
#define ICM20648_REG_ACCEL_YOUT_L_SH ( ICM20648_BANK_0 | 0x30)
#define ICM20648_REG_ACCEL_ZOUT_H_SH ( ICM20648_BANK_0 | 0x31)
#define ICM20648_REG_ACCEL_ZOUT_L_SH ( ICM20648_BANK_0 | 0x32)
#define ICM20648_REG_GYRO_XOUT_H_SH ( ICM20648_BANK_0 | 0x33)
#define ICM20648_REG_GYRO_XOUT_L_SH ( ICM20648_BANK_0 | 0x34)
#define ICM20648_REG_GYRO_YOUT_H_SH ( ICM20648_BANK_0 | 0x35)
#define ICM20648_REG_GYRO_YOUT_L_SH ( ICM20648_BANK_0 | 0x36)
#define ICM20648_REG_GYRO_ZOUT_H_SH ( ICM20648_BANK_0 | 0x37)
#define ICM20648_REG_GYRO_ZOUT_L_SH ( ICM20648_BANK_0 | 0x38)
#define ICM20648_REG_TEMPERATURE_H ( ICM20648_BANK_0 | 0x39)
#define ICM20648_REG_TEMPERATURE_L ( ICM20648_BANK_0 | 0x3A)
#define ICM20648_REG_TEMP_CONFIG ( ICM20648_BANK_0 | 0x53)
#define ICM20648_REG_FIFO_EN_1 ( ICM20648_BANK_0 | 0x66)
#define ICM20648_REG_FIFO_EN_2 ( ICM20648_BANK_0 | 0x67)
#define ICM20648_BIT_ACCEL_FIFO_EN 0x10
#define ICM20648_BITS_GYRO_FIFO_EN 0x0E
#define ICM20648_REG_FIFO_RST ( ICM20648_BANK_0 | 0x68)
#define ICM20648_REG_FIFO_MODE ( ICM20648_BANK_0 | 0x69)
#define ICM20648_REG_FIFO_COUNT_H ( ICM20648_BANK_0 | 0x70)
#define ICM20648_REG_FIFO_COUNT_L ( ICM20648_BANK_0 | 0x71)
#define ICM20648_REG_FIFO_R_W ( ICM20648_BANK_0 | 0x72)
#define ICM20648_REG_DATA_RDY_STATUS ( ICM20648_BANK_0 | 0x74)
#define ICM20648_BIT_RAW_DATA_0_RDY 0x01
#define ICM20648_REG_FIFO_CFG ( ICM20648_BANK_0 | 0x76)
#define ICM20648_BIT_MULTI_FIFO_CFG 0x01
#define ICM20648_BIT_SINGLE_FIFO_CFG 0x00
#define ICM20648_REG_XA_OFFSET_H ( ICM20648_BANK_1 | 0x14)
#define ICM20648_REG_XA_OFFSET_L ( ICM20648_BANK_1 | 0x15)
#define ICM20648_REG_YA_OFFSET_H ( ICM20648_BANK_1 | 0x17)
#define ICM20648_REG_YA_OFFSET_L ( ICM20648_BANK_1 | 0x18)
#define ICM20648_REG_ZA_OFFSET_H ( ICM20648_BANK_1 | 0x1A)
#define ICM20648_REG_ZA_OFFSET_L ( ICM20648_BANK_1 | 0x1B)
#define ICM20648_REG_TIMEBASE_CORR_PLL ( ICM20648_BANK_1 | 0x28)
#define ICM20648_REG_GYRO_SMPLRT_DIV ( ICM20648_BANK_2 | 0x00)
#define ICM20648_REG_GYRO_CONFIG_1 ( ICM20648_BANK_2 | 0x01)
#define ICM20648_BIT_GYRO_FCHOICE 0x01
#define ICM20648_SHIFT_GYRO_FS_SEL 1
#define ICM20648_SHIFT_GYRO_DLPCFG 3
#define ICM20648_MASK_GYRO_FULLSCALE 0x06
#define ICM20648_MASK_GYRO_BW 0x39
#define ICM20648_GYRO_FULLSCALE_250DPS (0x00 << ICM20648_SHIFT_GYRO_FS_SEL)
#define ICM20648_GYRO_FULLSCALE_500DPS (0x01 << ICM20648_SHIFT_GYRO_FS_SEL)
#define ICM20648_GYRO_FULLSCALE_1000DPS (0x02 << ICM20648_SHIFT_GYRO_FS_SEL)
#define ICM20648_GYRO_FULLSCALE_2000DPS (0x03 << ICM20648_SHIFT_GYRO_FS_SEL)
#define ICM20648_GYRO_BW_12100HZ (0x00 << ICM20648_SHIFT_GYRO_DLPCFG)
#define ICM20648_GYRO_BW_360HZ ( (0x07 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_200HZ ( (0x00 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_150HZ ( (0x01 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_120HZ ( (0x02 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_51HZ ( (0x03 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_24HZ ( (0x04 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_12HZ ( (0x05 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_GYRO_BW_6HZ ( (0x06 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)
#define ICM20648_REG_GYRO_CONFIG_2 ( ICM20648_BANK_2 | 0x02)
#define ICM20648_BIT_GYRO_CTEN 0x38
#define ICM20648_REG_XG_OFFS_USRH ( ICM20648_BANK_2 | 0x03)
#define ICM20648_REG_XG_OFFS_USRL ( ICM20648_BANK_2 | 0x04)
#define ICM20648_REG_YG_OFFS_USRH ( ICM20648_BANK_2 | 0x05)
#define ICM20648_REG_YG_OFFS_USRL ( ICM20648_BANK_2 | 0x06)
#define ICM20648_REG_ZG_OFFS_USRH ( ICM20648_BANK_2 | 0x07)
#define ICM20648_REG_ZG_OFFS_USRL ( ICM20648_BANK_2 | 0x08)
#define ICM20648_REG_ODR_ALIGN_EN ( ICM20648_BANK_2 | 0x09)
#define ICM20648_REG_ACCEL_SMPLRT_DIV_1 ( ICM20648_BANK_2 | 0x10)
#define ICM20648_REG_ACCEL_SMPLRT_DIV_2 ( ICM20648_BANK_2 | 0x11)
#define ICM20648_REG_ACCEL_INTEL_CTRL ( ICM20648_BANK_2 | 0x12)
#define ICM20648_BIT_ACCEL_INTEL_EN 0x02
#define ICM20648_BIT_ACCEL_INTEL_MODE 0x01
#define ICM20648_REG_ACCEL_WOM_THR ( ICM20648_BANK_2 | 0x13)
#define ICM20648_REG_ACCEL_CONFIG ( ICM20648_BANK_2 | 0x14)
#define ICM20648_BIT_ACCEL_FCHOICE 0x01
#define ICM20648_SHIFT_ACCEL_FS 1
#define ICM20648_SHIFT_ACCEL_DLPCFG 3
#define ICM20648_MASK_ACCEL_FULLSCALE 0x06
#define ICM20648_MASK_ACCEL_BW 0x39
#define ICM20648_ACCEL_FULLSCALE_2G (0x00 << ICM20648_SHIFT_ACCEL_FS)
#define ICM20648_ACCEL_FULLSCALE_4G (0x01 << ICM20648_SHIFT_ACCEL_FS)
#define ICM20648_ACCEL_FULLSCALE_8G (0x02 << ICM20648_SHIFT_ACCEL_FS)
#define ICM20648_ACCEL_FULLSCALE_16G (0x03 << ICM20648_SHIFT_ACCEL_FS)
#define ICM20648_ACCEL_BW_1210HZ (0x00 << ICM20648_SHIFT_ACCEL_DLPCFG)
#define ICM20648_ACCEL_BW_470HZ ( (0x07 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_246HZ ( (0x00 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_111HZ ( (0x02 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_50HZ ( (0x03 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_24HZ ( (0x04 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_12HZ ( (0x05 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_ACCEL_BW_6HZ ( (0x06 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)
#define ICM20648_REG_ACCEL_CONFIG_2 ( ICM20648_BANK_2 | 0x15)
#define ICM20648_BIT_ACCEL_CTEN 0x1C
#define ICM20648_REG_I2C_MST_ODR_CONFIG ( ICM20648_BANK_3 | 0x00)
#define ICM20648_REG_I2C_MST_CTRL ( ICM20648_BANK_3 | 0x01)
#define ICM20648_BIT_I2C_MST_P_NSR 0x10
#define ICM20648_REG_I2C_MST_DELAY_CTRL ( ICM20648_BANK_3 | 0x02)
#define ICM20648_BIT_SLV0_DLY_EN 0x01
#define ICM20648_BIT_SLV1_DLY_EN 0x02
#define ICM20648_BIT_SLV2_DLY_EN 0x04
#define ICM20648_BIT_SLV3_DLY_EN 0x08
#define ICM20648_REG_I2C_SLV0_ADDR ( ICM20648_BANK_3 | 0x03)
#define ICM20648_REG_I2C_SLV0_REG ( ICM20648_BANK_3 | 0x04)
#define ICM20648_REG_I2C_SLV0_CTRL ( ICM20648_BANK_3 | 0x05)
#define ICM20648_REG_I2C_SLV0_DO ( ICM20648_BANK_3 | 0x06)
#define ICM20648_REG_I2C_SLV1_ADDR ( ICM20648_BANK_3 | 0x07)
#define ICM20648_REG_I2C_SLV1_REG ( ICM20648_BANK_3 | 0x08)
#define ICM20648_REG_I2C_SLV1_CTRL ( ICM20648_BANK_3 | 0x09)
#define ICM20648_REG_I2C_SLV1_DO ( ICM20648_BANK_3 | 0x0A)
#define ICM20648_REG_I2C_SLV2_ADDR ( ICM20648_BANK_3 | 0x0B)
#define ICM20648_REG_I2C_SLV2_REG ( ICM20648_BANK_3 | 0x0C)
#define ICM20648_REG_I2C_SLV2_CTRL ( ICM20648_BANK_3 | 0x0D)
#define ICM20648_REG_I2C_SLV2_DO ( ICM20648_BANK_3 | 0x0E)
#define ICM20648_REG_I2C_SLV3_ADDR ( ICM20648_BANK_3 | 0x0F)
#define ICM20648_REG_I2C_SLV3_REG ( ICM20648_BANK_3 | 0x10)
#define ICM20648_REG_I2C_SLV3_CTRL ( ICM20648_BANK_3 | 0x11)
#define ICM20648_REG_I2C_SLV3_DO ( ICM20648_BANK_3 | 0x12)
#define ICM20648_REG_I2C_SLV4_ADDR ( ICM20648_BANK_3 | 0x13)
#define ICM20648_REG_I2C_SLV4_REG ( ICM20648_BANK_3 | 0x14)
#define ICM20648_REG_I2C_SLV4_CTRL ( ICM20648_BANK_3 | 0x15)
#define ICM20648_REG_I2C_SLV4_DO ( ICM20648_BANK_3 | 0x16)
#define ICM20648_REG_I2C_SLV4_DI ( ICM20648_BANK_3 | 0x17)
#define ICM20648_BIT_I2C_SLV_EN 0x80
#define ICM20648_BIT_I2C_BYTE_SW 0x40
#define ICM20648_BIT_I2C_REG_DIS 0x20
#define ICM20648_BIT_I2C_GRP 0x10
#define ICM20648_BIT_I2C_READ 0x80
#define ICM20648_REG_BANK_SEL 0x7F
#define ICM20648_DEVICE_ID 0xE0
#define ICM20948_DEVICE_ID 0xEA

Macro Definition Documentation

#define ICM20648_ACCEL_BW_111HZ   ( (0x02 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 111 Hz

Definition at line 233 of file icm20648.h .

#define ICM20648_ACCEL_BW_1210HZ   (0x00 << ICM20648_SHIFT_ACCEL_DLPCFG)

Accel Bandwidth = 1210 Hz

Definition at line 230 of file icm20648.h .

Referenced by ICM20648_wakeOnMotionITEnable() , and IMU_config() .

#define ICM20648_ACCEL_BW_12HZ   ( (0x05 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 12 Hz

Definition at line 236 of file icm20648.h .

#define ICM20648_ACCEL_BW_246HZ   ( (0x00 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 246 Hz

Definition at line 232 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_ACCEL_BW_24HZ   ( (0x04 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 24 Hz

Definition at line 235 of file icm20648.h .

#define ICM20648_ACCEL_BW_470HZ   ( (0x07 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 470 Hz

Definition at line 231 of file icm20648.h .

#define ICM20648_ACCEL_BW_50HZ   ( (0x03 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 50 Hz

Definition at line 234 of file icm20648.h .

#define ICM20648_ACCEL_BW_6HZ   ( (0x06 << ICM20648_SHIFT_ACCEL_DLPCFG) | ICM20648_BIT_ACCEL_FCHOICE)

Accel Bandwidth = 6 Hz

Definition at line 237 of file icm20648.h .

#define ICM20648_ACCEL_FULLSCALE_16G   (0x03 << ICM20648_SHIFT_ACCEL_FS)

Accel Full Scale = 16 g

Definition at line 229 of file icm20648.h .

Referenced by ICM20648_accelResolutionGet() .

#define ICM20648_ACCEL_FULLSCALE_2G   (0x00 << ICM20648_SHIFT_ACCEL_FS)

Accel Full Scale = 2 g

Definition at line 226 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_accelResolutionGet() , ICM20648_wakeOnMotionITEnable() , and IMU_config() .

#define ICM20648_ACCEL_FULLSCALE_4G   (0x01 << ICM20648_SHIFT_ACCEL_FS)

Accel Full Scale = 4 g

Definition at line 227 of file icm20648.h .

Referenced by ICM20648_accelResolutionGet() .

#define ICM20648_ACCEL_FULLSCALE_8G   (0x02 << ICM20648_SHIFT_ACCEL_FS)

Accel Full Scale = 8 g

Definition at line 228 of file icm20648.h .

Referenced by ICM20648_accelResolutionGet() .

#define ICM20648_BANK_0   (0 << 7)

Register bank 0

Definition at line 59 of file icm20648.h .

#define ICM20648_BANK_1   (1 << 7)

Register bank 1

Definition at line 60 of file icm20648.h .

#define ICM20648_BANK_2   (2 << 7)

Register bank 2

Definition at line 61 of file icm20648.h .

#define ICM20648_BANK_3   (3 << 7)

Register bank 3

Definition at line 62 of file icm20648.h .

#define ICM20648_BIT_ACCEL_CTEN   0x1C

Accelerometer Self-Test Enable bits

Definition at line 240 of file icm20648.h .

#define ICM20648_BIT_ACCEL_CYCLE   0x20

Accelerometer cycle mode enable

Definition at line 84 of file icm20648.h .

Referenced by ICM20648_cycleModeEnable() .

#define ICM20648_BIT_ACCEL_FCHOICE   0x01

Accel Digital Low-Pass Filter enable bit

Definition at line 221 of file icm20648.h .

#define ICM20648_BIT_ACCEL_FIFO_EN   0x10

Enable writing acceleration data to FIFO bit

Definition at line 145 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_BIT_ACCEL_INTEL_EN   0x02

Wake-up On Motion enable bit

Definition at line 215 of file icm20648.h .

Referenced by ICM20648_wakeOnMotionITEnable() .

#define ICM20648_BIT_ACCEL_INTEL_MODE   0x01

WOM algorithm selection bit

Definition at line 216 of file icm20648.h .

Referenced by ICM20648_wakeOnMotionITEnable() .

#define ICM20648_BIT_CLK_PLL   0x01

Auto clock source selection setting

Definition at line 92 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_BIT_DIAMOND_DMP_RST   0x04

SRAM module reset bit

Definition at line 80 of file icm20648.h .

#define ICM20648_BIT_DMP_EN   0x80

DMP enable bit

Definition at line 75 of file icm20648.h .

#define ICM20648_BIT_DMP_RST   0x08

DMP module reset bit

Definition at line 79 of file icm20648.h .

#define ICM20648_BIT_FIFO_EN   0x40

FIFO enable bit

Definition at line 76 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_BIT_FIFO_OVERFLOW_EN_0   0x01

FIFO overflow interrupt enable bit

Definition at line 111 of file icm20648.h .

#define ICM20648_BIT_GYRO_CTEN   0x38

Gyroscope Self-Test Enable bits

Definition at line 200 of file icm20648.h .

#define ICM20648_BIT_GYRO_CYCLE   0x10

Gyroscope cycle mode enable

Definition at line 85 of file icm20648.h .

Referenced by ICM20648_cycleModeEnable() .

#define ICM20648_BIT_GYRO_FCHOICE   0x01

Gyro Digital Low-Pass Filter enable bit

Definition at line 180 of file icm20648.h .

#define ICM20648_BIT_H_RESET   0x80

Device reset bit

Definition at line 88 of file icm20648.h .

Referenced by ICM20648_reset() .

#define ICM20648_BIT_I2C_BYTE_SW   0x40

I2C Slave Byte Swap enable bit

Definition at line 283 of file icm20648.h .

#define ICM20648_BIT_I2C_GRP   0x10

I2C Slave Group bit

Definition at line 285 of file icm20648.h .

#define ICM20648_BIT_I2C_IF_DIS   0x10

Disable I2C, enable SPI bit

Definition at line 78 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_BIT_I2C_MST_CYCLE   0x40

I2C master cycle mode enable

Definition at line 83 of file icm20648.h .

#define ICM20648_BIT_I2C_MST_EN   0x20

I2C master I/F enable bit

Definition at line 77 of file icm20648.h .

#define ICM20648_BIT_I2C_MST_P_NSR   0x10

Stop between reads enabling bit

Definition at line 248 of file icm20648.h .

#define ICM20648_BIT_I2C_READ   0x80

I2C Slave R/W bit

Definition at line 286 of file icm20648.h .

#define ICM20648_BIT_I2C_REG_DIS   0x20

I2C Slave Do Not Write Register Value bit

Definition at line 284 of file icm20648.h .

#define ICM20648_BIT_I2C_SLV_EN   0x80

I2C Slave Enable bit

Definition at line 282 of file icm20648.h .

#define ICM20648_BIT_INT_ACTL   0x80

Active low setting bit

Definition at line 100 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_BIT_INT_LATCH_EN   0x20

Latch enable bit

Definition at line 102 of file icm20648.h .

#define ICM20648_BIT_INT_OPEN   0x40

Open collector onfiguration bit

Definition at line 101 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_BIT_LP_EN   0x20

Low Power feature enable bit

Definition at line 90 of file icm20648.h .

Referenced by ICM20648_lowPowerModeEnter() .

#define ICM20648_BIT_MULTI_FIFO_CFG   0x01

Interrupt status for each sensor is required

Definition at line 159 of file icm20648.h .

#define ICM20648_BIT_PLL_RDY   0x04

PLL ready interrupt occured bit

Definition at line 117 of file icm20648.h .

#define ICM20648_BIT_PWR_ACCEL_STBY   0x38

Disable accelerometer

Definition at line 95 of file icm20648.h .

Referenced by ICM20648_sensorEnable() .

#define ICM20648_BIT_PWR_ALL_OFF   0x7F

Disable both accel and gyro

Definition at line 97 of file icm20648.h .

#define ICM20648_BIT_PWR_GYRO_STBY   0x07

Disable gyroscope

Definition at line 96 of file icm20648.h .

Referenced by ICM20648_sensorEnable() .

#define ICM20648_BIT_RAW_DATA_0_RDY   0x01

Raw Data Ready bit

Definition at line 156 of file icm20648.h .

#define ICM20648_BIT_RAW_DATA_0_RDY_EN   0x01

Raw data ready interrupt enable bit

Definition at line 108 of file icm20648.h .

Referenced by ICM20648_interruptEnable() .

#define ICM20648_BIT_RAW_DATA_0_RDY_INT   0x01

Raw data ready interrupt occured bit

Definition at line 120 of file icm20648.h .

Referenced by ICM20648_isDataReady() .

#define ICM20648_BIT_SINGLE_FIFO_CFG   0x00

Interrupt status for only a single sensor is required

Definition at line 160 of file icm20648.h .

#define ICM20648_BIT_SLEEP   0x40

Sleep mode enable bit

Definition at line 89 of file icm20648.h .

Referenced by ICM20648_sleepModeEnable() .

#define ICM20648_BIT_SLV0_DLY_EN   0x01

I2C Slave0 Delay Enable bit

Definition at line 251 of file icm20648.h .

#define ICM20648_BIT_SLV1_DLY_EN   0x02

I2C Slave1 Delay Enable bit

Definition at line 252 of file icm20648.h .

#define ICM20648_BIT_SLV2_DLY_EN   0x04

I2C Slave2 Delay Enable bit

Definition at line 253 of file icm20648.h .

#define ICM20648_BIT_SLV3_DLY_EN   0x08

I2C Slave3 Delay Enable bit

Definition at line 254 of file icm20648.h .

#define ICM20648_BIT_TEMP_DIS   0x08

Temperature sensor disable bit

Definition at line 91 of file icm20648.h .

Referenced by ICM20648_sensorEnable() .

#define ICM20648_BIT_WOM_INT   0x08

Wake-up on motion interrupt occured bit

Definition at line 116 of file icm20648.h .

#define ICM20648_BIT_WOM_INT_EN   0x08

Wake-up On Motion enable bit

Definition at line 105 of file icm20648.h .

Referenced by ICM20648_interruptEnable() .

#define ICM20648_BITS_GYRO_FIFO_EN   0x0E

Enable writing gyroscope data to FIFO bit

Definition at line 146 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_DEVICE_ID   0xE0

ICM20648 Device ID value

Definition at line 291 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_ERROR_INVALID_DEVICE_ID   0x0001

Invalid device ID

Definition at line 52 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_GYRO_BW_120HZ   ( (0x02 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 120 Hz

Definition at line 193 of file icm20648.h .

#define ICM20648_GYRO_BW_12100HZ   (0x00 << ICM20648_SHIFT_GYRO_DLPCFG)

Gyro Bandwidth = 12100 Hz

Definition at line 189 of file icm20648.h .

#define ICM20648_GYRO_BW_12HZ   ( (0x05 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 12 Hz

Definition at line 196 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_GYRO_BW_150HZ   ( (0x01 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 150 Hz

Definition at line 192 of file icm20648.h .

#define ICM20648_GYRO_BW_200HZ   ( (0x00 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 200 Hz

Definition at line 191 of file icm20648.h .

#define ICM20648_GYRO_BW_24HZ   ( (0x04 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 24 Hz

Definition at line 195 of file icm20648.h .

#define ICM20648_GYRO_BW_360HZ   ( (0x07 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 360 Hz

Definition at line 190 of file icm20648.h .

#define ICM20648_GYRO_BW_51HZ   ( (0x03 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 51 Hz

Definition at line 194 of file icm20648.h .

Referenced by IMU_config() .

#define ICM20648_GYRO_BW_6HZ   ( (0x06 << ICM20648_SHIFT_GYRO_DLPCFG) | ICM20648_BIT_GYRO_FCHOICE)

Gyro Bandwidth = 6 Hz

Definition at line 197 of file icm20648.h .

#define ICM20648_GYRO_FULLSCALE_1000DPS   (0x02 << ICM20648_SHIFT_GYRO_FS_SEL)

Gyro Full Scale = 1000 deg/sec

Definition at line 187 of file icm20648.h .

Referenced by ICM20648_gyroResolutionGet() .

#define ICM20648_GYRO_FULLSCALE_2000DPS   (0x03 << ICM20648_SHIFT_GYRO_FS_SEL)

Gyro Full Scale = 2000 deg/sec

Definition at line 188 of file icm20648.h .

Referenced by ICM20648_gyroResolutionGet() .

#define ICM20648_GYRO_FULLSCALE_250DPS   (0x00 << ICM20648_SHIFT_GYRO_FS_SEL)

Gyro Full Scale = 250 deg/sec

Definition at line 185 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , ICM20648_gyroResolutionGet() , and IMU_config() .

#define ICM20648_GYRO_FULLSCALE_500DPS   (0x01 << ICM20648_SHIFT_GYRO_FS_SEL)

Gyro Full Scale = 500 deg/sec

Definition at line 186 of file icm20648.h .

Referenced by ICM20648_gyroResolutionGet() .

#define ICM20648_MASK_ACCEL_BW   0x39

Accel Bandwidth Select bitmask

Definition at line 225 of file icm20648.h .

Referenced by ICM20648_accelBandwidthSet() .

#define ICM20648_MASK_ACCEL_FULLSCALE   0x06

Accel Full Scale Select bitmask

Definition at line 224 of file icm20648.h .

Referenced by ICM20648_accelFullscaleSet() , and ICM20648_accelResolutionGet() .

#define ICM20648_MASK_GYRO_BW   0x39

Gyro Bandwidth Select bitmask

Definition at line 184 of file icm20648.h .

Referenced by ICM20648_gyroBandwidthSet() .

#define ICM20648_MASK_GYRO_FULLSCALE   0x06

Gyro Full Scale Select bitmask

Definition at line 183 of file icm20648.h .

Referenced by ICM20648_gyroFullscaleSet() , and ICM20648_gyroResolutionGet() .

#define ICM20648_REG_ACCEL_CONFIG   ( ICM20648_BANK_2 | 0x14)

Accelerometer Configuration register

Definition at line 220 of file icm20648.h .

Referenced by ICM20648_accelBandwidthSet() , ICM20648_accelFullscaleSet() , and ICM20648_accelResolutionGet() .

#define ICM20648_REG_ACCEL_CONFIG_2   ( ICM20648_BANK_2 | 0x15)

Accelerometer Configuration 2 register

Definition at line 239 of file icm20648.h .

#define ICM20648_REG_ACCEL_INTEL_CTRL   ( ICM20648_BANK_2 | 0x12)

Accelerometer Hardware Intelligence Control register

Definition at line 214 of file icm20648.h .

Referenced by ICM20648_wakeOnMotionITEnable() .

#define ICM20648_REG_ACCEL_SMPLRT_DIV_1   ( ICM20648_BANK_2 | 0x10)

Acceleration Sensor Sample Rate Divider 1 register

Definition at line 211 of file icm20648.h .

Referenced by ICM20648_accelSampleRateSet() .

#define ICM20648_REG_ACCEL_SMPLRT_DIV_2   ( ICM20648_BANK_2 | 0x11)

Acceleration Sensor Sample Rate Divider 2 register

Definition at line 212 of file icm20648.h .

Referenced by ICM20648_accelSampleRateSet() .

#define ICM20648_REG_ACCEL_WOM_THR   ( ICM20648_BANK_2 | 0x13)

Wake-up On Motion Threshold register

Definition at line 218 of file icm20648.h .

Referenced by ICM20648_wakeOnMotionITEnable() .

#define ICM20648_REG_ACCEL_XOUT_H_SH   ( ICM20648_BANK_0 | 0x2D)

Accelerometer X-axis data high byte

Definition at line 124 of file icm20648.h .

Referenced by ICM20648_accelDataRead() .

#define ICM20648_REG_ACCEL_XOUT_L_SH   ( ICM20648_BANK_0 | 0x2E)

Accelerometer X-axis data low byte

Definition at line 125 of file icm20648.h .

#define ICM20648_REG_ACCEL_YOUT_H_SH   ( ICM20648_BANK_0 | 0x2F)

Accelerometer Y-axis data high byte

Definition at line 126 of file icm20648.h .

#define ICM20648_REG_ACCEL_YOUT_L_SH   ( ICM20648_BANK_0 | 0x30)

Accelerometer Y-axis data low byte

Definition at line 127 of file icm20648.h .

#define ICM20648_REG_ACCEL_ZOUT_H_SH   ( ICM20648_BANK_0 | 0x31)

Accelerometer Z-axis data high byte

Definition at line 128 of file icm20648.h .

#define ICM20648_REG_ACCEL_ZOUT_L_SH   ( ICM20648_BANK_0 | 0x32)

Accelerometer Z-axis data low byte

Definition at line 129 of file icm20648.h .

#define ICM20648_REG_BANK_SEL   0x7F

Bank Select register

Definition at line 289 of file icm20648.h .

Referenced by ICM20648_bankSelect() .

#define ICM20648_REG_DATA_RDY_STATUS   ( ICM20648_BANK_0 | 0x74)

Data Ready Status register

Definition at line 155 of file icm20648.h .

#define ICM20648_REG_FIFO_CFG   ( ICM20648_BANK_0 | 0x76)

FIFO Configuration register

Definition at line 158 of file icm20648.h .

#define ICM20648_REG_FIFO_COUNT_H   ( ICM20648_BANK_0 | 0x70)

FIFO data count high byte

Definition at line 151 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_FIFO_COUNT_L   ( ICM20648_BANK_0 | 0x71)

FIFO data count low byte

Definition at line 152 of file icm20648.h .

#define ICM20648_REG_FIFO_EN_1   ( ICM20648_BANK_0 | 0x66)

FIFO Enable 1 register

Definition at line 142 of file icm20648.h .

#define ICM20648_REG_FIFO_EN_2   ( ICM20648_BANK_0 | 0x67)

FIFO Enable 2 register

Definition at line 144 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_FIFO_MODE   ( ICM20648_BANK_0 | 0x69)

FIFO Mode register

Definition at line 149 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_FIFO_R_W   ( ICM20648_BANK_0 | 0x72)

FIFO Read/Write register

Definition at line 153 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_FIFO_RST   ( ICM20648_BANK_0 | 0x68)

FIFO Reset register

Definition at line 148 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_GYRO_CONFIG_1   ( ICM20648_BANK_2 | 0x01)

Gyroscope Configuration 1 register

Definition at line 179 of file icm20648.h .

Referenced by ICM20648_gyroBandwidthSet() , ICM20648_gyroFullscaleSet() , and ICM20648_gyroResolutionGet() .

#define ICM20648_REG_GYRO_CONFIG_2   ( ICM20648_BANK_2 | 0x02)

Gyroscope Configuration 2 register

Definition at line 199 of file icm20648.h .

#define ICM20648_REG_GYRO_SMPLRT_DIV   ( ICM20648_BANK_2 | 0x00)

Gyroscope Sample Rate Divider regiser

Definition at line 177 of file icm20648.h .

Referenced by ICM20648_gyroSampleRateSet() .

#define ICM20648_REG_GYRO_XOUT_H_SH   ( ICM20648_BANK_0 | 0x33)

Gyroscope X-axis data high byte

Definition at line 131 of file icm20648.h .

Referenced by ICM20648_gyroDataRead() .

#define ICM20648_REG_GYRO_XOUT_L_SH   ( ICM20648_BANK_0 | 0x34)

Gyroscope X-axis data low byte

Definition at line 132 of file icm20648.h .

#define ICM20648_REG_GYRO_YOUT_H_SH   ( ICM20648_BANK_0 | 0x35)

Gyroscope Y-axis data high byte

Definition at line 133 of file icm20648.h .

#define ICM20648_REG_GYRO_YOUT_L_SH   ( ICM20648_BANK_0 | 0x36)

Gyroscope Y-axis data low byte

Definition at line 134 of file icm20648.h .

#define ICM20648_REG_GYRO_ZOUT_H_SH   ( ICM20648_BANK_0 | 0x37)

Gyroscope Z-axis data high byte

Definition at line 135 of file icm20648.h .

#define ICM20648_REG_GYRO_ZOUT_L_SH   ( ICM20648_BANK_0 | 0x38)

Gyroscope Z-axis data low byte

Definition at line 136 of file icm20648.h .

#define ICM20648_REG_I2C_MST_CTRL   ( ICM20648_BANK_3 | 0x01)

I2C Master Control register

Definition at line 247 of file icm20648.h .

#define ICM20648_REG_I2C_MST_DELAY_CTRL   ( ICM20648_BANK_3 | 0x02)

I2C Master Delay Control register

Definition at line 250 of file icm20648.h .

#define ICM20648_REG_I2C_MST_ODR_CONFIG   ( ICM20648_BANK_3 | 0x00)

I2C Master Output Data Rate Configuration register

Definition at line 245 of file icm20648.h .

#define ICM20648_REG_I2C_SLV0_ADDR   ( ICM20648_BANK_3 | 0x03)

I2C Slave0 Physical Address register

Definition at line 256 of file icm20648.h .

#define ICM20648_REG_I2C_SLV0_CTRL   ( ICM20648_BANK_3 | 0x05)

I2C Slave0 Control register

Definition at line 258 of file icm20648.h .

#define ICM20648_REG_I2C_SLV0_DO   ( ICM20648_BANK_3 | 0x06)

I2C Slave0 Data Out register

Definition at line 259 of file icm20648.h .

#define ICM20648_REG_I2C_SLV0_REG   ( ICM20648_BANK_3 | 0x04)

I2C Slave0 Register Address register

Definition at line 257 of file icm20648.h .

#define ICM20648_REG_I2C_SLV1_ADDR   ( ICM20648_BANK_3 | 0x07)

I2C Slave1 Physical Address register

Definition at line 261 of file icm20648.h .

#define ICM20648_REG_I2C_SLV1_CTRL   ( ICM20648_BANK_3 | 0x09)

I2C Slave1 Control register

Definition at line 263 of file icm20648.h .

#define ICM20648_REG_I2C_SLV1_DO   ( ICM20648_BANK_3 | 0x0A)

I2C Slave1 Data Out register

Definition at line 264 of file icm20648.h .

#define ICM20648_REG_I2C_SLV1_REG   ( ICM20648_BANK_3 | 0x08)

I2C Slave1 Register Address register

Definition at line 262 of file icm20648.h .

#define ICM20648_REG_I2C_SLV2_ADDR   ( ICM20648_BANK_3 | 0x0B)

I2C Slave2 Physical Address register

Definition at line 266 of file icm20648.h .

#define ICM20648_REG_I2C_SLV2_CTRL   ( ICM20648_BANK_3 | 0x0D)

I2C Slave2 Control register

Definition at line 268 of file icm20648.h .

#define ICM20648_REG_I2C_SLV2_DO   ( ICM20648_BANK_3 | 0x0E)

I2C Slave2 Data Out register

Definition at line 269 of file icm20648.h .

#define ICM20648_REG_I2C_SLV2_REG   ( ICM20648_BANK_3 | 0x0C)

I2C Slave2 Register Address register

Definition at line 267 of file icm20648.h .

#define ICM20648_REG_I2C_SLV3_ADDR   ( ICM20648_BANK_3 | 0x0F)

I2C Slave3 Physical Address register

Definition at line 271 of file icm20648.h .

#define ICM20648_REG_I2C_SLV3_CTRL   ( ICM20648_BANK_3 | 0x11)

I2C Slave3 Control register

Definition at line 273 of file icm20648.h .

#define ICM20648_REG_I2C_SLV3_DO   ( ICM20648_BANK_3 | 0x12)

I2C Slave3 Data Out register

Definition at line 274 of file icm20648.h .

#define ICM20648_REG_I2C_SLV3_REG   ( ICM20648_BANK_3 | 0x10)

I2C Slave3 Register Address register

Definition at line 272 of file icm20648.h .

#define ICM20648_REG_I2C_SLV4_ADDR   ( ICM20648_BANK_3 | 0x13)

I2C Slave4 Physical Address register

Definition at line 276 of file icm20648.h .

#define ICM20648_REG_I2C_SLV4_CTRL   ( ICM20648_BANK_3 | 0x15)

I2C Slave4 Control register

Definition at line 278 of file icm20648.h .

#define ICM20648_REG_I2C_SLV4_DI   ( ICM20648_BANK_3 | 0x17)

I2C Slave4 Data In register

Definition at line 280 of file icm20648.h .

#define ICM20648_REG_I2C_SLV4_DO   ( ICM20648_BANK_3 | 0x16)

I2C Slave4 Data Out register

Definition at line 279 of file icm20648.h .

#define ICM20648_REG_I2C_SLV4_REG   ( ICM20648_BANK_3 | 0x14)

I2C Slave4 Register Address register

Definition at line 277 of file icm20648.h .

#define ICM20648_REG_INT_ENABLE   ( ICM20648_BANK_0 | 0x10)

Interrupt Enable register

Definition at line 104 of file icm20648.h .

Referenced by ICM20648_interruptEnable() .

#define ICM20648_REG_INT_ENABLE_1   ( ICM20648_BANK_0 | 0x11)

Interrupt Enable 1 register

Definition at line 107 of file icm20648.h .

Referenced by ICM20648_interruptEnable() .

#define ICM20648_REG_INT_ENABLE_2   ( ICM20648_BANK_0 | 0x12)

Interrupt Enable 2 register

Definition at line 110 of file icm20648.h .

#define ICM20648_REG_INT_ENABLE_3   ( ICM20648_BANK_0 | 0x13)

Interrupt Enable 2 register

Definition at line 113 of file icm20648.h .

#define ICM20648_REG_INT_PIN_CFG   ( ICM20648_BANK_0 | 0x0F)

Interrupt Pin Configuration register

Definition at line 99 of file icm20648.h .

Referenced by ICM20648_init() .

#define ICM20648_REG_INT_STATUS   ( ICM20648_BANK_0 | 0x19)

Interrupt Status register

Definition at line 115 of file icm20648.h .

Referenced by ICM20648_interruptStatusRead() .

#define ICM20648_REG_INT_STATUS_1   ( ICM20648_BANK_0 | 0x1A)

Interrupt Status 1 register

Definition at line 119 of file icm20648.h .

Referenced by ICM20648_isDataReady() .

#define ICM20648_REG_INT_STATUS_2   ( ICM20648_BANK_0 | 0x1B)

Interrupt Status 2 register

Definition at line 122 of file icm20648.h .

#define ICM20648_REG_LP_CONFIG   ( ICM20648_BANK_0 | 0x05)

Low Power mode config register

Definition at line 82 of file icm20648.h .

Referenced by ICM20648_cycleModeEnable() .

#define ICM20648_REG_ODR_ALIGN_EN   ( ICM20648_BANK_2 | 0x09)

Output Data Rate start time alignment

Definition at line 209 of file icm20648.h .

#define ICM20648_REG_PWR_MGMT_1   ( ICM20648_BANK_0 | 0x06)

Power Management 1 register

Definition at line 87 of file icm20648.h .

Referenced by ICM20648_init() , ICM20648_lowPowerModeEnter() , ICM20648_reset() , ICM20648_sensorEnable() , and ICM20648_sleepModeEnable() .

#define ICM20648_REG_PWR_MGMT_2   ( ICM20648_BANK_0 | 0x07)

Power Management 2 register

Definition at line 94 of file icm20648.h .

Referenced by ICM20648_sensorEnable() .

#define ICM20648_REG_TEMP_CONFIG   ( ICM20648_BANK_0 | 0x53)

Temperature Configuration register

Definition at line 140 of file icm20648.h .

#define ICM20648_REG_TEMPERATURE_H   ( ICM20648_BANK_0 | 0x39)

Temperature data high byte

Definition at line 138 of file icm20648.h .

Referenced by ICM20648_temperatureRead() .

#define ICM20648_REG_TEMPERATURE_L   ( ICM20648_BANK_0 | 0x3A)

Temperature data low byte

Definition at line 139 of file icm20648.h .

#define ICM20648_REG_TIMEBASE_CORR_PLL   ( ICM20648_BANK_1 | 0x28)

PLL Timebase Correction register

Definition at line 172 of file icm20648.h .

#define ICM20648_REG_USER_CTRL   ( ICM20648_BANK_0 | 0x03)

User control register

Definition at line 74 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , and ICM20648_init() .

#define ICM20648_REG_WHO_AM_I   ( ICM20648_BANK_0 | 0x00)

Device ID register

Definition at line 72 of file icm20648.h .

Referenced by ICM20648_getDeviceID() , and ICM20648_init() .

#define ICM20648_REG_XA_OFFSET_H   ( ICM20648_BANK_1 | 0x14)

Acceleration sensor X-axis offset cancellation high byte

Definition at line 165 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_XA_OFFSET_L   ( ICM20648_BANK_1 | 0x15)

Acceleration sensor X-axis offset cancellation low byte

Definition at line 166 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_XG_OFFS_USRH   ( ICM20648_BANK_2 | 0x03)

Gyroscope sensor X-axis offset cancellation high byte

Definition at line 202 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_XG_OFFS_USRL   ( ICM20648_BANK_2 | 0x04)

Gyroscope sensor X-axis offset cancellation low byte

Definition at line 203 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_YA_OFFSET_H   ( ICM20648_BANK_1 | 0x17)

Acceleration sensor Y-axis offset cancellation high byte

Definition at line 167 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_YA_OFFSET_L   ( ICM20648_BANK_1 | 0x18)

Acceleration sensor Y-axis offset cancellation low byte

Definition at line 168 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_YG_OFFS_USRH   ( ICM20648_BANK_2 | 0x05)

Gyroscope sensor Y-axis offset cancellation high byte

Definition at line 204 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_YG_OFFS_USRL   ( ICM20648_BANK_2 | 0x06)

Gyroscope sensor Y-axis offset cancellation low byte

Definition at line 205 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_ZA_OFFSET_H   ( ICM20648_BANK_1 | 0x1A)

Acceleration sensor Z-axis offset cancellation high byte

Definition at line 169 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_ZA_OFFSET_L   ( ICM20648_BANK_1 | 0x1B)

Acceleration sensor Z-axis offset cancellation low byte

Definition at line 170 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() .

#define ICM20648_REG_ZG_OFFS_USRH   ( ICM20648_BANK_2 | 0x07)

Gyroscope sensor Z-axis offset cancellation high byte

Definition at line 206 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_REG_ZG_OFFS_USRL   ( ICM20648_BANK_2 | 0x08)

Gyroscope sensor Z-axis offset cancellation low byte

Definition at line 207 of file icm20648.h .

Referenced by ICM20648_accelGyroCalibrate() , and ICM20648_gyroCalibrate() .

#define ICM20648_SHIFT_ACCEL_DLPCFG   3

Accel DLPF Config bit shift

Definition at line 223 of file icm20648.h .

#define ICM20648_SHIFT_ACCEL_FS   1

Accel Full Scale Select bit shift

Definition at line 222 of file icm20648.h .

#define ICM20648_SHIFT_GYRO_DLPCFG   3

Gyro DLPF Config bit shift

Definition at line 182 of file icm20648.h .

#define ICM20648_SHIFT_GYRO_FS_SEL   1

Gyro Full Scale Select bit shift

Definition at line 181 of file icm20648.h .

#define ICM20948_DEVICE_ID   0xEA

ICM20948 Device ID value

Definition at line 292 of file icm20648.h .

Referenced by ICM20648_init() .

Function Documentation

uint32_t ICM20648_accelBandwidthSet ( uint8_t accelBw )

Sets the bandwidth of the accelerometer.

Parameters
[in] accelBw The desired bandwidth value. Use the ICM20648_ACCEL_BW_yHZ macros, which are defined in the icm20648.h file. The value of y can be 6, 12, 24, 50, 111, 246, 470 or 1210.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 476 of file icm20648.c .

References ICM20648_MASK_ACCEL_BW , ICM20648_OK , ICM20648_REG_ACCEL_CONFIG , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_wakeOnMotionITEnable() , and IMU_config() .

uint32_t ICM20648_accelDataRead ( float * accel )

Reads the raw acceleration value and converts to g value based on the actual resolution.

Parameters
[out] accel A 3-element array of float numbers containing the acceleration values for the x, y and z axes in g units.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 152 of file icm20648.c .

References ICM20648_accelResolutionGet() , ICM20648_OK , ICM20648_REG_ACCEL_XOUT_H_SH , and ICM20648_registerRead() .

Referenced by IMU_getAccelerometerData() .

uint32_t ICM20648_accelFullscaleSet ( uint8_t accelFs )

Sets the full scale value of the accelerometer.

Parameters
[in] accelFs The desired full scale value. Use the ICM20648_ACCEL_FULLSCALE_xG macros, which are defined in the icm20648.h file. The value of x can be 2, 4, 8 or 16.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 302 of file icm20648.c .

References ICM20648_MASK_ACCEL_FULLSCALE , ICM20648_OK , ICM20648_REG_ACCEL_CONFIG , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_wakeOnMotionITEnable() , and IMU_config() .

uint32_t ICM20648_accelGyroCalibrate ( float * accelBiasScaled,
float * gyroBiasScaled
)
uint32_t ICM20648_accelResolutionGet ( float * accelRes )

Gets the actual resolution of the accelerometer.

Parameters
[out] accelRes The resolution in g/bit units
Returns
Returns zero on OK, non-zero otherwise

Definition at line 220 of file icm20648.c .

References ICM20648_ACCEL_FULLSCALE_16G , ICM20648_ACCEL_FULLSCALE_2G , ICM20648_ACCEL_FULLSCALE_4G , ICM20648_ACCEL_FULLSCALE_8G , ICM20648_MASK_ACCEL_FULLSCALE , ICM20648_OK , ICM20648_REG_ACCEL_CONFIG , and ICM20648_registerRead() .

Referenced by ICM20648_accelDataRead() , and ICM20648_accelGyroCalibrate() .

float ICM20648_accelSampleRateSet ( float sampleRate )

Sets the sample rate of the gyroscope.

Parameters
[in] sampleRate The desired sample rate in Hz
Returns
The actual sample rate. May be different from the desired value because of the finite and discrete number of divider settings

Definition at line 409 of file icm20648.c .

References ICM20648_REG_ACCEL_SMPLRT_DIV_1 , ICM20648_REG_ACCEL_SMPLRT_DIV_2 , and ICM20648_registerWrite() .

Referenced by ICM20648_sampleRateSet() , and IMU_config() .

void ICM20648_bankSelect ( uint8_t bank )

Select the desired register bank.

Parameters
[in] bank The address of the register bank (0..3)
Returns
None

Definition at line 1339 of file icm20648.c .

References ICM20648_REG_BANK_SEL , USART_Rx() , and USART_Tx() .

Referenced by ICM20648_registerRead() , and ICM20648_registerWrite() .

uint32_t ICM20648_cycleModeEnable ( bool enable )

Enables or disables the cycle mode operation of the accel and gyro.

Parameters
[in] enable If true both the accel and gyro sensors will operate in cycle mode. If false the senors working in continuous mode.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 531 of file icm20648.c .

References ICM20648_BIT_ACCEL_CYCLE , ICM20648_BIT_GYRO_CYCLE , ICM20648_OK , ICM20648_REG_LP_CONFIG , and ICM20648_registerWrite() .

Referenced by ICM20648_lowPowerModeEnter() , and ICM20648_wakeOnMotionITEnable() .

uint32_t ICM20648_deInit ( void )

De-initializes the ICM20648 sensor by disconnecting the supply and SPI lines.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 114 of file icm20648.c .

References BOARD_imuEnable() , and ICM20648_OK .

Referenced by IMU_deInit() , and IMU_init() .

uint32_t ICM20648_getDeviceID ( uint8_t * devID )

Reads the device ID of the ICM20648.

Parameters
[out] devID The ID of the device read from teh WHO_AM_I register. Expected value? 0xE0
Returns
Returns zero on OK, non-zero otherwise

Definition at line 1196 of file icm20648.c .

References ICM20648_OK , ICM20648_REG_WHO_AM_I , and ICM20648_registerRead() .

Referenced by IMU_init() .

uint32_t ICM20648_gyroBandwidthSet ( uint8_t gyroBw )

Sets the bandwidth of the gyroscope.

Parameters
[in] gyroBw The desired bandwidth value. Use the ICM20648_GYRO_BW_xHZ macros, which are defined in the icm20648.h file. The value of x can be 6, 12, 24, 51, 120, 150, 200, 360 or 12100.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 449 of file icm20648.c .

References ICM20648_MASK_GYRO_BW , ICM20648_OK , ICM20648_REG_GYRO_CONFIG_1 , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , and IMU_config() .

uint32_t ICM20648_gyroCalibrate ( float * gyroBiasScaled )
uint32_t ICM20648_gyroDataRead ( float * gyro )

Reads the raw gyroscope value and converts to deg/sec value based on the actual resolution.

Parameters
[out] gyro A 3-element array of float numbers containing the gyroscope values for the x, y and z axes in deg/sec units.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 187 of file icm20648.c .

References ICM20648_gyroResolutionGet() , ICM20648_OK , ICM20648_REG_GYRO_XOUT_H_SH , and ICM20648_registerRead() .

Referenced by IMU_getGyroData() .

uint32_t ICM20648_gyroFullscaleSet ( uint8_t gyroFs )

Sets the full scale value of the gyroscope.

Parameters
[in] gyroFs The desired full scale value. Use the ICM20648_GYRO_FULLSCALE_yDPS macros, which are defined in the icm20648.h file. The value of y can be 250, 500, 1000 or 2000.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 327 of file icm20648.c .

References ICM20648_MASK_GYRO_FULLSCALE , ICM20648_OK , ICM20648_REG_GYRO_CONFIG_1 , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , and IMU_config() .

uint32_t ICM20648_gyroResolutionGet ( float * gyroRes )

Gets the actual resolution of the gyroscope.

Parameters
[out] gyroRes The actual resolution in (deg/sec)/bit units
Returns
Returns zero on OK, non-zero otherwise

Definition at line 260 of file icm20648.c .

References ICM20648_GYRO_FULLSCALE_1000DPS , ICM20648_GYRO_FULLSCALE_2000DPS , ICM20648_GYRO_FULLSCALE_250DPS , ICM20648_GYRO_FULLSCALE_500DPS , ICM20648_MASK_GYRO_FULLSCALE , ICM20648_OK , ICM20648_REG_GYRO_CONFIG_1 , and ICM20648_registerRead() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , and ICM20648_gyroDataRead() .

float ICM20648_gyroSampleRateSet ( float sampleRate )

Sets the sample rate of the accelerometer.

Parameters
[in] sampleRate The desired sample rate in Hz
Returns
The actual sample rate. May be different from the desired value because of the finite and discrete number of divider settings

Definition at line 371 of file icm20648.c .

References ICM20648_REG_GYRO_SMPLRT_DIV , and ICM20648_registerWrite() .

Referenced by ICM20648_sampleRateSet() , and IMU_config() .

uint32_t ICM20648_init ( void )

Initializes the ICM20648 sensor. Enables the power supply and SPI lines, sets up the host SPI controller, configures the chip control interface, clock generator and interrupt line.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 67 of file icm20648.c .

References BOARD_imuEnable() , ICM20648_BIT_CLK_PLL , ICM20648_BIT_I2C_IF_DIS , ICM20648_BIT_INT_ACTL , ICM20648_BIT_INT_OPEN , ICM20648_DEVICE_ID , ICM20648_ERROR_INVALID_DEVICE_ID , ICM20648_OK , ICM20648_REG_INT_PIN_CFG , ICM20648_REG_PWR_MGMT_1 , ICM20648_REG_USER_CTRL , ICM20648_REG_WHO_AM_I , ICM20648_registerRead() , ICM20648_registerWrite() , ICM20648_reset() , ICM20648_spiInit() , ICM20948_DEVICE_ID , and UTIL_delay() .

Referenced by IMU_init() .

uint32_t ICM20648_interruptEnable ( bool dataReadyEnable,
bool womEnable
)

Enables or disables the interrupts in the ICM20648 chip.

Parameters
[in] dataReadyEnable If true enables the Raw Data Ready interrupt, otherwise disables.
[in] womEnable If true enables the Wake-up On Motion interrupt, otherwise disables.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 663 of file icm20648.c .

References ICM20648_BIT_RAW_DATA_0_RDY_EN , ICM20648_BIT_WOM_INT_EN , ICM20648_OK , ICM20648_REG_INT_ENABLE , ICM20648_REG_INT_ENABLE_1 , and ICM20648_registerWrite() .

Referenced by ICM20648_wakeOnMotionITEnable() , IMU_config() , and IMU_gyroCalibrate() .

uint32_t ICM20648_interruptStatusRead ( uint32_t * intStatus )

Reads the interrupt status registers of the ICM20648 chip.

Parameters
[out] intStatus The content the four interrupt registers. LSByte is INT_STATUS, MSByte is INT_STATUS_3
Returns
Returns zero on OK, non-zero otherwise

Definition at line 701 of file icm20648.c .

References ICM20648_OK , ICM20648_REG_INT_STATUS , and ICM20648_registerRead() .

Referenced by IMU_config() .

bool ICM20648_isDataReady ( void )

Checks if new data is available for read.

Returns
Returns true if the Raw Data Ready interrupt bit set, false otherwise

Definition at line 721 of file icm20648.c .

References ICM20648_BIT_RAW_DATA_0_RDY_INT , ICM20648_REG_INT_STATUS_1 , and ICM20648_registerRead() .

Referenced by IMU_isDataReady() .

uint32_t ICM20648_lowPowerModeEnter ( bool enAccel,
bool enGyro,
bool enTemp
)

Enables or disables the sensors in low power mode in the ICM20648 chip.

Parameters
[in] enAccel If true enables the acceleration sensor in low power mode
[in] enGyro If true enables the gyroscope sensor in low power mode
[in] enTemp If true enables the temperature sensor in low power mode
Returns
Returns zero on OK, non-zero otherwise

Definition at line 614 of file icm20648.c .

References ICM20648_BIT_LP_EN , ICM20648_cycleModeEnable() , ICM20648_OK , ICM20648_REG_PWR_MGMT_1 , ICM20648_registerRead() , ICM20648_registerWrite() , ICM20648_sensorEnable() , ICM20648_sleepModeEnable() , and UTIL_delay() .

Referenced by ICM20648_wakeOnMotionITEnable() , and IMU_config() .

void ICM20648_registerRead ( uint16_t addr,
int numBytes,
uint8_t * data
)
void ICM20648_registerWrite ( uint16_t addr,
uint8_t data
)
uint32_t ICM20648_reset ( void )

Performs soft reset on the ICM20648 chip.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 129 of file icm20648.c .

References ICM20648_BIT_H_RESET , ICM20648_OK , ICM20648_REG_PWR_MGMT_1 , ICM20648_registerWrite() , and UTIL_delay() .

Referenced by ICM20648_init() .

uint32_t ICM20648_sampleRateSet ( float sampleRate )

Sets the sample rate both of the accelerometer and the gyroscope.

Parameters
[in] sampleRate The desired sample rate in Hz. Since the resolution of the sample rate divider is different in the accel and gyro stages it is possible that the two sensor will have different sample rate set.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 352 of file icm20648.c .

References ICM20648_accelSampleRateSet() , ICM20648_gyroSampleRateSet() , and ICM20648_OK .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , and ICM20648_wakeOnMotionITEnable() .

uint32_t ICM20648_sensorEnable ( bool accel,
bool gyro,
bool temp
)

Enables or disables the sensors in the ICM20648 chip.

Parameters
[in] accel If true enables the acceleration sensor
[in] gyro If true enables the gyroscope sensor
[in] temp If true enables the temperature sensor
Returns
Returns zero on OK, non-zero otherwise

Definition at line 562 of file icm20648.c .

References ICM20648_BIT_PWR_ACCEL_STBY , ICM20648_BIT_PWR_GYRO_STBY , ICM20648_BIT_TEMP_DIS , ICM20648_OK , ICM20648_REG_PWR_MGMT_1 , ICM20648_REG_PWR_MGMT_2 , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_accelGyroCalibrate() , ICM20648_gyroCalibrate() , ICM20648_lowPowerModeEnter() , ICM20648_wakeOnMotionITEnable() , and IMU_config() .

uint32_t ICM20648_sleepModeEnable ( bool enable )

Enables or disables the sleep mode of the device.

Parameters
[in] enable If true, sleep mode is enabled. Set to false to disable sleep mode.
Returns
Returns zero on OK, non-zero otherwise

Definition at line 501 of file icm20648.c .

References ICM20648_BIT_SLEEP , ICM20648_OK , ICM20648_REG_PWR_MGMT_1 , ICM20648_registerRead() , and ICM20648_registerWrite() .

Referenced by ICM20648_lowPowerModeEnter() , and ICM20648_wakeOnMotionITEnable() .

uint32_t ICM20648_spiInit ( void )

Initializes the SPI bus in order to communicate with the ICM20648.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 1210 of file icm20648.c .

References CMU_ClockEnable() , cmuClock_GPIO , GPIO_PinModeSet() , gpioModeInput , gpioModePushPull , ICM20648_OK , USART_InitSync() , and USART_Reset() .

Referenced by ICM20648_init() .

uint32_t ICM20648_temperatureRead ( float * temperature )

Reads the temperature sensor raw value and converts to Celsius.

Parameters
[out] temperature The mesured temperature in Celsius
Returns
Returns zero on OK, non-zero otherwise

Definition at line 1169 of file icm20648.c .

References ICM20648_OK , ICM20648_REG_TEMPERATURE_H , and ICM20648_registerRead() .

uint32_t ICM20648_wakeOnMotionITEnable ( bool enable,
uint8_t womThreshold,
float sampleRate
)

Sets up and enables the Wake-up On Motion feature.

Parameters
[in] enable If true enables the WOM feature, disables otherwise
[in] womThreshold Threshold value for the Wake on Motion Interrupt for ACCEL x/y/z axes. LSB = 4mg. Range is 0mg to 1020mg
[in] sampleRate The desired sample rate of the accel sensor in Hz
Returns
Returns zero on OK, non-zero otherwise

Definition at line 753 of file icm20648.c .

References ICM20648_ACCEL_BW_1210HZ , ICM20648_ACCEL_FULLSCALE_2G , ICM20648_accelBandwidthSet() , ICM20648_accelFullscaleSet() , ICM20648_BIT_ACCEL_INTEL_EN , ICM20648_BIT_ACCEL_INTEL_MODE , ICM20648_cycleModeEnable() , ICM20648_interruptEnable() , ICM20648_lowPowerModeEnter() , ICM20648_OK , ICM20648_REG_ACCEL_INTEL_CTRL , ICM20648_REG_ACCEL_WOM_THR , ICM20648_registerWrite() , ICM20648_sampleRateSet() , ICM20648_sensorEnable() , ICM20648_sleepModeEnable() , and UTIL_delay() .