46 #define EX_LSM6DS0_VERSION "1.1.2" 51 #define EX_LSM6DS0_MAJOR 1 56 #define EX_LSM6DS0_MINOR 1 61 #define EX_LSM6DS0_PATCH 2 72 #define LSM6DS0_ACC_NUMBER_OF_AXES 3U 74 #define LSM6DS0_ACC_2G 2.0f 75 #define LSM6DS0_ACC_4G 4.0f 76 #define LSM6DS0_ACC_8G 8.0f 77 #define LSM6DS0_ACC_16G 16.0f 79 #define LSM6DS0_ACC_SENS_2G 0.061f 80 #define LSM6DS0_ACC_SENS_4G 0.122f 81 #define LSM6DS0_ACC_SENS_8G 0.244f 82 #define LSM6DS0_ACC_SENS_16G 0.732f 84 #define LSM6DS0_ACC_BIAS 0.0f 95 #define LSM6DS0_GYRO_NUMBER_OF_AXES 3U 97 #define LSM6DS0_GYRO_245DPS 245.0f 98 #define LSM6DS0_GYRO_500DPS 500.0f 99 #define LSM6DS0_GYRO_2000DPS 2000.0f 101 #define LSM6DS0_GYRO_SENS_245DPS 0.00875f 102 #define LSM6DS0_GYRO_SENS_500DPS 0.01750f 103 #define LSM6DS0_GYRO_SENS_2000DPS 0.07000f 105 #define LSM6DS0_GYRO_BIAS 0.0f 112 #define LSM6DS0_DI_MASK 0xFF 113 #define LSM6DS0_DI(n) (1 << n) 114 #define LSM6DS0_AD_MASK 0x7F 115 #define LSM6DS0_AD(n) (1 << n) 116 #define LSM6DS0_MS (1 << 7) 123 #define LSM6DS0_AD_ACT_THS 0x04 124 #define LSM6DS0_AD_ACT_DUR 0x05 125 #define LSM6DS0_AD_INT_GEN_CFG_XL 0x06 126 #define LSM6DS0_AD_INT_GEN_THS_X_XL 0x07 127 #define LSM6DS0_AD_INT_GEN_THS_Y_XL 0x08 128 #define LSM6DS0_AD_INT_GEN_THS_Z_XL 0x09 129 #define LSM6DS0_AD_INT_GEN_DUR_XL 0x0A 130 #define LSM6DS0_AD_REFERENCE_G 0x0B 131 #define LSM6DS0_AD_INT_CTRL 0x0C 132 #define LSM6DS0_AD_WHO_AM_I 0x0F 133 #define LSM6DS0_AD_CTRL_REG1_G 0x10 134 #define LSM6DS0_AD_CTRL_REG2_G 0x11 135 #define LSM6DS0_AD_CTRL_REG3_G 0x12 136 #define LSM6DS0_AD_ORIENT_CFG_G 0x13 137 #define LSM6DS0_AD_INT_GEN_SRC_G 0x14 138 #define LSM6DS0_AD_OUT_TEMP_L 0x15 139 #define LSM6DS0_AD_OUT_TEMP_H 0x16 140 #define LSM6DS0_AD_STATUS_REG1 0x17 141 #define LSM6DS0_AD_OUT_X_L_G 0x18 142 #define LSM6DS0_AD_OUT_X_H_G 0x19 143 #define LSM6DS0_AD_OUT_Y_L_G 0x1A 144 #define LSM6DS0_AD_OUT_Y_H_G 0x1B 145 #define LSM6DS0_AD_OUT_Z_L_G 0x1C 146 #define LSM6DS0_AD_OUT_Z_H_G 0x1D 147 #define LSM6DS0_AD_CTRL_REG4 0x1E 148 #define LSM6DS0_AD_CTRL_REG5_XL 0x1F 149 #define LSM6DS0_AD_CTRL_REG6_XL 0x20 150 #define LSM6DS0_AD_CTRL_REG7_XL 0x21 151 #define LSM6DS0_AD_CTRL_REG8 0x22 152 #define LSM6DS0_AD_CTRL_REG9 0x23 153 #define LSM6DS0_AD_CTRL_REG10 0x24 154 #define LSM6DS0_AD_INT_GEN_SRC_XL 0x26 155 #define LSM6DS0_AD_STATUS_REG2 0x27 156 #define LSM6DS0_AD_OUT_X_L_XL 0x28 157 #define LSM6DS0_AD_OUT_X_H_XL 0x29 158 #define LSM6DS0_AD_OUT_Y_L_XL 0x2A 159 #define LSM6DS0_AD_OUT_Y_H_XL 0x2B 160 #define LSM6DS0_AD_OUT_Z_L_XL 0x2C 161 #define LSM6DS0_AD_OUT_Z_H_XL 0x2D 162 #define LSM6DS0_AD_FIFO_CTRL 0x2E 163 #define LSM6DS0_AD_FIFO_SRC 0x2F 164 #define LSM6DS0_AD_INT_GEN_CFG_G 0x30 165 #define LSM6DS0_AD_INT_GEN_THS_XH_G 0x31 166 #define LSM6DS0_AD_INT_GEN_THS_XL_G 0x32 167 #define LSM6DS0_AD_INT_GEN_THS_YH_G 0x33 168 #define LSM6DS0_AD_INT_GEN_THS_YL_G 0x34 169 #define LSM6DS0_AD_INT_GEN_THS_ZH_G 0x35 170 #define LSM6DS0_AD_INT_GEN_THS_ZL_G 0x36 171 #define LSM6DS0_AD_INT_GEN_DUR_G 0x37 178 #define LSM6DS0_CTRL_REG1_G 0xFA 179 #define LSM6DS0_CTRL_REG1_G_BW_G0 (1 << 0) 180 #define LSM6DS0_CTRL_REG1_G_BW_G1 (1 << 1) 181 #define LSM6DS0_CTRL_REG1_G_FS_MASK 0x1F 182 #define LSM6DS0_CTRL_REG1_G_FS_G0 (1 << 3) 183 #define LSM6DS0_CTRL_REG1_G_FS_G1 (1 << 4) 184 #define LSM6DS0_CTRL_REG1_G_ODR_G0 (1 << 5) 185 #define LSM6DS0_CTRL_REG1_G_ODR_G1 (1 << 6) 186 #define LSM6DS0_CTRL_REG1_G_ODR_G2 (1 << 7) 193 #define LSM6DS0_CTRL_REG2_G 0x0F 194 #define LSM6DS0_CTRL_REG2_G_OUT_SEL0 (1 << 0) 195 #define LSM6DS0_CTRL_REG2_G_OUT_SEL1 (1 << 1) 196 #define LSM6DS0_CTRL_REG2_G_INT_SEL0 (1 << 2) 197 #define LSM6DS0_CTRL_REG2_G_INT_SEL1 (1 << 3) 204 #define LSM6DS0_CTRL_REG3_G 0x64 205 #define LSM6DS0_CTRL_REG3_G_HP_CF0_G (1 << 0) 206 #define LSM6DS0_CTRL_REG3_G_HP_CF1_G (1 << 1) 207 #define LSM6DS0_CTRL_REG3_G_HP_CF2_G (1 << 2) 208 #define LSM6DS0_CTRL_REG3_G_HP_CF3_G (1 << 3) 209 #define LSM6DS0_CTRL_REG3_G_HP_EN (1 << 6) 210 #define LSM6DS0_CTRL_REG3_G_LP_MODE (1 << 7) 217 #define LSM6DS0_CTRL_REG4 0x3A 218 #define LSM6DS0_CTRL_REG4_4D_XL1 (1 << 0) 219 #define LSM6DS0_CTRL_REG4_LIR_XL1 (1 << 1) 220 #define LSM6DS0_CTRL_REG4_XEN_G (1 << 3) 221 #define LSM6DS0_CTRL_REG4_YEN_G (1 << 4) 222 #define LSM6DS0_CTRL_REG4_ZEN_G (1 << 5) 229 #define LSM6DS0_CTRL_REG5_XL 0xF8 230 #define LSM6DS0_CTRL_REG5_XL_XEN_XL (1 << 3) 231 #define LSM6DS0_CTRL_REG5_XL_YEN_XL (1 << 4) 232 #define LSM6DS0_CTRL_REG5_XL_ZEN_XL (1 << 5) 233 #define LSM6DS0_CTRL_REG5_XL_DEC0 (1 << 6) 234 #define LSM6DS0_CTRL_REG5_XL_DEC1 (1 << 7) 241 #define LSM6DS0_CTRL_REG6_XL 0xFF 242 #define LSM6DS0_CTRL_REG6_XL_BW_XL0 (1 << 0) 243 #define LSM6DS0_CTRL_REG6_XL_BW_XL1 (1 << 1) 244 #define LSM6DS0_CTRL_REG6_XL_BW_SCAL_ODR (1 << 2) 245 #define LSM6DS0_CTRL_REG6_XL_FS_MASK 0x1F 246 #define LSM6DS0_CTRL_REG6_XL_FS0_XL (1 << 3) 247 #define LSM6DS0_CTRL_REG6_XL_FS1_XL (1 << 4) 248 #define LSM6DS0_CTRL_REG6_XL_ODR_XL0 (1 << 5) 249 #define LSM6DS0_CTRL_REG6_XL_ODR_XL1 (1 << 6) 250 #define LSM6DS0_CTRL_REG6_XL_ODR_XL2 (1 << 7) 257 #define LSM6DS0_CTRL_REG7_XL 0xE5 258 #define LSM6DS0_CTRL_REG7_XL_HPIS1 (1 << 0) 259 #define LSM6DS0_CTRL_REG7_XL_FDS (1 << 2) 260 #define LSM6DS0_CTRL_REG7_XL_DCF0 (1 << 5) 261 #define LSM6DS0_CTRL_REG7_XL_DCF1 (1 << 6) 262 #define LSM6DS0_CTRL_REG7_XL_HR (1 << 7) 269 #define LSM6DS0_CTRL_REG8 0xFF 270 #define LSM6DS0_CTRL_REG8_SW_RESET (1 << 0) 271 #define LSM6DS0_CTRL_REG8_BLE (1 << 1) 272 #define LSM6DS0_CTRL_REG8_IF_ADD_INC (1 << 2) 273 #define LSM6DS0_CTRL_REG8_SIM (1 << 3) 274 #define LSM6DS0_CTRL_REG8_PP_OD (1 << 4) 275 #define LSM6DS0_CTRL_REG8_H_LACTIVE (1 << 5) 276 #define LSM6DS0_CTRL_REG8_BDU (1 << 6) 277 #define LSM6DS0_CTRL_REG8_BOOT (1 << 7) 284 #define LSM6DS0_CTRL_REG9 0x5F 285 #define LSM6DS0_CTRL_REG9_STOP_ON_FTH (1 << 0) 286 #define LSM6DS0_CTRL_REG9_FIFO_EN (1 << 1) 287 #define LSM6DS0_CTRL_REG9_I2C_DISABLE (1 << 2) 288 #define LSM6DS0_CTRL_REG9_DRDY_MASK_BIT (1 << 3) 289 #define LSM6DS0_CTRL_REG9_FIFO_TEMP_EN (1 << 4) 290 #define LSM6DS0_CTRL_REG9_SLEEP_G (1 << 6) 297 #define LSM6DS0_CTRL_REG10 0x05 298 #define LSM6DS0_CTRL_REG10_ST_XL (1 << 0) 299 #define LSM6DS0_CTRL_REG10_ST_G (1 << 2) 315 #if !defined(LSM6DS0_USE_SPI) || defined(__DOXYGEN__) 316 #define LSM6DS0_USE_SPI FALSE 325 #if !defined(LSM6DS0_SHARED_SPI) || defined(__DOXYGEN__) 326 #define LSM6DS0_SHARED_SPI FALSE 334 #if !defined(LSM6DS0_USE_I2C) || defined(__DOXYGEN__) 335 #define LSM6DS0_USE_I2C TRUE 344 #if !defined(LSM6DS0_SHARED_I2C) || defined(__DOXYGEN__) 345 #define LSM6DS0_SHARED_I2C FALSE 353 #if !defined(LSM6DS0_USE_ADVANCED) || defined(__DOXYGEN__) 354 #define LSM6DS0_USE_ADVANCED FALSE 362 #if !defined(LSM6DS0_GYRO_BIAS_ACQ_TIMES) || defined(__DOXYGEN__) 363 #define LSM6DS0_GYRO_BIAS_ACQ_TIMES 50 370 #if !defined(LSM6DS0_GYRO_BIAS_SETTLING_US) || defined(__DOXYGEN__) 371 #define LSM6DS0_GYRO_BIAS_SETTLING_US 5000 379 #if !(LSM6DS0_USE_SPI ^ LSM6DS0_USE_I2C) 380 #error "LSM6DS0_USE_SPI and LSM6DS0_USE_I2C cannot be both true or both false" 383 #if LSM6DS0_USE_SPI && !HAL_USE_SPI 384 #error "LSM6DS0_USE_SPI requires HAL_USE_SPI" 387 #if LSM6DS0_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION 388 #error "LSM6DS0_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION" 391 #if LSM6DS0_USE_I2C && !HAL_USE_I2C 392 #error "LSM6DS0_USE_I2C requires HAL_USE_I2C" 395 #if LSM6DS0_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION 396 #error "LSM6DS0_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION" 403 #error "LSM6DS0 over SPI still not supported" 473 LSM6DS0_GYRO_ODR_PD = 0x00,
474 LSM6DS0_GYRO_ODR_95HZ_FC_25 = 0x10,
475 LSM6DS0_GYRO_ODR_14_9HZ_FC_5 = 0X20,
476 LSM6DS0_GYRO_ODR_59_5HZ_FC_16 = 0X40,
477 LSM6DS0_GYRO_ODR_119HZ_FC_14 = 0X60,
478 LSM6DS0_GYRO_ODR_119HZ_FC_31 = 0X61,
479 LSM6DS0_GYRO_ODR_238HZ_FC_14 = 0X80,
480 LSM6DS0_GYRO_ODR_238HZ_FC_29 = 0X81,
481 LSM6DS0_GYRO_ODR_238HZ_FC_63 = 0X82,
482 LSM6DS0_GYRO_ODR_238HZ_FC_78 = 0X83,
483 LSM6DS0_GYRO_ODR_476HZ_FC_21 = 0XA0,
484 LSM6DS0_GYRO_ODR_476HZ_FC_28 = 0XA1,
485 LSM6DS0_GYRO_ODR_476HZ_FC_57 = 0XA2,
486 LSM6DS0_GYRO_ODR_476HZ_FC_100 = 0XA3,
487 LSM6DS0_GYRO_ODR_952HZ_FC_33 = 0XC0,
488 LSM6DS0_GYRO_ODR_952HZ_FC_40 = 0XC1,
489 LSM6DS0_GYRO_ODR_952HZ_FC_58 = 0XC2,
490 LSM6DS0_GYRO_ODR_952HZ_FC_100 = 0XC3
523 LSM6DS0_GYRO_HPCF_1 = 0x01,
524 LSM6DS0_GYRO_HPCF_2 = 0x02,
525 LSM6DS0_GYRO_HPCF_3 = 0x03,
526 LSM6DS0_GYRO_HPCF_4 = 0x04,
527 LSM6DS0_GYRO_HPCF_5 = 0x05,
528 LSM6DS0_GYRO_HPCF_6 = 0x06,
529 LSM6DS0_GYRO_HPCF_7 = 0x07,
530 LSM6DS0_GYRO_HPCF_8 = 0x08,
531 LSM6DS0_GYRO_HPCF_9 = 0x09
563 #if (LSM6DS0_USE_SPI) || defined(__DOXYGEN__) 574 #if (LSM6DS0_USE_I2C) || defined(__DOXYGEN__) 605 #if LSM6DS0_USE_ADVANCED || defined(__DOXYGEN__) 627 #if LSM6DS0_USE_ADVANCED || defined(__DOXYGEN__) 658 #define _lsm6ds0_methods_alone \ 660 msg_t (*acc_set_full_scale)(LSM6DS0Driver *devp, lsm6ds0_acc_fs_t fs); \ 662 msg_t (*gyro_set_full_scale)(LSM6DS0Driver *devp, lsm6ds0_gyro_fs_t fs); 667 #define _lsm6ds0_methods \ 668 _base_object_methods \ 669 _lsm6ds0_methods_alone 683 #define _lsm6ds0_data \ 686 lsm6ds0_state_t state; \ 688 const LSM6DS0Config *config; \ 692 float accsensitivity[LSM6DS0_ACC_NUMBER_OF_AXES]; \ 694 float accbias[LSM6DS0_ACC_NUMBER_OF_AXES]; \ 696 float accfullscale; \ 700 float gyrosensitivity[LSM6DS0_GYRO_NUMBER_OF_AXES]; \ 702 float gyrobias[LSM6DS0_GYRO_NUMBER_OF_AXES]; \ 733 #define lsm6ds0AccelerometerGetAxesNumber(devp) \ 734 accelerometerGetAxesNumber(&((devp)->acc_if)) 754 #define lsm6ds0AccelerometerReadRaw(devp, axes) \ 755 accelerometerReadRaw(&((devp)->acc_if), axes) 776 #define lsm6ds0AccelerometerReadCooked(devp, axes) \ 777 accelerometerReadCooked(&((devp)->acc_if), axes) 793 #define lsm6ds0AccelerometerSetBias(devp, bp) \ 794 accelerometerSetBias(&((devp)->acc_if), bp) 808 #define lsm6ds0AccelerometerResetBias(devp) \ 809 accelerometerResetBias(&((devp)->acc_if)) 825 #define lsm6ds0AccelerometerSetSensitivity(devp, sp) \ 826 accelerometerSetSensitivity(&((devp)->acc_if), sp) 840 #define lsm6ds0AccelerometerResetSensitivity(devp) \ 841 accelerometerResetSensitivity(&((devp)->acc_if)) 858 #define lsm6ds0AccelerometerSetFullScale(devp, fs) \ 859 (devp)->vmt->acc_set_full_scale(devp, fs) 870 #define lsm6ds0GyroscopeGetAxesNumber(devp) \ 871 gyroscopeGetAxesNumber(&((devp)->gyro_if)) 891 #define lsm6ds0GyroscopeReadRaw(devp, axes) \ 892 gyroscopeReadRaw(&((devp)->gyro_if), axes) 913 #define lsm6ds0GyroscopeReadCooked(devp, axes) \ 914 gyroscopeReadCooked(&((devp)->gyro_if), axes) 933 #define lsm6ds0GyroscopeSampleBias(devp) \ 934 gyroscopeSampleBias(&((devp)->gyro_if)) 950 #define lsm6ds0GyroscopeSetBias(devp, bp) \ 951 gyroscopeSetBias(&((devp)->gyro_if), bp) 965 #define lsm6ds0GyroscopeResetBias(devp) \ 966 gyroscopeResetBias(&((devp)->gyro_if)) 982 #define lsm6ds0GyroscopeSetSensitivity(devp, sp) \ 983 gyroscopeSetSensitivity(&((devp)->gyro_if), sp) 997 #define lsm6ds0GyroscopeResetSensitivity(devp) \ 998 gyroscopeResetSensitivity(&((devp)->gyro_if)) 1015 #define lsm6ds0GyroscopeSetFullScale(devp, fs) \ 1016 (devp)->vmt->acc_set_full_scale(devp, fs) LSM6DS0 configuration structure.
lsm6ds0_state_t
Driver state machine possible states.
Type of I2C driver configuration structure.
lsm6ds0_acc_fs_t
LSM6DS0 accelerometer subsystem full scale.
float * gyrosensitivity
LSM6DS0 gyroscope subsystem initial sensitivity.
LSM6DS0 virtual methods table.
lsm6ds0_gyro_hp_t gyrohpfenable
LSM6DS0 gyroscope subsystem high pass filter.
I2CDriver * i2cp
I2C driver associated to this LSM6DS0.
float * accsensitivity
LSM6DS0 accelerometer subsystem initial sensitivity.
lsm6ds0_gyro_lp_t
LSM6DS0 gyroscope subsystem low mode configuration.
LSM6DS0 6-axis accelerometer/gyroscope class.
lsm6ds0_gyro_lp_t gyrolowmodecfg
LSM6DS0 gyroscope subsystem low mode configuration.
void lsm6ds0ObjectInit(LSM6DS0Driver *devp)
Initializes an instance.
BaseGyroscope gyro_if
Base gyroscope interface.
lsm6ds0_end_t endianness
LSM6DS0 endianness.
Generic gyroscope interface header.
const struct LSM6DS0VMT * vmt
Virtual Methods Table.
#define _lsm6ds0_data
LSM6DS0Driver specific data.
lsm6ds0_sad_t
Accelerometer and Gyroscope Slave Address.
void lsm6ds0Stop(LSM6DS0Driver *devp)
Deactivates the LSM6DS0 Complex Driver peripheral.
lsm6ds0_gyro_fs_t
LSM6DS0 gyroscope subsystem full scale.
lsm6ds0_acc_fs_t accfullscale
LSM6DS0 accelerometer subsystem full scale.
Structure representing an I2C driver.
lsm6ds0_sad_t slaveaddress
LSM6DS0 Slave Address.
lsm6ds0_acc_odr_t
LSM6DS0 accelerometer subsystem output data rate.
lsm6ds0_gyro_odr_t gyrooutdatarate
LSM6DS0 gyroscope subsystem output data rate.
Structure representing an SPI driver.
lsm6ds0_gyro_out_sel_t gyrooutsel
LSM6DS0 gyroscope subsystem output selection.
lsm6ds0_gyro_fs_t gyrofullscale
LSM6DS0 gyroscope subsystem full scale.
lsm6ds0_gyro_out_sel_t
LSM6DS0 gyroscope subsystem output selection.
BaseAccelerometer acc_if
Base accelerometer interface.
lsm6ds0_bdu_t
LSM6DS0 block data update.
Generic accelerometer interface header.
SPIDriver * spip
SPI driver associated to this LSM6DS0.
lsm6ds0_acc_dec_t accdecmode
LSM6DS0 accelerometer subsystem decimation mode.
lsm6ds0_end_t
LSM6DS0 endianness.
Driver configuration structure.
void lsm6ds0Start(LSM6DS0Driver *devp, const LSM6DS0Config *config)
Configures and activates LSM6DS0 Complex Driver peripheral.
lsm6ds0_gyro_hpcf_t gyrohpcfg
LSM6DS0 gyroscope subsystem high pass filter configuration.
lsm6ds0_bdu_t blockdataupdate
LSM6DS0 block data update.
lsm6ds0_acc_dec_t
LSM6DS0 accelerometer subsystem decimation mode.
lsm6ds0_gyro_hpcf_t
LSM6DS0 gyroscope subsystem high pass filter configuration.
const SPIConfig * accspicfg
SPI configuration associated to this LSM6DS0 accelerometer subsystem.
Base accelerometer class.
float * accbias
LSM6DS0 accelerometer subsystem initial bias.
lsm6ds0_acc_odr_t accoutdatarate
LSM6DS0 accelerometer subsystem output data rate.
const I2CConfig * i2ccfg
I2C configuration associated to this LSM6DS0 accelerometer subsystem.
#define _lsm6ds0_methods
LSM6DS0 specific methods with inherited ones.
lsm6ds0_gyro_hp_t
LSM6DS0 gyroscope subsystem high pass filter.
lsm6ds0_gyro_odr_t
LSM6DS0 gyroscope subsystem output data rate.
float * gyrobias
LSM6DS0 gyroscope subsystem initial bias.