ChibiOS 21.11.5
lsm6ds0.h File Reference

LSM6DS0 MEMS interface module header. More...

#include "ex_accelerometer.h"
#include "ex_gyroscope.h"

Go to the source code of this file.

Data Structures

struct  LSM6DS0Config
 LSM6DS0 configuration structure. More...
struct  LSM6DS0VMT
 LSM6DS0 virtual methods table. More...
struct  LSM6DS0Driver
 LSM6DS0 6-axis accelerometer/gyroscope class. More...

Macros

#define lsm6ds0AccelerometerGetAxesNumber(devp)
 Return the number of axes of the BaseAccelerometer.
#define lsm6ds0AccelerometerReadRaw(devp, axes)
 Retrieves raw data from the BaseAccelerometer.
#define lsm6ds0AccelerometerReadCooked(devp, axes)
 Retrieves cooked data from the BaseAccelerometer.
#define lsm6ds0AccelerometerSetBias(devp, bp)
 Set bias values for the BaseAccelerometer.
#define lsm6ds0AccelerometerResetBias(devp)
 Reset bias values for the BaseAccelerometer.
#define lsm6ds0AccelerometerSetSensitivity(devp, sp)
 Set sensitivity values for the BaseAccelerometer.
#define lsm6ds0AccelerometerResetSensitivity(devp)
 Reset sensitivity values for the BaseAccelerometer.
#define lsm6ds0AccelerometerSetFullScale(devp, fs)
 Changes the LSM6DS0Driver accelerometer fullscale value.
#define lsm6ds0GyroscopeGetAxesNumber(devp)
 Return the number of axes of the BaseGyroscope.
#define lsm6ds0GyroscopeReadRaw(devp, axes)
 Retrieves raw data from the BaseGyroscope.
#define lsm6ds0GyroscopeReadCooked(devp, axes)
 Retrieves cooked data from the BaseGyroscope.
#define lsm6ds0GyroscopeSampleBias(devp)
 Samples bias values for the BaseGyroscope.
#define lsm6ds0GyroscopeSetBias(devp, bp)
 Set bias values for the BaseGyroscope.
#define lsm6ds0GyroscopeResetBias(devp)
 Reset bias values for the BaseGyroscope.
#define lsm6ds0GyroscopeSetSensitivity(devp, sp)
 Set sensitivity values for the BaseGyroscope.
#define lsm6ds0GyroscopeResetSensitivity(devp)
 Reset sensitivity values for the BaseGyroscope.
#define lsm6ds0GyroscopeSetFullScale(devp, fs)
 Changes the LSM6DS0Driver gyroscope fullscale value.
Version identification
#define EX_LSM6DS0_VERSION   "1.1.3"
 LSM6DS0 driver version string.
#define EX_LSM6DS0_MAJOR   1
 LSM6DS0 driver version major number.
#define EX_LSM6DS0_MINOR   1
 LSM6DS0 driver version minor number.
#define EX_LSM6DS0_PATCH   3
 LSM6DS0 driver version patch number.
#define LSM6DS0_ACC_NUMBER_OF_AXES   3U
 LSM6DS0 accelerometer subsystem characteristics.
#define LSM6DS0_ACC_2G   2.0f
#define LSM6DS0_ACC_4G   4.0f
#define LSM6DS0_ACC_8G   8.0f
#define LSM6DS0_ACC_16G   16.0f
#define LSM6DS0_ACC_SENS_2G   0.061f
#define LSM6DS0_ACC_SENS_4G   0.122f
#define LSM6DS0_ACC_SENS_8G   0.244f
#define LSM6DS0_ACC_SENS_16G   0.732f
#define LSM6DS0_ACC_BIAS   0.0f
#define LSM6DS0_GYRO_NUMBER_OF_AXES   3U
 L3GD20 gyroscope system characteristics.
#define LSM6DS0_GYRO_245DPS   245.0f
#define LSM6DS0_GYRO_500DPS   500.0f
#define LSM6DS0_GYRO_2000DPS   2000.0f
#define LSM6DS0_GYRO_SENS_245DPS   0.00875f
#define LSM6DS0_GYRO_SENS_500DPS   0.01750f
#define LSM6DS0_GYRO_SENS_2000DPS   0.07000f
#define LSM6DS0_GYRO_BIAS   0.0f
LSM6DS0 communication interfaces related bit masks
#define LSM6DS0_DI_MASK   0xFF
#define LSM6DS0_DI(n)
#define LSM6DS0_AD_MASK   0x7F
#define LSM6DS0_AD(n)
#define LSM6DS0_MS   (1 << 7)
LSM6DS0 register addresses
#define LSM6DS0_AD_ACT_THS   0x04
#define LSM6DS0_AD_ACT_DUR   0x05
#define LSM6DS0_AD_INT_GEN_CFG_XL   0x06
#define LSM6DS0_AD_INT_GEN_THS_X_XL   0x07
#define LSM6DS0_AD_INT_GEN_THS_Y_XL   0x08
#define LSM6DS0_AD_INT_GEN_THS_Z_XL   0x09
#define LSM6DS0_AD_INT_GEN_DUR_XL   0x0A
#define LSM6DS0_AD_REFERENCE_G   0x0B
#define LSM6DS0_AD_INT_CTRL   0x0C
#define LSM6DS0_AD_WHO_AM_I   0x0F
#define LSM6DS0_AD_CTRL_REG1_G   0x10
#define LSM6DS0_AD_CTRL_REG2_G   0x11
#define LSM6DS0_AD_CTRL_REG3_G   0x12
#define LSM6DS0_AD_ORIENT_CFG_G   0x13
#define LSM6DS0_AD_INT_GEN_SRC_G   0x14
#define LSM6DS0_AD_OUT_TEMP_L   0x15
#define LSM6DS0_AD_OUT_TEMP_H   0x16
#define LSM6DS0_AD_STATUS_REG1   0x17
#define LSM6DS0_AD_OUT_X_L_G   0x18
#define LSM6DS0_AD_OUT_X_H_G   0x19
#define LSM6DS0_AD_OUT_Y_L_G   0x1A
#define LSM6DS0_AD_OUT_Y_H_G   0x1B
#define LSM6DS0_AD_OUT_Z_L_G   0x1C
#define LSM6DS0_AD_OUT_Z_H_G   0x1D
#define LSM6DS0_AD_CTRL_REG4   0x1E
#define LSM6DS0_AD_CTRL_REG5_XL   0x1F
#define LSM6DS0_AD_CTRL_REG6_XL   0x20
#define LSM6DS0_AD_CTRL_REG7_XL   0x21
#define LSM6DS0_AD_CTRL_REG8   0x22
#define LSM6DS0_AD_CTRL_REG9   0x23
#define LSM6DS0_AD_CTRL_REG10   0x24
#define LSM6DS0_AD_INT_GEN_SRC_XL   0x26
#define LSM6DS0_AD_STATUS_REG2   0x27
#define LSM6DS0_AD_OUT_X_L_XL   0x28
#define LSM6DS0_AD_OUT_X_H_XL   0x29
#define LSM6DS0_AD_OUT_Y_L_XL   0x2A
#define LSM6DS0_AD_OUT_Y_H_XL   0x2B
#define LSM6DS0_AD_OUT_Z_L_XL   0x2C
#define LSM6DS0_AD_OUT_Z_H_XL   0x2D
#define LSM6DS0_AD_FIFO_CTRL   0x2E
#define LSM6DS0_AD_FIFO_SRC   0x2F
#define LSM6DS0_AD_INT_GEN_CFG_G   0x30
#define LSM6DS0_AD_INT_GEN_THS_XH_G   0x31
#define LSM6DS0_AD_INT_GEN_THS_XL_G   0x32
#define LSM6DS0_AD_INT_GEN_THS_YH_G   0x33
#define LSM6DS0_AD_INT_GEN_THS_YL_G   0x34
#define LSM6DS0_AD_INT_GEN_THS_ZH_G   0x35
#define LSM6DS0_AD_INT_GEN_THS_ZL_G   0x36
#define LSM6DS0_AD_INT_GEN_DUR_G   0x37
LSM6DS0_AD_CTRL_REG1_G register bits definitions
#define LSM6DS0_CTRL_REG1_G   0xFA
#define LSM6DS0_CTRL_REG1_G_BW_G0   (1 << 0)
#define LSM6DS0_CTRL_REG1_G_BW_G1   (1 << 1)
#define LSM6DS0_CTRL_REG1_G_FS_MASK   0x1F
#define LSM6DS0_CTRL_REG1_G_FS_G0   (1 << 3)
#define LSM6DS0_CTRL_REG1_G_FS_G1   (1 << 4)
#define LSM6DS0_CTRL_REG1_G_ODR_G0   (1 << 5)
#define LSM6DS0_CTRL_REG1_G_ODR_G1   (1 << 6)
#define LSM6DS0_CTRL_REG1_G_ODR_G2   (1 << 7)
LSM6DS0_AD_CTRL_REG2_G register bits definitions
#define LSM6DS0_CTRL_REG2_G   0x0F
#define LSM6DS0_CTRL_REG2_G_OUT_SEL0   (1 << 0)
#define LSM6DS0_CTRL_REG2_G_OUT_SEL1   (1 << 1)
#define LSM6DS0_CTRL_REG2_G_INT_SEL0   (1 << 2)
#define LSM6DS0_CTRL_REG2_G_INT_SEL1   (1 << 3)
LSM6DS0_AD_CTRL_REG3_G register bits definitions
#define LSM6DS0_CTRL_REG3_G   0x64
#define LSM6DS0_CTRL_REG3_G_HP_CF0_G   (1 << 0)
#define LSM6DS0_CTRL_REG3_G_HP_CF1_G   (1 << 1)
#define LSM6DS0_CTRL_REG3_G_HP_CF2_G   (1 << 2)
#define LSM6DS0_CTRL_REG3_G_HP_CF3_G   (1 << 3)
#define LSM6DS0_CTRL_REG3_G_HP_EN   (1 << 6)
#define LSM6DS0_CTRL_REG3_G_LP_MODE   (1 << 7)
LSM6DS0_AD_CTRL_REG4 register bits definitions
#define LSM6DS0_CTRL_REG4   0x3A
#define LSM6DS0_CTRL_REG4_4D_XL1   (1 << 0)
#define LSM6DS0_CTRL_REG4_LIR_XL1   (1 << 1)
#define LSM6DS0_CTRL_REG4_XEN_G   (1 << 3)
#define LSM6DS0_CTRL_REG4_YEN_G   (1 << 4)
#define LSM6DS0_CTRL_REG4_ZEN_G   (1 << 5)
LSM6DS0_AD_CTRL_REG5_XL register bits definitions
#define LSM6DS0_CTRL_REG5_XL   0xF8
#define LSM6DS0_CTRL_REG5_XL_XEN_XL   (1 << 3)
#define LSM6DS0_CTRL_REG5_XL_YEN_XL   (1 << 4)
#define LSM6DS0_CTRL_REG5_XL_ZEN_XL   (1 << 5)
#define LSM6DS0_CTRL_REG5_XL_DEC0   (1 << 6)
#define LSM6DS0_CTRL_REG5_XL_DEC1   (1 << 7)
LSM6DS0_AD_CTRL_REG6_XL register bits definitions
#define LSM6DS0_CTRL_REG6_XL   0xFF
#define LSM6DS0_CTRL_REG6_XL_BW_XL0   (1 << 0)
#define LSM6DS0_CTRL_REG6_XL_BW_XL1   (1 << 1)
#define LSM6DS0_CTRL_REG6_XL_BW_SCAL_ODR   (1 << 2)
#define LSM6DS0_CTRL_REG6_XL_FS_MASK   0x1F
#define LSM6DS0_CTRL_REG6_XL_FS0_XL   (1 << 3)
#define LSM6DS0_CTRL_REG6_XL_FS1_XL   (1 << 4)
#define LSM6DS0_CTRL_REG6_XL_ODR_XL0   (1 << 5)
#define LSM6DS0_CTRL_REG6_XL_ODR_XL1   (1 << 6)
#define LSM6DS0_CTRL_REG6_XL_ODR_XL2   (1 << 7)
LSM6DS0_AD_CTRL_REG7_XL register bits definitions
#define LSM6DS0_CTRL_REG7_XL   0xE5
#define LSM6DS0_CTRL_REG7_XL_HPIS1   (1 << 0)
#define LSM6DS0_CTRL_REG7_XL_FDS   (1 << 2)
#define LSM6DS0_CTRL_REG7_XL_DCF0   (1 << 5)
#define LSM6DS0_CTRL_REG7_XL_DCF1   (1 << 6)
#define LSM6DS0_CTRL_REG7_XL_HR   (1 << 7)
LSM6DS0_AD_CTRL_REG8 register bits definitions
#define LSM6DS0_CTRL_REG8   0xFF
#define LSM6DS0_CTRL_REG8_SW_RESET   (1 << 0)
#define LSM6DS0_CTRL_REG8_BLE   (1 << 1)
#define LSM6DS0_CTRL_REG8_IF_ADD_INC   (1 << 2)
#define LSM6DS0_CTRL_REG8_SIM   (1 << 3)
#define LSM6DS0_CTRL_REG8_PP_OD   (1 << 4)
#define LSM6DS0_CTRL_REG8_H_LACTIVE   (1 << 5)
#define LSM6DS0_CTRL_REG8_BDU   (1 << 6)
#define LSM6DS0_CTRL_REG8_BOOT   (1 << 7)
LSM6DS0_AD_CTRL_REG9 register bits definitions
#define LSM6DS0_CTRL_REG9   0x5F
#define LSM6DS0_CTRL_REG9_STOP_ON_FTH   (1 << 0)
#define LSM6DS0_CTRL_REG9_FIFO_EN   (1 << 1)
#define LSM6DS0_CTRL_REG9_I2C_DISABLE   (1 << 2)
#define LSM6DS0_CTRL_REG9_DRDY_MASK_BIT   (1 << 3)
#define LSM6DS0_CTRL_REG9_FIFO_TEMP_EN   (1 << 4)
#define LSM6DS0_CTRL_REG9_SLEEP_G   (1 << 6)
LSM6DS0_AD_CTRL_REG10 register bits definitions
#define LSM6DS0_CTRL_REG10   0x05
#define LSM6DS0_CTRL_REG10_ST_XL   (1 << 0)
#define LSM6DS0_CTRL_REG10_ST_G   (1 << 2)
Configuration options
#define LSM6DS0_USE_SPI   FALSE
 LSM6DS0 SPI interface switch.
#define LSM6DS0_SHARED_SPI   FALSE
 LSM6DS0 shared SPI switch.
#define LSM6DS0_USE_I2C   TRUE
 LSM6DS0 I2C interface switch.
#define LSM6DS0_SHARED_I2C   FALSE
 LSM6DS0 shared I2C switch.
#define LSM6DS0_USE_ADVANCED   FALSE
 LSM6DS0 advanced configurations switch.
#define LSM6DS0_GYRO_BIAS_ACQ_TIMES   50
 Number of acquisitions for gyroscope bias removal.
#define LSM6DS0_GYRO_BIAS_SETTLING_US   5000
 Settling time for gyroscope bias removal.

Functions

void lsm6ds0ObjectInit (LSM6DS0Driver *devp)
 Initializes an instance.
void lsm6ds0Start (LSM6DS0Driver *devp, const LSM6DS0Config *config)
 Configures and activates LSM6DS0 Complex Driver peripheral.
void lsm6ds0Stop (LSM6DS0Driver *devp)
 Deactivates the LSM6DS0 Complex Driver peripheral.

LSM6DS0 data structures and types.

#define _lsm6ds0_methods_alone
 LSM6DS0 specific methods.
#define _lsm6ds0_methods
 LSM6DS0 specific methods with inherited ones.
#define _lsm6ds0_data
 LSM6DS0Driver specific data.
enum  lsm6ds0_sad_t { LSM6DS0_SAD_GND = 0x6A , LSM6DS0_SAD_VCC = 0x6B }
 Accelerometer and Gyroscope Slave Address. More...
enum  lsm6ds0_acc_fs_t { LSM6DS0_ACC_FS_2G = 0x00 , LSM6DS0_ACC_FS_4G = 0x10 , LSM6DS0_ACC_FS_8G = 0x18 , LSM6DS0_ACC_FS_16G = 0x08 }
 LSM6DS0 accelerometer subsystem full scale. More...
enum  lsm6ds0_acc_odr_t {
  LSM6DS0_ACC_ODR_PD = 0x00 , LSM6DS0_ACC_ODR_10Hz = 0x20 , LSM6DS0_ACC_ODR_50Hz = 0x40 , LSM6DS0_ACC_ODR_119Hz = 0x60 ,
  LSM6DS0_ACC_ODR_238Hz = 0x80 , LSM6DS0_ACC_ODR_476Hz = 0xA0 , LSM6DS0_ACC_ODR_952Hz = 0xC0
}
 LSM6DS0 accelerometer subsystem output data rate. More...
enum  lsm6ds0_acc_dec_t { LSM6DS0_ACC_DEC_DISABLED = 0x00 , LSM6DS0_ACC_DEC_X2 = 0x40 , LSM6DS0_ACC_DEC_X4 = 0x80 , LSM6DS0_ACC_DEC_X8 = 0xC0 }
 LSM6DS0 accelerometer subsystem decimation mode. More...
enum  lsm6ds0_gyro_fs_t { LSM6DS0_GYRO_FS_245DPS = 0x00 , LSM6DS0_GYRO_FS_500DPS = 0x08 , LSM6DS0_GYRO_FS_2000DPS = 0x18 }
 LSM6DS0 gyroscope subsystem full scale. More...
enum  lsm6ds0_gyro_odr_t {
  LSM6DS0_GYRO_ODR_PD = 0x00 , LSM6DS0_GYRO_ODR_95HZ_FC_25 = 0x10 , LSM6DS0_GYRO_ODR_14_9HZ_FC_5 = 0X20 , LSM6DS0_GYRO_ODR_59_5HZ_FC_16 = 0X40 ,
  LSM6DS0_GYRO_ODR_119HZ_FC_14 = 0X60 , LSM6DS0_GYRO_ODR_119HZ_FC_31 = 0X61 , LSM6DS0_GYRO_ODR_238HZ_FC_14 = 0X80 , LSM6DS0_GYRO_ODR_238HZ_FC_29 = 0X81 ,
  LSM6DS0_GYRO_ODR_238HZ_FC_63 = 0X82 , LSM6DS0_GYRO_ODR_238HZ_FC_78 = 0X83 , LSM6DS0_GYRO_ODR_476HZ_FC_21 = 0XA0 , LSM6DS0_GYRO_ODR_476HZ_FC_28 = 0XA1 ,
  LSM6DS0_GYRO_ODR_476HZ_FC_57 = 0XA2 , LSM6DS0_GYRO_ODR_476HZ_FC_100 = 0XA3 , LSM6DS0_GYRO_ODR_952HZ_FC_33 = 0XC0 , LSM6DS0_GYRO_ODR_952HZ_FC_40 = 0XC1 ,
  LSM6DS0_GYRO_ODR_952HZ_FC_58 = 0XC2 , LSM6DS0_GYRO_ODR_952HZ_FC_100 = 0XC3
}
 LSM6DS0 gyroscope subsystem output data rate. More...
enum  lsm6ds0_gyro_lp_t { LSM6DS0_GYRO_LP_DISABLED = 0x00 , LSM6DS0_GYRO_LP_ENABLED = 0x80 }
 LSM6DS0 gyroscope subsystem low mode configuration. More...
enum  lsm6ds0_gyro_out_sel_t { LSM6DS0_GYRO_OUT_SEL_0 = 0x00 , LSM6DS0_GYRO_OUT_SEL_1 = 0x01 , LSM6DS0_GYRO_OUT_SEL_2 = 0x02 }
 LSM6DS0 gyroscope subsystem output selection. More...
enum  lsm6ds0_gyro_hp_t { LSM6DS0_GYRO_HP_DISABLED = 0x00 , LSM6DS0_GYRO_HP_ENABLED = 0x40 }
 LSM6DS0 gyroscope subsystem high pass filter. More...
enum  lsm6ds0_gyro_hpcf_t {
  LSM6DS0_GYRO_HPCF_0 = 0x00 , LSM6DS0_GYRO_HPCF_1 = 0x01 , LSM6DS0_GYRO_HPCF_2 = 0x02 , LSM6DS0_GYRO_HPCF_3 = 0x03 ,
  LSM6DS0_GYRO_HPCF_4 = 0x04 , LSM6DS0_GYRO_HPCF_5 = 0x05 , LSM6DS0_GYRO_HPCF_6 = 0x06 , LSM6DS0_GYRO_HPCF_7 = 0x07 ,
  LSM6DS0_GYRO_HPCF_8 = 0x08 , LSM6DS0_GYRO_HPCF_9 = 0x09
}
 LSM6DS0 gyroscope subsystem high pass filter configuration. More...
enum  lsm6ds0_bdu_t { LSM6DS0_BDU_CONTINUOUS = 0x00 , LSM6DS0_BDU_BLOCKED = 0x40 }
 LSM6DS0 block data update. More...
enum  lsm6ds0_end_t { LSM6DS0_END_LITTLE = 0x00 , LSM6DS0_END_BIG = 0x20 }
 LSM6DS0 endianness. More...
enum  lsm6ds0_state_t { LSM6DS0_UNINIT = 0 , LSM6DS0_STOP = 1 , LSM6DS0_READY = 2 }
 Driver state machine possible states. More...
typedef struct LSM6DS0Driver LSM6DS0Driver
 Structure representing a LSM6DS0 driver.

Detailed Description

LSM6DS0 MEMS interface module header.

Definition in file lsm6ds0.h.