39#define LIS3DH_WHO_AM_I_RESPONSE (0x33)
45#define LIS3DH_REG_STATUS_AUX (0x07)
46#define LIS3DH_REG_OUT_AUX_ADC1_L (0x08)
47#define LIS3DH_REG_OUT_AUX_ADC1_H (0x09)
48#define LIS3DH_REG_OUT_AUX_ADC2_L (0x0A)
49#define LIS3DH_REG_OUT_AUX_ADC2_H (0x0B)
50#define LIS3DH_REG_OUT_AUX_ADC3_L (0x0C)
51#define LIS3DH_REG_OUT_AUX_ADC3_H (0x0D)
52#define LIS3DH_REG_INT_COUNTER_REG (0x0E)
53#define LIS3DH_REG_WHO_AM_I (0x0F)
54#define LIS3DH_REG_TEMP_CFG_REG (0x1F)
55#define LIS3DH_REG_CTRL_REG1 (0x20)
56#define LIS3DH_REG_CTRL_REG2 (0x21)
57#define LIS3DH_REG_CTRL_REG3 (0x22)
58#define LIS3DH_REG_CTRL_REG4 (0x23)
59#define LIS3DH_REG_CTRL_REG5 (0x24)
60#define LIS3DH_REG_CTRL_REG6 (0x25)
61#define LIS3DH_REG_REFERENCE (0x26)
62#define LIS3DH_REG_STATUS_REG (0x27)
63#define LIS3DH_REG_OUT_X_L (0x28)
64#define LIS3DH_REG_OUT_X_H (0x29)
65#define LIS3DH_REG_OUT_Y_L (0x2A)
66#define LIS3DH_REG_OUT_Y_H (0x2B)
67#define LIS3DH_REG_OUT_Z_L (0x2C)
68#define LIS3DH_REG_OUT_Z_H (0x2D)
69#define LIS3DH_REG_FIFO_CTRL_REG (0x2E)
70#define LIS3DH_REG_FIFO_SRC_REG (0x2F)
71#define LIS3DH_REG_INT1_CFG (0x30)
72#define LIS3DH_REG_INT1_SOURCE (0x31)
73#define LIS3DH_REG_INT1_THS (0x32)
74#define LIS3DH_REG_INT1_DURATION (0x33)
75#define LIS3DH_REG_CLICK_CFG (0x38)
76#define LIS3DH_REG_CLICK_SRC (0x39)
77#define LIS3DH_REG_CLICK_THS (0x3A)
78#define LIS3DH_REG_TIME_LIMIT (0x3B)
79#define LIS3DH_REG_TIME_LATENCY (0x3C)
80#define LIS3DH_REG_TIME_WINDOW (0x3D)
99#define LIS3DH_TEMP_CFG_REG_ADC_PD_MASK (1 << 7)
107#define LIS3DH_TEMP_CFG_REG_TEMP_EN_MASK (1 << 6)
117#define LIS3DH_CTRL_REG1_ODR_SHIFT (4)
121#define LIS3DH_CTRL_REG1_ODR3_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 3))
125#define LIS3DH_CTRL_REG1_ODR2_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 2))
129#define LIS3DH_CTRL_REG1_ODR1_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 1))
133#define LIS3DH_CTRL_REG1_ODR0_MASK (1 << LIS3DH_CTRL_REG1_ODR_SHIFT)
143#define LIS3DH_CTRL_REG1_ODR_MASK (LIS3DH_CTRL_REG1_ODR3_MASK | \
144 LIS3DH_CTRL_REG1_ODR2_MASK | \
145 LIS3DH_CTRL_REG1_ODR1_MASK | \
146 LIS3DH_CTRL_REG1_ODR0_MASK)
155#define LIS3DH_CTRL_REG1_LPEN_MASK (1 << 3)
159#define LIS3DH_CTRL_REG1_ZEN_SHIFT (2)
168#define LIS3DH_CTRL_REG1_ZEN_MASK (1 << LIS3DH_CTRL_REG1_ZEN_SHIFT)
172#define LIS3DH_CTRL_REG1_YEN_SHIFT (1)
181#define LIS3DH_CTRL_REG1_YEN_MASK (1 << LIS3DH_CTRL_REG1_YEN_SHIFT)
185#define LIS3DH_CTRL_REG1_XEN_SHIFT (0)
194#define LIS3DH_CTRL_REG1_XEN_MASK (1 << LIS3DH_CTRL_REG1_XEN_SHIFT)
198#define LIS3DH_CTRL_REG1_XYZEN_SHIFT (0)
202#define LIS3DH_CTRL_REG1_XYZEN_MASK (LIS3DH_CTRL_REG1_XEN_MASK | \
203 LIS3DH_CTRL_REG1_YEN_MASK | LIS3DH_CTRL_REG1_ZEN_MASK)
208#define LIS3DH_AXES_X (LIS3DH_CTRL_REG1_XEN_MASK)
212#define LIS3DH_AXES_Y (LIS3DH_CTRL_REG1_YEN_MASK)
216#define LIS3DH_AXES_Z (LIS3DH_CTRL_REG1_ZEN_MASK)
222#define LIS3DH_AXES_XYZ (LIS3DH_CTRL_REG1_XYZEN_MASK)
235#define LIS3DH_CTRL_REG2_HPM1_MASK (1 << 7)
243#define LIS3DH_CTRL_REG2_HPM0_MASK (1 << 6)
247#define LIS3DH_CTRL_REG2_HPCF2_MASK (1 << 5)
251#define LIS3DH_CTRL_REG2_HPCF1_MASK (1 << 4)
260#define LIS3DH_CTRL_REG2_FDS_MASK (1 << 3)
267#define LIS3DH_CTRL_REG2_HPCLICK_MASK (1 << 2)
274#define LIS3DH_CTRL_REG2_HPIS2_MASK (1 << 1)
281#define LIS3DH_CTRL_REG2_HPIS1_MASK (1 << 0)
296#define LIS3DH_CTRL_REG3_I1_CLICK_MASK (1 << 7)
305#define LIS3DH_CTRL_REG3_I1_AOI1_MASK (1 << 6)
314#define LIS3DH_CTRL_REG3_I1_AOI2_MASK (1 << 5)
323#define LIS3DH_CTRL_REG3_I1_DRDY1_MASK (1 << 4)
332#define LIS3DH_CTRL_REG3_I1_DRDY2_MASK (1 << 3)
341#define LIS3DH_CTRL_REG3_I1_WTM_MASK (1 << 2)
350#define LIS3DH_CTRL_REG3_I1_OVERRUN_MASK (1 << 1)
365#define LIS3DH_CTRL_REG4_BDU_MASK (1 << 7)
369#define LIS3DH_CTRL_REG4_BDU_ENABLE (LIS3DH_CTRL_REG4_BDU_MASK)
373#define LIS3DH_CTRL_REG4_BDU_DISABLE (0)
382#define LIS3DH_CTRL_REG4_BLE_MASK (1 << 6)
386#define LIS3DH_CTRL_REG4_BLE_LITTLE_ENDIAN (0)
390#define LIS3DH_CTRL_REG4_BLE_BIG_ENDIAN (LIS3DH_CTRL_REG4_BLE_MASK)
394#define LIS3DH_CTRL_REG4_FS1_MASK (1 << 5)
398#define LIS3DH_CTRL_REG4_FS0_MASK (1 << 4)
402#define LIS3DH_CTRL_REG4_FS_MASK (LIS3DH_CTRL_REG4_FS1_MASK | \
403 LIS3DH_CTRL_REG4_FS0_MASK)
407#define LIS3DH_CTRL_REG4_SCALE_2G (0)
411#define LIS3DH_CTRL_REG4_SCALE_4G (LIS3DH_CTRL_REG4_FS0_MASK)
415#define LIS3DH_CTRL_REG4_SCALE_8G (LIS3DH_CTRL_REG4_FS1_MASK)
419#define LIS3DH_CTRL_REG4_SCALE_16G (LIS3DH_CTRL_REG4_FS1_MASK | LIS3DH_CTRL_REG4_FS0_MASK)
428#define LIS3DH_CTRL_REG4_HR_MASK (1 << 3)
439#define LIS3DH_CTRL_REG4_ST1_MASK (1 << 2)
443#define LIS3DH_CTRL_REG4_ST0_MASK (1 << 1)
452#define LIS3DH_CTRL_REG4_SIM_MASK (1 << 0)
461#define LIS3DH_CTRL_REG5_REBOOT_MASK (1 << 7)
470#define LIS3DH_CTRL_REG5_FIFO_EN_MASK (1 << 6)
482#define LIS3DH_CTRL_REG5_LIR_I1_MASK (1 << 3)
488#define LIS3DH_CTRL_REG5_D4D_I1_MASK (1 << 2)
503#define LIS3DH_STATUS_REG_ZYXOR_MASK (1 << 7)
512#define LIS3DH_STATUS_REG_ZOR_MASK (1 << 6)
521#define LIS3DH_STATUS_REG_YOR_MASK (1 << 5)
530#define LIS3DH_STATUS_REG_XOR_MASK (1 << 4)
539#define LIS3DH_STATUS_REG_ZYXDA_MASK (1 << 3)
548#define LIS3DH_STATUS_REG_ZDA_MASK (1 << 2)
557#define LIS3DH_STATUS_REG_YDA_MASK (1 << 1)
566#define LIS3DH_STATUS_REG_XDA_MASK (1 << 0)
573#define LIS3DH_FIFO_CTRL_REG_FM_SHIFT (6)
574#define LIS3DH_FIFO_CTRL_REG_FM1_MASK (1 << 7)
575#define LIS3DH_FIFO_CTRL_REG_FM0_MASK (1 << 6)
576#define LIS3DH_FIFO_CTRL_REG_FM_MASK (LIS3DH_FIFO_CTRL_REG_FM1_MASK | \
577 LIS3DH_FIFO_CTRL_REG_FM0_MASK)
578#define LIS3DH_FIFO_CTRL_REG_TR_MASK (1 << 5)
579#define LIS3DH_FIFO_CTRL_REG_FTH4_MASK (1 << 4)
580#define LIS3DH_FIFO_CTRL_REG_FTH3_MASK (1 << 3)
581#define LIS3DH_FIFO_CTRL_REG_FTH2_MASK (1 << 2)
582#define LIS3DH_FIFO_CTRL_REG_FTH1_MASK (1 << 1)
583#define LIS3DH_FIFO_CTRL_REG_FTH0_MASK (1 << 0)
584#define LIS3DH_FIFO_CTRL_REG_FTH_SHIFT (0)
585#define LIS3DH_FIFO_CTRL_REG_FTH_MASK (LIS3DH_FIFO_CTRL_REG_FTH0_MASK | \
586 LIS3DH_FIFO_CTRL_REG_FTH1_MASK | \
587 LIS3DH_FIFO_CTRL_REG_FTH2_MASK | \
588 LIS3DH_FIFO_CTRL_REG_FTH3_MASK | \
589 LIS3DH_FIFO_CTRL_REG_FTH4_MASK)
596#define LIS3DH_FIFO_SRC_REG_WTM_MASK (1 << 7)
597#define LIS3DH_FIFO_SRC_REG_OVRN_FIFO_MASK (1 << 6)
598#define LIS3DH_FIFO_SRC_REG_EMPTY_MASK (1 << 5)
599#define LIS3DH_FIFO_SRC_REG_FSS4_MASK (1 << 4)
600#define LIS3DH_FIFO_SRC_REG_FSS3_MASK (1 << 3)
601#define LIS3DH_FIFO_SRC_REG_FSS2_MASK (1 << 2)
602#define LIS3DH_FIFO_SRC_REG_FSS1_MASK (1 << 1)
603#define LIS3DH_FIFO_SRC_REG_FSS0_MASK (1 << 0)
604#define LIS3DH_FIFO_SRC_REG_FSS_SHIFT (0)
605#define LIS3DH_FIFO_SRC_REG_FSS_MASK (LIS3DH_FIFO_SRC_REG_FSS0_MASK | \
606 LIS3DH_FIFO_SRC_REG_FSS1_MASK | \
607 LIS3DH_FIFO_SRC_REG_FSS2_MASK | \
608 LIS3DH_FIFO_SRC_REG_FSS3_MASK | \
609 LIS3DH_FIFO_SRC_REG_FSS4_MASK)
619#define LIS3DH_SPI_WRITE_MASK (0 << 7)
623#define LIS3DH_SPI_READ_MASK (1 << 7)
627#define LIS3DH_SPI_MULTI_MASK (1 << 6)
631#define LIS3DH_SPI_SINGLE_MASK (0 << 6)
635#define LIS3DH_SPI_ADDRESS_MASK (0x3F)
641#define LIS3DH_ADC_DATA_SIZE (2U)
652#define LIS3DH_FIFO_MODE_BYPASS (0x00 << LIS3DH_FIFO_CTRL_REG_FM_SHIFT)
656#define LIS3DH_FIFO_MODE_FIFO (0x01 << LIS3DH_FIFO_CTRL_REG_FM_SHIFT)
660#define LIS3DH_FIFO_MODE_STREAM (0x02 << LIS3DH_FIFO_CTRL_REG_FM_SHIFT)
664#define LIS3DH_FIFO_MODE_STREAM_TO_FIFO (0x03 << LIS3DH_FIFO_CTRL_REG_FM_SHIFT)
676#define LIS3DH_ODR_POWERDOWN (0x00 << LIS3DH_CTRL_REG1_ODR_SHIFT)
680#define LIS3DH_ODR_1Hz (0x01 << LIS3DH_CTRL_REG1_ODR_SHIFT)
684#define LIS3DH_ODR_10Hz (0x02 << LIS3DH_CTRL_REG1_ODR_SHIFT)
688#define LIS3DH_ODR_25Hz (0x03 << LIS3DH_CTRL_REG1_ODR_SHIFT)
692#define LIS3DH_ODR_50Hz (0x04 << LIS3DH_CTRL_REG1_ODR_SHIFT)
696#define LIS3DH_ODR_100Hz (0x05 << LIS3DH_CTRL_REG1_ODR_SHIFT)
700#define LIS3DH_ODR_200Hz (0x06 << LIS3DH_CTRL_REG1_ODR_SHIFT)
704#define LIS3DH_ODR_400Hz (0x07 << LIS3DH_CTRL_REG1_ODR_SHIFT)
708#define LIS3DH_ODR_LP1600Hz (0x08 << LIS3DH_CTRL_REG1_ODR_SHIFT)
713#define LIS3DH_ODR_NP1250Hz (0x09 << LIS3DH_CTRL_REG1_ODR_SHIFT)
718#define LIS3DH_ODR_LP5000HZ (0x09 << LIS3DH_CTRL_REG1_ODR_SHIFT)
Low-level GPIO peripheral driver interface definitions.
int lis3dh_read_aux_adc3(const lis3dh_t *dev, int16_t *out)
Read auxiliary ADC channel 3 data from the accelerometer.
int lis3dh_get_fifo_level(const lis3dh_t *dev)
Get the current number of elements in the FIFO.
int lis3dh_set_int1(const lis3dh_t *dev, const uint8_t mode)
Set INT1 pin function.
int lis3dh_set_scale(lis3dh_t *dev, const uint8_t scale)
Set the full scale range of the sensor.
int lis3dh_init(lis3dh_t *dev, const lis3dh_params_t *params)
Initialize a LIS3DH sensor instance.
int lis3dh_read_xyz(const lis3dh_t *dev, lis3dh_data_t *acc_data)
Read 3D acceleration data from the accelerometer.
int lis3dh_set_aux_adc(const lis3dh_t *dev, const uint8_t enable, const uint8_t temperature)
Turn on/off power to the auxiliary ADC in LIS3DH.
int lis3dh_set_fifo(const lis3dh_t *dev, const uint8_t mode, const uint8_t watermark)
Enable/disable the FIFO.
int lis3dh_set_odr(const lis3dh_t *dev, const uint8_t odr)
Set the output data rate of the sensor.
int lis3dh_set_axes(const lis3dh_t *dev, const uint8_t axes)
Enable/disable accelerometer axes.
int lis3dh_read_aux_adc2(const lis3dh_t *dev, int16_t *out)
Read auxiliary ADC channel 2 data from the accelerometer.
int lis3dh_read_aux_adc1(const lis3dh_t *dev, int16_t *out)
Read auxiliary ADC channel 1 data from the accelerometer.
Low-level SPI peripheral driver interface definition.
Result vector for accelerometer measurement.
int16_t acc_y
Acceleration in the Y direction in milli-G.
int16_t acc_z
Acceleration in the Z direction in milli-G.
int16_t acc_x
Acceleration in the X direction in milli-G.
Configuration parameters for LIS3DH devices.
uint8_t odr
Default sensor ODR setting: LIS3DH_ODR_xxxHz.
gpio_t int2
INT2 (DRDY) pin.
gpio_t cs
Chip select pin.
uint8_t scale
Default sensor scale: 2, 4, 8, or 16 (G)
spi_clk_t clk
designated clock speed of the SPI bus
spi_t spi
SPI device the sensor is connected to.
Device descriptor for LIS3DH sensors.
uint16_t scale
Internal sensor scale.
lis3dh_params_t params
Device initialization parameters.