ChibiOS/EX  1.2.0
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)   accelerometerGetAxesNumber(&((devp)->acc_if))
 Return the number of axes of the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerReadRaw(devp, axes)   accelerometerReadRaw(&((devp)->acc_if), axes)
 Retrieves raw data from the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerReadCooked(devp, axes)   accelerometerReadCooked(&((devp)->acc_if), axes)
 Retrieves cooked data from the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerSetBias(devp, bp)   accelerometerSetBias(&((devp)->acc_if), bp)
 Set bias values for the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerResetBias(devp)   accelerometerResetBias(&((devp)->acc_if))
 Reset bias values for the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerSetSensitivity(devp, sp)   accelerometerSetSensitivity(&((devp)->acc_if), sp)
 Set sensitivity values for the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerResetSensitivity(devp)   accelerometerResetSensitivity(&((devp)->acc_if))
 Reset sensitivity values for the BaseAccelerometer. More...
 
#define lsm6ds0AccelerometerSetFullScale(devp, fs)   (devp)->vmt->acc_set_full_scale(devp, fs)
 Changes the LSM6DS0Driver accelerometer fullscale value. More...
 
#define lsm6ds0GyroscopeGetAxesNumber(devp)   gyroscopeGetAxesNumber(&((devp)->gyro_if))
 Return the number of axes of the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeReadRaw(devp, axes)   gyroscopeReadRaw(&((devp)->gyro_if), axes)
 Retrieves raw data from the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeReadCooked(devp, axes)   gyroscopeReadCooked(&((devp)->gyro_if), axes)
 Retrieves cooked data from the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeSampleBias(devp)   gyroscopeSampleBias(&((devp)->gyro_if))
 Samples bias values for the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeSetBias(devp, bp)   gyroscopeSetBias(&((devp)->gyro_if), bp)
 Set bias values for the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeResetBias(devp)   gyroscopeResetBias(&((devp)->gyro_if))
 Reset bias values for the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeSetSensitivity(devp, sp)   gyroscopeSetSensitivity(&((devp)->gyro_if), sp)
 Set sensitivity values for the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeResetSensitivity(devp)   gyroscopeResetSensitivity(&((devp)->gyro_if))
 Reset sensitivity values for the BaseGyroscope. More...
 
#define lsm6ds0GyroscopeSetFullScale(devp, fs)   (devp)->vmt->acc_set_full_scale(devp, fs)
 Changes the LSM6DS0Driver gyroscope fullscale value. More...
 
Version identification
#define EX_LSM6DS0_VERSION   "1.1.2"
 LSM6DS0 driver version string. More...
 
#define EX_LSM6DS0_MAJOR   1
 LSM6DS0 driver version major number. More...
 
#define EX_LSM6DS0_MINOR   1
 LSM6DS0 driver version minor number. More...
 
#define EX_LSM6DS0_PATCH   2
 LSM6DS0 driver version patch number. More...
 
#define LSM6DS0_ACC_NUMBER_OF_AXES   3U
 LSM6DS0 accelerometer subsystem characteristics. More...
 
#define LSM6DS0_GYRO_NUMBER_OF_AXES   3U
 L3GD20 gyroscope system characteristics. More...
 
LSM6DS0 communication interfaces related bit masks
#define LSM6DS0_DI_MASK   0xFF
 
#define LSM6DS0_DI(n)   (1 << n)
 
#define LSM6DS0_AD_MASK   0x7F
 
#define LSM6DS0_AD(n)   (1 << 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. More...
 
#define LSM6DS0_SHARED_SPI   FALSE
 LSM6DS0 shared SPI switch. More...
 
#define LSM6DS0_USE_I2C   TRUE
 LSM6DS0 I2C interface switch. More...
 
#define LSM6DS0_SHARED_I2C   FALSE
 LSM6DS0 shared I2C switch. More...
 
#define LSM6DS0_USE_ADVANCED   FALSE
 LSM6DS0 advanced configurations switch. More...
 
#define LSM6DS0_GYRO_BIAS_ACQ_TIMES   50
 Number of acquisitions for gyroscope bias removal. More...
 
#define LSM6DS0_GYRO_BIAS_SETTLING_US   5000
 Settling time for gyroscope bias removal. More...
 

Functions

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

LSM6DS0 data structures and types.

#define _lsm6ds0_methods_alone
 LSM6DS0 specific methods. More...
 
#define _lsm6ds0_methods
 LSM6DS0 specific methods with inherited ones. More...
 
#define _lsm6ds0_data
 LSM6DS0Driver specific data. More...
 
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 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 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. More...
 

Detailed Description

LSM6DS0 MEMS interface module header.

Definition in file lsm6ds0.h.