54 #define LIS3DH_WHO_AM_I_RESPONSE (0b00110011)
61 OUT_AUX_ADC1_L = 0x08,
62 OUT_AUX_ADC1_H = 0x09,
63 OUT_AUX_ADC2_L = 0x0A,
64 OUT_AUX_ADC2_H = 0x0B,
65 OUT_AUX_ADC3_L = 0x0C,
66 OUT_AUX_ADC3_H = 0x0D,
67 INT_COUNTER_REG = 0x0E,
107 #define LIS3DH_TEMP_CFG_REG_ADC_PD_MASK (1 << 7)
112 #define LIS3DH_TEMP_CFG_REG_TEMP_EN_MASK (1 << 6)
118 #define LIS3DH_CTRL_REG1_ODR_SHIFT (4)
119 #define LIS3DH_CTRL_REG1_ODR3_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 3))
120 #define LIS3DH_CTRL_REG1_ODR2_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 2))
121 #define LIS3DH_CTRL_REG1_ODR1_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 1))
122 #define LIS3DH_CTRL_REG1_ODR0_MASK (1 << LIS3DH_CTRL_REG1_ODR_SHIFT)
124 #define LIS3DH_CTRL_REG1_ODR_MASK (LIS3DH_CTRL_REG1_ODR3_MASK | \
125 LIS3DH_CTRL_REG1_ODR2_MASK | \
126 LIS3DH_CTRL_REG1_ODR1_MASK | \
127 LIS3DH_CTRL_REG1_ODR0_MASK)
132 #define LIS3DH_CTRL_REG1_ODR_POWERDOWN (0)
133 #define LIS3DH_CTRL_REG1_ODR_1HZ (LIS3DH_CTRL_REG1_ODR0_MASK)
134 #define LIS3DH_CTRL_REG1_ODR_10HZ (LIS3DH_CTRL_REG1_ODR1_MASK)
135 #define LIS3DH_CTRL_REG1_ODR_25HZ (LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
136 #define LIS3DH_CTRL_REG1_ODR_50HZ (LIS3DH_CTRL_REG1_ODR2_MASK)
137 #define LIS3DH_CTRL_REG1_ODR_100HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
138 #define LIS3DH_CTRL_REG1_ODR_200HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK)
139 #define LIS3DH_CTRL_REG1_ODR_400HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
140 #define LIS3DH_CTRL_REG1_ODR_400HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
141 #define LIS3DH_CTRL_REG1_ODR_LP1600HZ (LIS3DH_CTRL_REG1_ODR3_MASK)
142 #define LIS3DH_CTRL_REG1_ODR_LP5000HZ (LIS3DH_CTRL_REG1_ODR3_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
143 #define LIS3DH_CTRL_REG1_ODR_NP1250HZ (LIS3DH_CTRL_REG1_ODR3_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
150 ODR_POWERDOWN = 0x00,
159 ODR_NP1250Hz_LP5000HZ = 0x09
166 #define LIS3DH_CTRL_REG1_LPEN_MASK (1 << 3)
168 #define LIS3DH_CTRL_REG1_ZEN_SHIFT (2)
173 #define LIS3DH_CTRL_REG1_ZEN_MASK (1 << LIS3DH_CTRL_REG1_ZEN_SHIFT)
175 #define LIS3DH_CTRL_REG1_YEN_SHIFT (1)
180 #define LIS3DH_CTRL_REG1_YEN_MASK (1 << LIS3DH_CTRL_REG1_YEN_SHIFT)
182 #define LIS3DH_CTRL_REG1_XEN_SHIFT (0)
187 #define LIS3DH_CTRL_REG1_XEN_MASK (1 << LIS3DH_CTRL_REG1_XEN_SHIFT)
189 #define LIS3DH_CTRL_REG1_XYZEN_SHIFT (0)
190 #define LIS3DH_CTRL_REG1_XYZEN_MASK (LIS3DH_CTRL_REG1_XEN_MASK | \
191 LIS3DH_CTRL_REG1_YEN_MASK | LIS3DH_CTRL_REG1_ZEN_MASK)
193 #define LIS3DH_AXES_X (LIS3DH_CTRL_REG1_XEN_MASK)
194 #define LIS3DH_AXES_Y (LIS3DH_CTRL_REG1_YEN_MASK)
195 #define LIS3DH_AXES_Z (LIS3DH_CTRL_REG1_ZEN_MASK)
199 #define LIS3DH_AXES_XYZ (LIS3DH_CTRL_REG1_XYZEN_MASK)
205 #define LIS3DH_CTRL_REG2_HPM1_MASK (1 << 7)
206 #define LIS3DH_CTRL_REG2_HPM0_MASK (1 << 6)
211 #define LIS3DH_CTRL_REG2_HPCF2_MASK (1 << 5)
212 #define LIS3DH_CTRL_REG2_HPCF1_MASK (1 << 4)
218 #define LIS3DH_CTRL_REG2_FDS_MASK (1 << 3)
224 #define LIS3DH_CTRL_REG2_HPCLICK_MASK (1 << 2)
230 #define LIS3DH_CTRL_REG2_HPIS2_MASK (1 << 1)
231 #define LIS3DH_CTRL_REG2_HPIS1_MASK (1 << 0)
237 #define LIS3DH_CTRL_REG3_I1_CLICK_MASK (1 << 7)
243 #define LIS3DH_CTRL_REG3_I1_AOI1_MASK (1 << 6)
248 #define LIS3DH_CTRL_REG3_I1_AOI2_MASK (1 << 5)
253 #define LIS3DH_CTRL_REG3_I1_DRDY1_MASK (1 << 4)
258 #define LIS3DH_CTRL_REG3_I1_DRDY2_MASK (1 << 3)
263 #define LIS3DH_CTRL_REG3_I1_WTM_MASK (1 << 2)
268 #define LIS3DH_CTRL_REG3_I1_OVERRUN_MASK (1 << 1)
275 #define LIS3DH_CTRL_REG4_BDU_MASK (1 << 7)
276 #define LIS3DH_CTRL_REG4_BDU_ENABLE (LIS3DH_CTRL_REG4_BDU_MASK)
277 #define LIS3DH_CTRL_REG4_BDU_DISABLE (0)
283 #define LIS3DH_CTRL_REG4_BLE_MASK (1 << 6)
285 #define LIS3DH_CTRL_REG4_BLE_LITTLE_ENDIAN (0)
286 #define LIS3DH_CTRL_REG4_BLE_BIG_ENDIAN (LIS3DH_CTRL_REG4_BLE_MASK)
292 #define LIS3DH_CTRL_REG4_FS1_MASK (1 << 5)
293 #define LIS3DH_CTRL_REG4_FS0_MASK (1 << 4)
294 #define LIS3DH_CTRL_REG4_FS_MASK (LIS3DH_CTRL_REG4_FS1_MASK | LIS3DH_CTRL_REG4_FS0_MASK)
296 #define LIS3DH_CTRL_REG4_FS_2G (0)
297 #define LIS3DH_CTRL_REG4_FS_4G (LIS3DH_CTRL_REG4_FS0_MASK)
298 #define LIS3DH_CTRL_REG4_FS_8G (LIS3DH_CTRL_REG4_FS1_MASK)
299 #define LIS3DH_CTRL_REG4_FS_16G (LIS3DH_CTRL_REG4_FS1_MASK | LIS3DH_CTRL_REG4_FS0_MASK)
315 #define LIS3DH_CTRL_REG4_HR_MASK (1 << 3)
321 #define LIS3DH_CTRL_REG4_ST1_MASK (1 << 2)
322 #define LIS3DH_CTRL_REG4_ST0_MASK (1 << 1)
328 #define LIS3DH_CTRL_REG4_SIM_MASK (1 << 0)
334 #define LIS3DH_CTRL_REG5_REBOOT_MASK (1 << 7)
340 #define LIS3DH_CTRL_REG5_FIFO_EN_MASK (1 << 6)
347 #define LIS3DH_CTRL_REG5_LIR_I1_MASK (1 << 3)
352 #define LIS3DH_CTRL_REG5_D4D_I1_MASK (1 << 2)
358 #define LIS3DH_STATUS_REG_ZYXOR_MASK (1 << 7)
365 #define LIS3DH_STATUS_REG_ZOR_MASK (1 << 6)
372 #define LIS3DH_STATUS_REG_YOR_MASK (1 << 5)
379 #define LIS3DH_STATUS_REG_XOR_MASK (1 << 4)
385 #define LIS3DH_STATUS_REG_ZYXDA_MASK (1 << 3)
392 #define LIS3DH_STATUS_REG_ZDA_MASK (1 << 2)
399 #define LIS3DH_STATUS_REG_YDA_MASK (1 << 1)
406 #define LIS3DH_STATUS_REG_XDA_MASK (1 << 0)
408 #define LIS3DH_FIFO_CTRL_REG_FM_SHIFT (6)
409 #define LIS3DH_FIFO_CTRL_REG_FM1_MASK (1 << 7)
410 #define LIS3DH_FIFO_CTRL_REG_FM0_MASK (1 << 6)
411 #define LIS3DH_FIFO_CTRL_REG_FM_MASK (LIS3DH_FIFO_CTRL_REG_FM1_MASK | \
412 LIS3DH_FIFO_CTRL_REG_FM0_MASK)
414 #define LIS3DH_FIFO_CTRL_REG_TR_MASK (1 << 5)
415 #define LIS3DH_FIFO_CTRL_REG_FTH4_MASK (1 << 4)
416 #define LIS3DH_FIFO_CTRL_REG_FTH3_MASK (1 << 3)
417 #define LIS3DH_FIFO_CTRL_REG_FTH2_MASK (1 << 2)
418 #define LIS3DH_FIFO_CTRL_REG_FTH1_MASK (1 << 1)
419 #define LIS3DH_FIFO_CTRL_REG_FTH0_MASK (1 << 0)
420 #define LIS3DH_FIFO_CTRL_REG_FTH_SHIFT (0)
421 #define LIS3DH_FIFO_CTRL_REG_FTH_MASK \
422 (LIS3DH_FIFO_CTRL_REG_FTH0_MASK | \
423 LIS3DH_FIFO_CTRL_REG_FTH1_MASK | \
424 LIS3DH_FIFO_CTRL_REG_FTH2_MASK | \
425 LIS3DH_FIFO_CTRL_REG_FTH3_MASK | \
426 LIS3DH_FIFO_CTRL_REG_FTH4_MASK)
433 FIFO_MODE_BYPASS = 0x00,
434 FIFO_MODE_FIFO = 0x01,
435 FIFO_MODE_STREAM = 0x02,
436 FIFO_MODE_STREAM_TO_FIFO = 0x03
439 #define LIS3DH_FIFO_SRC_REG_WTM_MASK (1 << 7)
440 #define LIS3DH_FIFO_SRC_REG_OVRN_FIFO_MASK (1 << 6)
441 #define LIS3DH_FIFO_SRC_REG_EMPTY_MASK (1 << 5)
442 #define LIS3DH_FIFO_SRC_REG_FSS4_MASK (1 << 4)
443 #define LIS3DH_FIFO_SRC_REG_FSS3_MASK (1 << 3)
444 #define LIS3DH_FIFO_SRC_REG_FSS2_MASK (1 << 2)
445 #define LIS3DH_FIFO_SRC_REG_FSS1_MASK (1 << 1)
446 #define LIS3DH_FIFO_SRC_REG_FSS0_MASK (1 << 0)
447 #define LIS3DH_FIFO_SRC_REG_FSS_SHIFT (0)
448 #define LIS3DH_FIFO_SRC_REG_FSS_MASK \
449 (LIS3DH_FIFO_SRC_REG_FSS0_MASK | \
450 LIS3DH_FIFO_SRC_REG_FSS1_MASK | \
451 LIS3DH_FIFO_SRC_REG_FSS2_MASK | \
452 LIS3DH_FIFO_SRC_REG_FSS3_MASK | \
453 LIS3DH_FIFO_SRC_REG_FSS4_MASK)
455 #define LIS3DH_SPI_WRITE_MASK (0 << 7)
459 #define LIS3DH_SPI_READ_MASK (1 << 7)
463 #define LIS3DH_SPI_MULTI_MASK (1 << 6)
467 #define LIS3DH_SPI_SINGLE_MASK (0 << 6)
471 #define LIS3DH_SPI_ADDRESS_MASK (0x3F)
476 #define LIS3DH_ACC_DATA_SIZE (2)
504 uint8_t *buffer, uint8_t count);
506 const uint8_t *buffer, uint8_t count);
int16_t lis3dh_read_aux_adc3()
Get one reading from the third channel of the auxiliary ADC.
void lis3dh_set_fifo(const uint8_t enable)
Enable/disable the FIFO.
lis3dh_reg_addr_t
All LIS3DH hardware registers are enumerated here.
int16_t lis3dh_read_int16(const lis3dh_reg_addr_t lsb_addr)
Read a 16-bit integer from the LIS3DH.
lis3dh_fifo_mode_t
Allowed FIFO modes.
void lis3dh_set_fifo_mode(const lis3dh_fifo_mode_t mode)
Set the FIFO mode.
void lis3dh_memcpy_from_device(const lis3dh_reg_addr_t start_address, uint8_t *buffer, uint8_t count)
Read multiple bytes from the LIS3DH.
void lis3dh_memcpy_to_device(const lis3dh_reg_addr_t start_address, const uint8_t *buffer, uint8_t count)
Write multiple bytes to the LIS3DH.
lis3dh_scale_t
Scale parameters, use these names when calling lis3dh_set_scale(scale).
int16_t lis3dh_read_yaxis()
Get one Y-axis reading from the accelerometer.
void lis3dh_arch_init()
Perform the platform specific part of the initialization process of the LIS3DH.
void lis3dh_set_scale(const lis3dh_scale_t scale)
Set the full scale range of the sensor.
int16_t lis3dh_read_aux_adc2()
Get one reading from the second channel of the auxiliary ADC.
void lis3dh_read_xyz(int16_t *buffer)
Read all three axes in a single transaction.
int16_t lis3dh_read_zaxis()
Get one Z-axis reading from the accelerometer.
lis3dh_odr_t
Allowed values for the Output Data Rate of the sensor.
void lis3dh_set_axes(const uint8_t axes)
Enable/disable accelerometer axes.
void lis3dh_init()
Initialize a LIS3DH accelerometer.
void lis3dh_set_odr(const lis3dh_odr_t odr)
Set the output data rate of the sensor.
void lis3dh_set_bits(const lis3dh_reg_addr_t addr, const uint8_t mask)
Set bits of an 8-bit register on the LIS3DH.
void lis3dh_write_byte(const lis3dh_reg_addr_t addr, const uint8_t value)
Write a single byte to the LIS3DH.
void lis3dh_clear_bits(const lis3dh_reg_addr_t addr, const uint8_t mask)
Clear bits of an 8-bit register on the LIS3DH.
void lis3dh_set_aux_adc(const uint8_t enable, const uint8_t temperature)
Turn on/off power to the auxiliary ADC in LIS3DH.
int16_t lis3dh_read_xaxis()
Get one X-axis reading from the accelerometer.
uint8_t lis3dh_read_byte(const lis3dh_reg_addr_t addr)
Read a single byte from the LIS3DH.
int16_t lis3dh_read_aux_adc1()
Get one reading from the first channel of the auxiliary ADC.