/* This file contains a useful c translation of the datasheet register map values */ #ifndef _ICM_20948_ENUMERATIONS_H_ #define _ICM_20948_ENUMERATIONS_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ // // Generalized // REG_BANK_SEL = 0x7F, // // Gyroscope and Accelerometer // // User Bank 0 // AGB0_REG_WHO_AM_I = 0x00, // // Break // AGB0_REG_USER_CTRL = 0x03, // // Break // AGB0_REG_LP_CONFIG = 0x05, typedef enum{ ICM_20948_Sample_Mode_Continuous = 0x00, ICM_20948_Sample_Mode_Cycled, }ICM_20948_LP_CONFIG_CYCLE_e; // AGB0_REG_PWR_MGMT_1, typedef enum{ ICM_20948_Clock_Internal_20MHz = 0x00, ICM_20948_Clock_Auto, ICM_20948_Clock_TimingReset = 0x07 }ICM_20948_PWR_MGMT_1_CLKSEL_e; // AGB0_REG_PWR_MGMT_2, // // Break // AGB0_REG_INT_PIN_CONFIG = 0x0F, // AGB0_REG_INT_ENABLE, // AGB0_REG_INT_ENABLE_1, // AGB0_REG_INT_ENABLE_2, // AGB0_REG_INT_ENABLE_3, // // Break // AGB0_REG_I2C_MST_STATUS = 0x17, // // Break // AGB0_REG_INT_STATUS = 0x19, // AGB0_REG_INT_STATUS_1, // AGB0_REG_INT_STATUS_2, // AGB0_REG_INT_STATUS_3, // // Break // AGB0_REG_DELAY_TIMEH = 0x28, // AGB0_REG_DELAY_TIMEL, // // Break // AGB0_REG_ACCEL_XOUT_H = 0x2D, // AGB0_REG_ACCEL_XOUT_L, // AGB0_REG_ACCEL_YOUT_H, // AGB0_REG_ACCEL_YOUT_L, // AGB0_REG_ACCEL_ZOUT_H, // AGB0_REG_ACCEL_ZOUT_L, // AGB0_REG_GYRO_XOUT_H, // AGB0_REG_GYRO_XOUT_L, // AGB0_REG_GYRO_YOUT_H, // AGB0_REG_GYRO_YOUT_L, // AGB0_REG_GYRO_ZOUT_H, // AGB0_REG_GYRO_ZOUT_L, // AGB0_REG_TEMP_OUT_H, // AGB0_REG_TEMP_OUT_L, // AGB0_REG_EXT_SLV_SENS_DATA_00, // AGB0_REG_EXT_SLV_SENS_DATA_01, // AGB0_REG_EXT_SLV_SENS_DATA_02, // AGB0_REG_EXT_SLV_SENS_DATA_03, // AGB0_REG_EXT_SLV_SENS_DATA_04, // AGB0_REG_EXT_SLV_SENS_DATA_05, // AGB0_REG_EXT_SLV_SENS_DATA_06, // AGB0_REG_EXT_SLV_SENS_DATA_07, // AGB0_REG_EXT_SLV_SENS_DATA_08, // AGB0_REG_EXT_SLV_SENS_DATA_09, // AGB0_REG_EXT_SLV_SENS_DATA_10, // AGB0_REG_EXT_SLV_SENS_DATA_11, // AGB0_REG_EXT_SLV_SENS_DATA_12, // AGB0_REG_EXT_SLV_SENS_DATA_13, // AGB0_REG_EXT_SLV_SENS_DATA_14, // AGB0_REG_EXT_SLV_SENS_DATA_15, // AGB0_REG_EXT_SLV_SENS_DATA_16, // AGB0_REG_EXT_SLV_SENS_DATA_17, // AGB0_REG_EXT_SLV_SENS_DATA_18, // AGB0_REG_EXT_SLV_SENS_DATA_19, // AGB0_REG_EXT_SLV_SENS_DATA_20, // AGB0_REG_EXT_SLV_SENS_DATA_21, // AGB0_REG_EXT_SLV_SENS_DATA_22, // AGB0_REG_EXT_SLV_SENS_DATA_23, // // Break // AGB0_REG_FIFO_EN_1 = 0x66, // AGB0_REG_FIFO_EN_2, // AGB0_REG_FIFO_MODE, // // Break // AGB0_REG_FIFO_COUNT_H = 0x70, // AGB0_REG_FIFO_COUNT_L, // AGB0_REG_FIFO_R_W, // // Break // AGB0_REG_DATA_RDY_STATUS = 0x74, // // Break // AGB0_REG_FIFO_CFG = 0x76, // // Break // AGB0_REG_MEM_START_ADDR = 0x7C, // Hmm, Invensense thought they were sneaky not listing these locations on the datasheet... // AGB0_REG_MEM_R_W = 0x7D, // These three locations seem to be able to access some memory within the device // AGB0_REG_MEM_BANK_SEL = 0x7E, // And that location is also where the DMP image gets loaded // AGB0_REG_REG_BANK_SEL = 0x7F, // // Bank 1 // AGB1_REG_SELF_TEST_X_GYRO = 0x02, // AGB1_REG_SELF_TEST_Y_GYRO, // AGB1_REG_SELF_TEST_Z_GYRO, // // Break // AGB1_REG_SELF_TEST_X_ACCEL = 0x0E, // AGB1_REG_SELF_TEST_Y_ACCEL, // AGB1_REG_SELF_TEST_Z_ACCEL, // // Break // AGB1_REG_XA_OFFS_H = 0x14, // AGB1_REG_XA_OFFS_L, // // Break // AGB1_REG_YA_OFFS_H = 0x17, // AGB1_REG_YA_OFFS_L, // // Break // AGB1_REG_ZA_OFFS_H = 0x1A, // AGB1_REG_ZA_OFFS_L, // // Break // AGB1_REG_TIMEBASE_CORRECTION_PLL = 0x28, // // Break // AGB1_REG_REG_BANK_SEL = 0x7F, // // Bank 2 // AGB2_REG_GYRO_SMPLRT_DIV = 0x00, /* Gyro sample rate divider. Divides the internal sample rate to generate the sample rate that controls sensor data output rate, FIFO sample rate, and DMP sequence rate. NOTE: This register is only effective when FCHOICE = 1’b1 (FCHOICE_B register bit is 1’b0), and (0 < DLPF_CFG < 7). ODR is computed as follows: 1.1 kHz/(1+GYRO_SMPLRT_DIV[7:0]) */ // AGB2_REG_GYRO_CONFIG_1, typedef enum{ // Full scale range options in degrees per second dps250 = 0x00, dps500, dps1000, dps2000, }ICM_20948_GYRO_CONFIG_1_FS_SEL_e; typedef enum{ // Format is dAbwB_nXbwZ - A is integer part of 3db BW, B is fraction. X is integer part of nyquist bandwidth, Y is fraction gyr_d196bw6_n229bw8 = 0x00, gyr_d151bw8_n187bw6, gyr_d119bw5_n154bw3, gyr_d51bw2_n73bw3, gyr_d23bw9_n35bw9, gyr_d11bw6_n17bw8, gyr_d5bw7_n8bw9, gyr_d361bw4_n376bw5, }ICM_20948_GYRO_CONFIG_1_DLPCFG_e; // AGB2_REG_GYRO_CONFIG_2, // AGB2_REG_XG_OFFS_USRH, // AGB2_REG_XG_OFFS_USRL, // AGB2_REG_YG_OFFS_USRH, // AGB2_REG_YG_OFFS_USRL, // AGB2_REG_ZG_OFFS_USRH, // AGB2_REG_ZG_OFFS_USRL, // AGB2_REG_ODR_ALIGN_EN, // // Break // AGB2_REG_ACCEL_SMPLRT_DIV_1 = 0x10, // AGB2_REG_ACCEL_SMPLRT_DIV_2, // AGB2_REG_ACCEL_INTEL_CTRL, // AGB2_REG_ACCEL_WOM_THR, // AGB2_REG_ACCEL_CONFIG, typedef enum{ gpm2 = 0x00, gpm4, gpm8, gpm16, }ICM_20948_ACCEL_CONFIG_FS_SEL_e; typedef enum{ // Format is dAbwB_nXbwZ - A is integer part of 3db BW, B is fraction. X is integer part of nyquist bandwidth, Y is fraction acc_d246bw_n265bw = 0x00, acc_d246bw_n265bw_1, acc_d111bw4_n136bw, acc_d50bw4_n68bw8, acc_d23bw9_n34bw4, acc_d11bw5_n17bw, acc_d5bw7_n8bw3, acc_d473bw_n499bw, }ICM_20948_ACCEL_CONFIG_DLPCFG_e; // AGB2_REG_ACCEL_CONFIG_2, // // Break // AGB2_REG_FSYNC_CONFIG = 0x52, // AGB2_REG_TEMP_CONFIG, // AGB2_REG_MOD_CTRL_USR, // // Break // AGB2_REG_REG_BANK_SEL = 0x7F, // // Bank 3 // AGB3_REG_I2C_MST_ODR_CONFIG = 0x00, // AGB3_REG_I2C_MST_CTRL, // AGB3_REG_I2C_MST_DELAY_CTRL, // AGB3_REG_I2C_SLV0_ADDR, // AGB3_REG_I2C_SLV0_REG, // AGB3_REG_I2C_SLV0_CTRL, // AGB3_REG_I2C_SLV0_DO, // AGB3_REG_I2C_SLV1_ADDR, // AGB3_REG_I2C_SLV1_REG, // AGB3_REG_I2C_SLV1_CTRL, // AGB3_REG_I2C_SLV1_DO, // AGB3_REG_I2C_SLV2_ADDR, // AGB3_REG_I2C_SLV2_REG, // AGB3_REG_I2C_SLV2_CTRL, // AGB3_REG_I2C_SLV2_DO, // AGB3_REG_I2C_SLV3_ADDR, // AGB3_REG_I2C_SLV3_REG, // AGB3_REG_I2C_SLV3_CTRL, // AGB3_REG_I2C_SLV3_DO, // AGB3_REG_I2C_SLV4_ADDR, // AGB3_REG_I2C_SLV4_REG, // AGB3_REG_I2C_SLV4_CTRL, // AGB3_REG_I2C_SLV4_DO, // AGB3_REG_I2C_SLV4_DI, // // Break // AGB3_REG_REG_BANK_SEL = 0x7F, // // Magnetometer // M_REG_WIA2 = 0x01, // // Break // M_REG_ST1 = 0x10, // M_REG_HXL, // M_REG_HXH, // M_REG_HYL, // M_REG_HYH, // M_REG_HZL, // M_REG_HZH, // M_REG_ST2, // // Break // M_REG_CNTL2 = 0x31, // M_REG_CNTL3, // M_REG_TS1, // M_REG_TS2, #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _ICM_20948_ENUMERATIONS_H_ */