51 #include "app_error.h" 61 #define LSM6DS3_ADDR 0x6AU // SA0 LOW. 65 #define FIFO_CTRL1 0x06 66 #define FIFO_CTRL2 0x07 67 #define FIFO_CTRL3 0x08 68 #define FIFO_CTRL4 0x09 69 #define FIFO_CTRL5 0x0A 71 #define INT1_CTRL 0x0D 72 #define INT2_CTRL 0x0E 87 #define MASTER_CONFIG 0x1A 89 #define STATUS_REG 0x1E 91 #define OUT_TEMP_L 0x20 100 #define OUTX_L_XL 0x28 101 #define OUTX_H_XL 0x29 102 #define OUTY_L_XL 0x2A 103 #define OUTY_H_XL 0x2B 104 #define OUTZ_L_XL 0x2C 105 #define OUTZ_H_XL 0x2D 107 #define FIFO_STATUS1 0x3A 108 #define FIFO_STATUS2 0x3B 109 #define FIFO_STATUS3 0x3C 110 #define FIFO_STATUS4 0x3D 111 #define FIFO_DATA_OUT_L 0x3E 112 #define FIFO_DATA_OUT_H 0x3F 114 #define FUNC_SRC 0x53 116 #define TAP_THRS_6D 0X59 117 #define INT_DUR2 0X5A 118 #define WAKE_UP_THRS 0X5B 119 #define WAKE_UP_DUR 0x5C 120 #define FREE_FALL 0x5D 130 #define LSM6DS3_IMU_WTM_FIFO_CTRL1_MASK 0xFF 131 #define LSM6DS3_IMU_WTM_FIFO_CTRL1_POSITION 0 132 #define LSM6DS3_IMU_WTM_FIFO_CTRL2_MASK 0x0F 133 #define LSM6DS3_IMU_WTM_FIFO_CTRL2_POSITION 0 142 LSM6DS3_IMU_TIM_PEDO_FIFO_DRDY_DISABLED = 0x00,
143 LSM6DS3_IMU_TIM_PEDO_FIFO_DRDY_ENABLED = 0x40,
144 } LSM6DS3_IMU_TIM_PEDO_FIFO_DRDY_t;
153 LSM6DS3_IMU_TIM_PEDO_FIFO_EN_DISABLED = 0x00,
154 LSM6DS3_IMU_TIM_PEDO_FIFO_EN_ENABLED = 0x80,
155 } LSM6DS3_IMU_TIM_PEDO_FIFO_EN_t;
164 LSM6DS3_IMU_DEC_FIFO_XL_DATA_NOT_IN_FIFO = 0x00,
165 LSM6DS3_IMU_DEC_FIFO_XL_NO_DECIMATION = 0x01,
166 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_2 = 0x02,
167 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_3 = 0x03,
168 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_4 = 0x04,
169 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_8 = 0x05,
170 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_16 = 0x06,
171 LSM6DS3_IMU_DEC_FIFO_XL_DECIMATION_BY_32 = 0x07,
172 } LSM6DS3_IMU_DEC_FIFO_XL_t;
181 LSM6DS3_IMU_DEC_FIFO_G_DATA_NOT_IN_FIFO = 0x00,
182 LSM6DS3_IMU_DEC_FIFO_G_NO_DECIMATION = 0x08,
183 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_2 = 0x10,
184 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_3 = 0x18,
185 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_4 = 0x20,
186 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_8 = 0x28,
187 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_16 = 0x30,
188 LSM6DS3_IMU_DEC_FIFO_G_DECIMATION_BY_32 = 0x38,
189 } LSM6DS3_IMU_DEC_FIFO_G_t;
198 LSM6DS3_IMU_DEC_FIFO_SLV0_DATA_NOT_IN_FIFO = 0x00,
199 LSM6DS3_IMU_DEC_FIFO_SLV0_NO_DECIMATION = 0x01,
200 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_2 = 0x02,
201 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_3 = 0x03,
202 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_4 = 0x04,
203 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_8 = 0x05,
204 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_16 = 0x06,
205 LSM6DS3_IMU_DEC_FIFO_SLV0_DECIMATION_BY_32 = 0x07,
206 } LSM6DS3_IMU_DEC_FIFO_SLV0_t;
215 LSM6DS3_IMU_DEC_FIFO_SLV1_DATA_NOT_IN_FIFO = 0x00,
216 LSM6DS3_IMU_DEC_FIFO_SLV1_NO_DECIMATION = 0x08,
217 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_2 = 0x10,
218 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_3 = 0x18,
219 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_4 = 0x20,
220 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_8 = 0x28,
221 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_16 = 0x30,
222 LSM6DS3_IMU_DEC_FIFO_SLV1_DECIMATION_BY_32 = 0x38,
223 } LSM6DS3_IMU_DEC_FIFO_SLV1_t;
232 LSM6DS3_IMU_HI_DATA_ONLY_DISABLED = 0x00,
233 LSM6DS3_IMU_HI_DATA_ONLY_ENABLED = 0x40,
234 } LSM6DS3_IMU_HI_DATA_ONLY_t;
243 LSM6DS3_IMU_FIFO_MODE_BYPASS = 0x00,
244 LSM6DS3_IMU_FIFO_MODE_FIFO = 0x01,
245 LSM6DS3_IMU_FIFO_MODE_STF = 0x03,
246 LSM6DS3_IMU_FIFO_MODE_BTS = 0x04,
247 LSM6DS3_IMU_FIFO_MODE_STREAM = 0x06,
248 } LSM6DS3_IMU_FIFO_MODE_t;
257 LSM6DS3_IMU_ODR_FIFO_13Hz = 0x08,
258 LSM6DS3_IMU_ODR_FIFO_26Hz = 0x10,
259 LSM6DS3_IMU_ODR_FIFO_52Hz = 0x18,
260 LSM6DS3_IMU_ODR_FIFO_104Hz = 0x20,
261 LSM6DS3_IMU_ODR_FIFO_208Hz = 0x28,
262 LSM6DS3_IMU_ODR_FIFO_416Hz = 0x30,
263 LSM6DS3_IMU_ODR_FIFO_833Hz = 0x38,
264 LSM6DS3_IMU_ODR_FIFO_1660Hz = 0x40,
265 LSM6DS3_IMU_ODR_FIFO_3330Hz = 0x48,
266 LSM6DS3_IMU_ODR_FIFO_6660Hz = 0x50,
267 } LSM6DS3_IMU_ODR_FIFO_t;
276 LSM6DS3_IMU_INT1_DRDY_XL_DISABLED = 0x00,
277 LSM6DS3_IMU_INT1_DRDY_XL_ENABLED = 0x01,
278 } LSM6DS3_IMU_INT1_DRDY_XL_t;
287 LSM6DS3_IMU_INT1_DRDY_G_DISABLED = 0x00,
288 LSM6DS3_IMU_INT1_DRDY_G_ENABLED = 0x02,
289 } LSM6DS3_IMU_INT1_DRDY_G_t;
298 LSM6DS3_IMU_INT1_BOOT_DISABLED = 0x00,
299 LSM6DS3_IMU_INT1_BOOT_ENABLED = 0x04,
300 } LSM6DS3_IMU_INT1_BOOT_t;
309 LSM6DS3_IMU_INT1_FTH_DISABLED = 0x00,
310 LSM6DS3_IMU_INT1_FTH_ENABLED = 0x08,
311 } LSM6DS3_IMU_INT1_FTH_t;
320 LSM6DS3_IMU_INT1_OVR_DISABLED = 0x00,
321 LSM6DS3_IMU_INT1_OVR_ENABLED = 0x10,
322 } LSM6DS3_IMU_INT1_OVR_t;
331 LSM6DS3_IMU_INT1_FSS5_DISABLED = 0x00,
332 LSM6DS3_IMU_INT1_FSS5_ENABLED = 0x20,
333 } LSM6DS3_IMU_INT1_FSS5_t;
342 LSM6DS3_IMU_INT1_SIGN_MOT_DISABLED = 0x00,
343 LSM6DS3_IMU_INT1_SIGN_MOT_ENABLED = 0x40,
344 } LSM6DS3_IMU_INT1_SIGN_MOT_t;
353 LSM6DS3_IMU_INT1_PEDO_DISABLED = 0x00,
354 LSM6DS3_IMU_INT1_PEDO_ENABLED = 0x80,
355 } LSM6DS3_IMU_INT1_PEDO_t;
364 LSM6DS3_IMU_INT2_DRDY_XL_DISABLED = 0x00,
365 LSM6DS3_IMU_INT2_DRDY_XL_ENABLED = 0x01,
366 } LSM6DS3_IMU_INT2_DRDY_XL_t;
375 LSM6DS3_IMU_INT2_DRDY_G_DISABLED = 0x00,
376 LSM6DS3_IMU_INT2_DRDY_G_ENABLED = 0x02,
377 } LSM6DS3_IMU_INT2_DRDY_G_t;
386 LSM6DS3_IMU_INT2_FTH_DISABLED = 0x00,
387 LSM6DS3_IMU_INT2_FTH_ENABLED = 0x08,
388 } LSM6DS3_IMU_INT2_FTH_t;
397 LSM6DS3_IMU_INT2_OVR_DISABLED = 0x00,
398 LSM6DS3_IMU_INT2_OVR_ENABLED = 0x10,
399 } LSM6DS3_IMU_INT2_OVR_t;
408 LSM6DS3_IMU_INT2_FSS5_DISABLED = 0x00,
409 LSM6DS3_IMU_INT2_FSS5_ENABLED = 0x20,
410 } LSM6DS3_IMU_INT2_FSS5_t;
419 LSM6DS3_IMU_INT2_SIGN_MOT_DISABLED = 0x00,
420 LSM6DS3_IMU_INT2_SIGN_MOT_ENABLED = 0x40,
421 } LSM6DS3_IMU_INT2_SIGN_MOT_t;
430 LSM6DS3_IMU_INT2_PEDO_DISABLED = 0x00,
431 LSM6DS3_IMU_INT2_PEDO_ENABLED = 0x80,
432 } LSM6DS3_IMU_INT2_PEDO_t;
442 LSM6DS3_IMU_BW_XL_400Hz = 0x00,
443 LSM6DS3_IMU_BW_XL_200Hz = 0x01,
444 LSM6DS3_IMU_BW_XL_100Hz = 0x02,
445 LSM6DS3_IMU_BW_XL_50Hz = 0x03,
446 } LSM6DS3_IMU_BW_XL_t;
455 LSM6DS3_IMU_FS_XL_2g = 0x00,
456 LSM6DS3_IMU_FS_XL_16g = 0x04,
457 LSM6DS3_IMU_FS_XL_4g = 0x08,
458 LSM6DS3_IMU_FS_XL_8g = 0x0C,
459 } LSM6DS3_IMU_FS_XL_t;
468 LSM6DS3_IMU_ODR_XL_POWER_DOWN = 0x00,
469 LSM6DS3_IMU_ODR_XL_13Hz = 0x10,
470 LSM6DS3_IMU_ODR_XL_26Hz = 0x20,
471 LSM6DS3_IMU_ODR_XL_52Hz = 0x30,
472 LSM6DS3_IMU_ODR_XL_104Hz = 0x40,
473 LSM6DS3_IMU_ODR_XL_208Hz = 0x50,
474 LSM6DS3_IMU_ODR_XL_416Hz = 0x60,
475 LSM6DS3_IMU_ODR_XL_833Hz = 0x70,
476 LSM6DS3_IMU_ODR_XL_1660Hz = 0x80,
477 LSM6DS3_IMU_ODR_XL_3330Hz = 0x90,
478 LSM6DS3_IMU_ODR_XL_6660Hz = 0xA0,
479 } LSM6DS3_IMU_ODR_XL_t;
488 LSM6DS3_IMU_FS_125_DISABLED = 0x00,
489 LSM6DS3_IMU_FS_125_ENABLED = 0x02,
490 } LSM6DS3_IMU_FS_125_t;
499 LSM6DS3_IMU_FS_G_245dps = 0x00,
500 LSM6DS3_IMU_FS_G_500dps = 0x04,
501 LSM6DS3_IMU_FS_G_1000dps = 0x08,
502 LSM6DS3_IMU_FS_G_2000dps = 0x0C,
503 } LSM6DS3_IMU_FS_G_t;
512 LSM6DS3_IMU_ODR_G_POWER_DOWN = 0x00,
513 LSM6DS3_IMU_ODR_G_13Hz = 0x10,
514 LSM6DS3_IMU_ODR_G_26Hz = 0x20,
515 LSM6DS3_IMU_ODR_G_52Hz = 0x30,
516 LSM6DS3_IMU_ODR_G_104Hz = 0x40,
517 LSM6DS3_IMU_ODR_G_208Hz = 0x50,
518 LSM6DS3_IMU_ODR_G_416Hz = 0x60,
519 LSM6DS3_IMU_ODR_G_833Hz = 0x70,
520 LSM6DS3_IMU_ODR_G_1660Hz = 0x80,
521 } LSM6DS3_IMU_ODR_G_t;
530 LSM6DS3_IMU_SW_RESET_NORMAL_MODE = 0x00,
531 LSM6DS3_IMU_SW_RESET_RESET_DEVICE = 0x01,
532 } LSM6DS3_IMU_SW_RESET_t;
541 LSM6DS3_IMU_BLE_LSB = 0x00,
542 LSM6DS3_IMU_BLE_MSB = 0x02,
552 LSM6DS3_IMU_IF_INC_DISABLED = 0x00,
553 LSM6DS3_IMU_IF_INC_ENABLED = 0x04,
554 } LSM6DS3_IMU_IF_INC_t;
563 LSM6DS3_IMU_SIM_4_WIRE = 0x00,
564 LSM6DS3_IMU_SIM_3_WIRE = 0x08,
574 LSM6DS3_IMU_PP_OD_PUSH_PULL = 0x00,
575 LSM6DS3_IMU_PP_OD_OPEN_DRAIN = 0x10,
576 } LSM6DS3_IMU_PP_OD_t;
585 LSM6DS3_IMU_INT_ACT_LEVEL_ACTIVE_HI = 0x00,
586 LSM6DS3_IMU_INT_ACT_LEVEL_ACTIVE_LO = 0x20,
587 } LSM6DS3_IMU_INT_ACT_LEVEL_t;
596 LSM6DS3_IMU_BDU_CONTINUOS = 0x00,
597 LSM6DS3_IMU_BDU_BLOCK_UPDATE = 0x40,
607 LSM6DS3_IMU_BOOT_NORMAL_MODE = 0x00,
608 LSM6DS3_IMU_BOOT_REBOOT_MODE = 0x80,
609 } LSM6DS3_IMU_BOOT_t;
618 LSM6DS3_IMU_STOP_ON_FTH_DISABLED = 0x00,
619 LSM6DS3_IMU_STOP_ON_FTH_ENABLED = 0x01,
620 } LSM6DS3_IMU_STOP_ON_FTH_t;
629 LSM6DS3_IMU_MODE3_EN_DISABLED = 0x00,
630 LSM6DS3_IMU_MODE3_EN_ENABLED = 0x02,
631 } LSM6DS3_IMU_MODE3_EN_t;
640 LSM6DS3_IMU_I2C_DISABLE_I2C_AND_SPI = 0x00,
641 LSM6DS3_IMU_I2C_DISABLE_SPI_ONLY = 0x04,
642 } LSM6DS3_IMU_I2C_DISABLE_t;
651 LSM6DS3_IMU_DRDY_MSK_DISABLED = 0x00,
652 LSM6DS3_IMU_DRDY_MSK_ENABLED = 0x08,
653 } LSM6DS3_IMU_DRDY_MSK_t;
662 LSM6DS3_IMU_FIFO_TEMP_EN_DISABLED = 0x00,
663 LSM6DS3_IMU_FIFO_TEMP_EN_ENABLED = 0x10,
664 } LSM6DS3_IMU_FIFO_TEMP_EN_t;
673 LSM6DS3_IMU_INT2_ON_INT1_DISABLED = 0x00,
674 LSM6DS3_IMU_INT2_ON_INT1_ENABLED = 0x20,
675 } LSM6DS3_IMU_INT2_ON_INT1_t;
684 LSM6DS3_IMU_SLEEP_G_DISABLED = 0x00,
685 LSM6DS3_IMU_SLEEP_G_ENABLED = 0x40,
686 } LSM6DS3_IMU_SLEEP_G_t;
695 LSM6DS3_IMU_BW_SCAL_ODR_DISABLED = 0x00,
696 LSM6DS3_IMU_BW_SCAL_ODR_ENABLED = 0x80,
697 } LSM6DS3_IMU_BW_SCAL_ODR_t;
706 LSM6DS3_IMU_ST_XL_NORMAL_MODE = 0x00,
707 LSM6DS3_IMU_ST_XL_POS_SIGN_TEST = 0x01,
708 LSM6DS3_IMU_ST_XL_NEG_SIGN_TEST = 0x02,
709 LSM6DS3_IMU_ST_XL_NA = 0x03,
710 } LSM6DS3_IMU_ST_XL_t;
719 LSM6DS3_IMU_ST_G_NORMAL_MODE = 0x00,
720 LSM6DS3_IMU_ST_G_POS_SIGN_TEST = 0x04,
721 LSM6DS3_IMU_ST_G_NA = 0x08,
722 LSM6DS3_IMU_ST_G_NEG_SIGN_TEST = 0x0C,
723 } LSM6DS3_IMU_ST_G_t;
732 LSM6DS3_IMU_LP_XL_DISABLED = 0x00,
733 LSM6DS3_IMU_LP_XL_ENABLED = 0x10,
734 } LSM6DS3_IMU_LP_XL_t;
743 LSM6DS3_IMU_DEN_LVL2_EN_DISABLED = 0x00,
744 LSM6DS3_IMU_DEN_LVL2_EN_ENABLED = 0x20,
745 } LSM6DS3_IMU_DEN_LVL2_EN_t;
754 LSM6DS3_IMU_DEN_LVL_EN_DISABLED = 0x00,
755 LSM6DS3_IMU_DEN_LVL_EN_ENABLED = 0x40,
756 } LSM6DS3_IMU_DEN_LVL_EN_t;
765 LSM6DS3_IMU_DEN_EDGE_EN_DISABLED = 0x00,
766 LSM6DS3_IMU_DEN_EDGE_EN_ENABLED = 0x80,
767 } LSM6DS3_IMU_DEN_EDGE_EN_t;
776 LSM6DS3_IMU_HPM_G_NORMAL_MODE = 0x00,
777 LSM6DS3_IMU_HPM_G_REF_SIGNAL = 0x10,
778 LSM6DS3_IMU_HPM_G_NORMAL_MODE_2 = 0x20,
779 LSM6DS3_IMU_HPM_G_AUTO_RESET_ON_INT = 0x30,
780 } LSM6DS3_IMU_HPM_G_t;
789 LSM6DS3_IMU_HP_EN_DISABLED = 0x00,
790 LSM6DS3_IMU_HP_EN_ENABLED = 0x40,
791 } LSM6DS3_IMU_HP_EN_t;
800 LSM6DS3_IMU_LP_EN_DISABLED = 0x00,
801 LSM6DS3_IMU_LP_EN_ENABLED = 0x80,
802 } LSM6DS3_IMU_LP_EN_t;
811 LSM6DS3_IMU_FDS_FILTER_OFF = 0x00,
812 LSM6DS3_IMU_FDS_FILTER_ON = 0x04,
822 LSM6DS3_IMU_XEN_XL_DISABLED = 0x00,
823 LSM6DS3_IMU_XEN_XL_ENABLED = 0x08,
824 } LSM6DS3_IMU_XEN_XL_t;
833 LSM6DS3_IMU_YEN_XL_DISABLED = 0x00,
834 LSM6DS3_IMU_YEN_XL_ENABLED = 0x10,
835 } LSM6DS3_IMU_YEN_XL_t;
844 LSM6DS3_IMU_ZEN_XL_DISABLED = 0x00,
845 LSM6DS3_IMU_ZEN_XL_ENABLED = 0x20,
846 } LSM6DS3_IMU_ZEN_XL_t;
855 LSM6DS3_IMU_SIGN_MOTION_EN_DISABLED = 0x00,
856 LSM6DS3_IMU_SIGN_MOTION_EN_ENABLED = 0x01,
857 } LSM6DS3_IMU_SIGN_MOTION_EN_t;
866 LSM6DS3_IMU_PEDO_RST_STEP_DISABLED = 0x00,
867 LSM6DS3_IMU_PEDO_RST_STEP_ENABLED = 0x02,
868 } LSM6DS3_IMU_PEDO_RST_STEP_t;
877 LSM6DS3_IMU_XEN_G_DISABLED = 0x00,
878 LSM6DS3_IMU_XEN_G_ENABLED = 0x08,
879 } LSM6DS3_IMU_XEN_G_t;
888 LSM6DS3_IMU_YEN_G_DISABLED = 0x00,
889 LSM6DS3_IMU_YEN_G_ENABLED = 0x10,
890 } LSM6DS3_IMU_YEN_G_t;
899 LSM6DS3_IMU_ZEN_G_DISABLED = 0x00,
900 LSM6DS3_IMU_ZEN_G_ENABLED = 0x20,
901 } LSM6DS3_IMU_ZEN_G_t;
910 LSM6DS3_IMU_FUNC_EN_DISABLED = 0x00,
911 LSM6DS3_IMU_FUNC_EN_ENABLED = 0x04,
912 } LSM6DS3_IMU_FUNC_EN_t;
922 LSM6DS3_IMU_MASTER_ON_DISABLED = 0x00,
923 LSM6DS3_IMU_MASTER_ON_ENABLED = 0x01,
924 } LSM6DS3_IMU_MASTER_ON_t;
933 LSM6DS3_IMU_IRON_EN_DISABLED = 0x00,
934 LSM6DS3_IMU_IRON_EN_ENABLED = 0x02,
935 } LSM6DS3_IMU_IRON_EN_t;
944 LSM6DS3_IMU_PASS_THRU_MODE_DISABLED = 0x00,
945 LSM6DS3_IMU_PASS_THRU_MODE_ENABLED = 0x04,
946 } LSM6DS3_IMU_PASS_THRU_MODE_t;
955 LSM6DS3_IMU_PULL_UP_EN_DISABLED = 0x00,
956 LSM6DS3_IMU_PULL_UP_EN_ENABLED = 0x08,
957 } LSM6DS3_IMU_PULL_UP_EN_t;
966 LSM6DS3_IMU_START_CONFIG_XL_G_DRDY = 0x00,
967 LSM6DS3_IMU_START_CONFIG_EXT_INT2 = 0x10,
968 } LSM6DS3_IMU_START_CONFIG_t;
977 LSM6DS3_IMU_DATA_VAL_SEL_FIFO_XL_G_DRDY = 0x00,
978 LSM6DS3_IMU_DATA_VAL_SEL_FIFO_SHUB_DRDY = 0x40,
979 } LSM6DS3_IMU_DATA_VAL_SEL_FIFO_t;
988 LSM6DS3_IMU_DRDY_ON_INT1_DISABLED = 0x00,
989 LSM6DS3_IMU_DRDY_ON_INT1_ENABLED = 0x80,
990 } LSM6DS3_IMU_DRDY_ON_INT1_t;
999 LSM6DS3_IMU_Z_WU_NOT_DETECTED = 0x00,
1000 LSM6DS3_IMU_Z_WU_DETECTED = 0x01,
1001 } LSM6DS3_IMU_Z_WU_t;
1010 LSM6DS3_IMU_Y_WU_NOT_DETECTED = 0x00,
1011 LSM6DS3_IMU_Y_WU_DETECTED = 0x02,
1012 } LSM6DS3_IMU_Y_WU_t;
1021 LSM6DS3_IMU_X_WU_NOT_DETECTED = 0x00,
1022 LSM6DS3_IMU_X_WU_DETECTED = 0x04,
1023 } LSM6DS3_IMU_X_WU_t;
1032 LSM6DS3_IMU_WU_EV_STATUS_NOT_DETECTED = 0x00,
1033 LSM6DS3_IMU_WU_EV_STATUS_DETECTED = 0x08,
1034 } LSM6DS3_IMU_WU_EV_STATUS_t;
1043 LSM6DS3_IMU_SLEEP_EV_STATUS_NOT_DETECTED = 0x00,
1044 LSM6DS3_IMU_SLEEP_EV_STATUS_DETECTED = 0x10,
1045 } LSM6DS3_IMU_SLEEP_EV_STATUS_t;
1054 LSM6DS3_IMU_FF_EV_STATUS_NOT_DETECTED = 0x00,
1055 LSM6DS3_IMU_FF_EV_STATUS_DETECTED = 0x20,
1056 } LSM6DS3_IMU_FF_EV_STATUS_t;
1065 LSM6DS3_IMU_Z_TAP_NOT_DETECTED = 0x00,
1066 LSM6DS3_IMU_Z_TAP_DETECTED = 0x01,
1067 } LSM6DS3_IMU_Z_TAP_t;
1076 LSM6DS3_IMU_Y_TAP_NOT_DETECTED = 0x00,
1077 LSM6DS3_IMU_Y_TAP_DETECTED = 0x02,
1078 } LSM6DS3_IMU_Y_TAP_t;
1087 LSM6DS3_IMU_X_TAP_NOT_DETECTED = 0x00,
1088 LSM6DS3_IMU_X_TAP_DETECTED = 0x04,
1089 } LSM6DS3_IMU_X_TAP_t;
1098 LSM6DS3_IMU_TAP_SIGN_POS_SIGN = 0x00,
1099 LSM6DS3_IMU_TAP_SIGN_NEG_SIGN = 0x08,
1100 } LSM6DS3_IMU_TAP_SIGN_t;
1109 LSM6DS3_IMU_DOUBLE_TAP_EV_STATUS_NOT_DETECTED = 0x00,
1110 LSM6DS3_IMU_DOUBLE_TAP_EV_STATUS_DETECTED = 0x10,
1111 } LSM6DS3_IMU_DOUBLE_TAP_EV_STATUS_t;
1120 LSM6DS3_IMU_SINGLE_TAP_EV_STATUS_NOT_DETECTED = 0x00,
1121 LSM6DS3_IMU_SINGLE_TAP_EV_STATUS_DETECTED = 0x20,
1122 } LSM6DS3_IMU_SINGLE_TAP_EV_STATUS_t;
1131 LSM6DS3_IMU_TAP_EV_STATUS_NOT_DETECTED = 0x00,
1132 LSM6DS3_IMU_TAP_EV_STATUS_DETECTED = 0x40,
1133 } LSM6DS3_IMU_TAP_EV_STATUS_t;
1142 LSM6DS3_IMU_DSD_XL_NOT_DETECTED = 0x00,
1143 LSM6DS3_IMU_DSD_XL_DETECTED = 0x01,
1144 } LSM6DS3_IMU_DSD_XL_t;
1153 LSM6DS3_IMU_DSD_XH_NOT_DETECTED = 0x00,
1154 LSM6DS3_IMU_DSD_XH_DETECTED = 0x02,
1155 } LSM6DS3_IMU_DSD_XH_t;
1164 LSM6DS3_IMU_DSD_YL_NOT_DETECTED = 0x00,
1165 LSM6DS3_IMU_DSD_YL_DETECTED = 0x04,
1166 } LSM6DS3_IMU_DSD_YL_t;
1175 LSM6DS3_IMU_DSD_YH_NOT_DETECTED = 0x00,
1176 LSM6DS3_IMU_DSD_YH_DETECTED = 0x08,
1177 } LSM6DS3_IMU_DSD_YH_t;
1186 LSM6DS3_IMU_DSD_ZL_NOT_DETECTED = 0x00,
1187 LSM6DS3_IMU_DSD_ZL_DETECTED = 0x10,
1188 } LSM6DS3_IMU_DSD_ZL_t;
1197 LSM6DS3_IMU_DSD_ZH_NOT_DETECTED = 0x00,
1198 LSM6DS3_IMU_DSD_ZH_DETECTED = 0x20,
1199 } LSM6DS3_IMU_DSD_ZH_t;
1208 LSM6DS3_IMU_D6D_EV_STATUS_NOT_DETECTED = 0x00,
1209 LSM6DS3_IMU_D6D_EV_STATUS_DETECTED = 0x40,
1210 } LSM6DS3_IMU_D6D_EV_STATUS_t;
1219 LSM6DS3_IMU_XLDA_NO_DATA_AVAIL = 0x00,
1220 LSM6DS3_IMU_XLDA_DATA_AVAIL = 0x01,
1221 } LSM6DS3_IMU_XLDA_t;
1230 LSM6DS3_IMU_GDA_NO_DATA_AVAIL = 0x00,
1231 LSM6DS3_IMU_GDA_DATA_AVAIL = 0x02,
1232 } LSM6DS3_IMU_GDA_t;
1241 LSM6DS3_IMU_EV_BOOT_NO_BOOT_RUNNING = 0x00,
1242 LSM6DS3_IMU_EV_BOOT_BOOT_IS_RUNNING = 0x08,
1243 } LSM6DS3_IMU_EV_BOOT_t;
1251 #define LSM6DS3_IMU_DIFF_FIFO_STATUS1_MASK 0xFF 1252 #define LSM6DS3_IMU_DIFF_FIFO_STATUS1_POSITION 0 1253 #define LSM6DS3_IMU_DIFF_FIFO_STATUS2_MASK 0xF 1254 #define LSM6DS3_IMU_DIFF_FIFO_STATUS2_POSITION 0 1263 LSM6DS3_IMU_FIFO_EMPTY_FIFO_NOT_EMPTY = 0x00,
1264 LSM6DS3_IMU_FIFO_EMPTY_FIFO_EMPTY = 0x10,
1265 } LSM6DS3_IMU_FIFO_EMPTY_t;
1274 LSM6DS3_IMU_FIFO_FULL_FIFO_NOT_FULL = 0x00,
1275 LSM6DS3_IMU_FIFO_FULL_FIFO_FULL = 0x20,
1276 } LSM6DS3_IMU_FIFO_FULL_t;
1285 LSM6DS3_IMU_OVERRUN_NO_OVERRUN = 0x00,
1286 LSM6DS3_IMU_OVERRUN_OVERRUN = 0x40,
1287 } LSM6DS3_IMU_OVERRUN_t;
1296 LSM6DS3_IMU_WTM_BELOW_WTM = 0x00,
1297 LSM6DS3_IMU_WTM_ABOVE_OR_EQUAL_WTM = 0x80,
1298 } LSM6DS3_IMU_WTM_t;
1306 #define LSM6DS3_IMU_FIFO_STATUS3_PATTERN_MASK 0xFF 1307 #define LSM6DS3_IMU_FIFO_STATUS3_PATTERN_POSITION 0 1308 #define LSM6DS3_IMU_FIFO_STATUS4_PATTERN_MASK 0x03 1309 #define LSM6DS3_IMU_FIFO_STATUS4_PATTERN_POSITION 0 1318 LSM6DS3_IMU_SENS_HUB_END_STILL_ONGOING = 0x00,
1319 LSM6DS3_IMU_SENS_HUB_END_OP_COMPLETED = 0x01,
1320 } LSM6DS3_IMU_SENS_HUB_END_t;
1329 LSM6DS3_IMU_SOFT_IRON_END_NOT_COMPLETED = 0x00,
1330 LSM6DS3_IMU_SOFT_IRON_END_COMPLETED = 0x02,
1331 } LSM6DS3_IMU_SOFT_IRON_END_t;
1340 LSM6DS3_IMU_PEDO_EV_STATUS_NOT_DETECTED = 0x00,
1341 LSM6DS3_IMU_PEDO_EV_STATUS_DETECTED = 0x10,
1342 } LSM6DS3_IMU_PEDO_EV_STATUS_t;
1351 LSM6DS3_IMU_TILT_EV_STATUS_NOT_DETECTED = 0x00,
1352 LSM6DS3_IMU_TILT_EV_STATUS_DETECTED = 0x20,
1353 } LSM6DS3_IMU_TILT_EV_STATUS_t;
1362 LSM6DS3_IMU_SIGN_MOT_EV_STATUS_NOT_DETECTED = 0x00,
1363 LSM6DS3_IMU_SIGN_MOT_EV_STATUS_DETECTED = 0x40,
1364 } LSM6DS3_IMU_SIGN_MOT_EV_STATUS_t;
1373 LSM6DS3_IMU_LIR_DISABLED = 0x00,
1374 LSM6DS3_IMU_LIR_ENABLED = 0x01,
1375 } LSM6DS3_IMU_LIR_t;
1384 LSM6DS3_IMU_TAP_Z_EN_DISABLED = 0x00,
1385 LSM6DS3_IMU_TAP_Z_EN_ENABLED = 0x02,
1386 } LSM6DS3_IMU_TAP_Z_EN_t;
1395 LSM6DS3_IMU_TAP_Y_EN_DISABLED = 0x00,
1396 LSM6DS3_IMU_TAP_Y_EN_ENABLED = 0x04,
1397 } LSM6DS3_IMU_TAP_Y_EN_t;
1406 LSM6DS3_IMU_TAP_X_EN_DISABLED = 0x00,
1407 LSM6DS3_IMU_TAP_X_EN_ENABLED = 0x08,
1408 } LSM6DS3_IMU_TAP_X_EN_t;
1417 LSM6DS3_IMU_TILT_EN_DISABLED = 0x00,
1418 LSM6DS3_IMU_TILT_EN_ENABLED = 0x20,
1419 } LSM6DS3_IMU_TILT_EN_t;
1428 LSM6DS3_IMU_PEDO_EN_DISABLED = 0x00,
1429 LSM6DS3_IMU_PEDO_EN_ENABLED = 0x40,
1430 } LSM6DS3_IMU_PEDO_EN_t;
1439 LSM6DS3_IMU_TIMER_EN_DISABLED = 0x00,
1440 LSM6DS3_IMU_TIMER_EN_ENABLED = 0x80,
1441 } LSM6DS3_IMU_TIMER_EN_t;
1449 #define LSM6DS3_IMU_TAP_THS_MASK 0x1F 1450 #define LSM6DS3_IMU_TAP_THS_POSITION 0 1459 LSM6DS3_IMU_SIXD_THS_80_degree = 0x00,
1460 LSM6DS3_IMU_SIXD_THS_70_degree = 0x20,
1461 LSM6DS3_IMU_SIXD_THS_60_degree = 0x40,
1462 LSM6DS3_IMU_SIXD_THS_50_degree = 0x60,
1463 } LSM6DS3_IMU_SIXD_THS_t;
1471 #define LSM6DS3_IMU_SHOCK_MASK 0x03 1472 #define LSM6DS3_IMU_SHOCK_POSITION 0 1480 #define LSM6DS3_IMU_QUIET_MASK 0x0C 1481 #define LSM6DS3_IMU_QUIET_POSITION 2 1489 #define LSM6DS3_IMU_DUR_MASK 0xF0 1490 #define LSM6DS3_IMU_DUR_POSITION 4 1498 #define LSM6DS3_IMU_WK_THS_MASK 0x3F 1499 #define LSM6DS3_IMU_WK_THS_POSITION 0 1508 LSM6DS3_IMU_INACTIVITY_ON_DISABLED = 0x00,
1509 LSM6DS3_IMU_INACTIVITY_ON_ENABLED = 0x40,
1510 } LSM6DS3_IMU_INACTIVITY_ON_t;
1519 LSM6DS3_IMU_SINGLE_DOUBLE_TAP_DOUBLE_TAP = 0x00,
1520 LSM6DS3_IMU_SINGLE_DOUBLE_TAP_SINGLE_TAP = 0x80,
1521 } LSM6DS3_IMU_SINGLE_DOUBLE_TAP_t;
1529 #define LSM6DS3_IMU_SLEEP_DUR_MASK 0x0F 1530 #define LSM6DS3_IMU_SLEEP_DUR_POSITION 0 1539 LSM6DS3_IMU_TIMER_HR_6_4ms = 0x00,
1540 LSM6DS3_IMU_TIMER_HR_25us = 0x10,
1541 } LSM6DS3_IMU_TIMER_HR_t;
1549 #define LSM6DS3_IMU_WAKE_DUR_MASK 0x60 1550 #define LSM6DS3_IMU_WAKE_DUR_POSITION 5 1558 #define LSM6DS3_IMU_FF_FREE_FALL_DUR_MASK 0xF8 1559 #define LSM6DS3_IMU_FF_FREE_FALL_DUR_POSITION 3 1560 #define LSM6DS3_IMU_FF_WAKE_UP_DUR_MASK 0x80 1561 #define LSM6DS3_IMU_FF_WAKE_UP_DUR_POSITION 7 1571 LSM6DS3_IMU_FF_THS_5 = 0x00,
1572 LSM6DS3_IMU_FF_THS_7 = 0x01,
1573 LSM6DS3_IMU_FF_THS_8 = 0x02,
1574 LSM6DS3_IMU_FF_THS_10 = 0x03,
1575 LSM6DS3_IMU_FF_THS_11 = 0x04,
1576 LSM6DS3_IMU_FF_THS_13 = 0x05,
1577 LSM6DS3_IMU_FF_THS_15 = 0x06,
1578 LSM6DS3_IMU_FF_THS_16 = 0x07,
1579 } LSM6DS3_IMU_FF_THS_t;
1588 LSM6DS3_IMU_INT1_TIMER_DISABLED = 0x00,
1589 LSM6DS3_IMU_INT1_TIMER_ENABLED = 0x01,
1590 } LSM6DS3_IMU_INT1_TIMER_t;
1599 LSM6DS3_IMU_INT1_TILT_DISABLED = 0x00,
1600 LSM6DS3_IMU_INT1_TILT_ENABLED = 0x02,
1601 } LSM6DS3_IMU_INT1_TILT_t;
1610 LSM6DS3_IMU_INT1_6D_DISABLED = 0x00,
1611 LSM6DS3_IMU_INT1_6D_ENABLED = 0x04,
1612 } LSM6DS3_IMU_INT1_6D_t;
1621 LSM6DS3_IMU_INT1_TAP_DISABLED = 0x00,
1622 LSM6DS3_IMU_INT1_TAP_ENABLED = 0x08,
1623 } LSM6DS3_IMU_INT1_TAP_t;
1632 LSM6DS3_IMU_INT1_FF_DISABLED = 0x00,
1633 LSM6DS3_IMU_INT1_FF_ENABLED = 0x10,
1634 } LSM6DS3_IMU_INT1_FF_t;
1643 LSM6DS3_IMU_INT1_WU_DISABLED = 0x00,
1644 LSM6DS3_IMU_INT1_WU_ENABLED = 0x20,
1645 } LSM6DS3_IMU_INT1_WU_t;
1654 LSM6DS3_IMU_INT1_SINGLE_TAP_DISABLED = 0x00,
1655 LSM6DS3_IMU_INT1_SINGLE_TAP_ENABLED = 0x40,
1656 } LSM6DS3_IMU_INT1_SINGLE_TAP_t;
1665 LSM6DS3_IMU_INT1_SLEEP_DISABLED = 0x00,
1666 LSM6DS3_IMU_INT1_SLEEP_ENABLED = 0x80,
1667 } LSM6DS3_IMU_INT1_SLEEP_t;
1676 LSM6DS3_IMU_INT2_TIMER_DISABLED = 0x00,
1677 LSM6DS3_IMU_INT2_TIMER_ENABLED = 0x01,
1678 } LSM6DS3_IMU_INT2_TIMER_t;
1687 LSM6DS3_IMU_INT2_TILT_DISABLED = 0x00,
1688 LSM6DS3_IMU_INT2_TILT_ENABLED = 0x02,
1689 } LSM6DS3_IMU_INT2_TILT_t;
1698 LSM6DS3_IMU_INT2_6D_DISABLED = 0x00,
1699 LSM6DS3_IMU_INT2_6D_ENABLED = 0x04,
1700 } LSM6DS3_IMU_INT2_6D_t;
1709 LSM6DS3_IMU_INT2_TAP_DISABLED = 0x00,
1710 LSM6DS3_IMU_INT2_TAP_ENABLED = 0x08,
1711 } LSM6DS3_IMU_INT2_TAP_t;
1720 LSM6DS3_IMU_INT2_FF_DISABLED = 0x00,
1721 LSM6DS3_IMU_INT2_FF_ENABLED = 0x10,
1722 } LSM6DS3_IMU_INT2_FF_t;
1731 LSM6DS3_IMU_INT2_WU_DISABLED = 0x00,
1732 LSM6DS3_IMU_INT2_WU_ENABLED = 0x20,
1733 } LSM6DS3_IMU_INT2_WU_t;
1742 LSM6DS3_IMU_INT2_SINGLE_TAP_DISABLED = 0x00,
1743 LSM6DS3_IMU_INT2_SINGLE_TAP_ENABLED = 0x40,
1744 } LSM6DS3_IMU_INT2_SINGLE_TAP_t;
1753 LSM6DS3_IMU_INT2_SLEEP_DISABLED = 0x00,
1754 LSM6DS3_IMU_INT2_SLEEP_ENABLED = 0x80,
1755 } LSM6DS3_IMU_INT2_SLEEP_t;
1758 struct IMU_settings {
1760 uint8_t accel_enable;
1761 uint16_t accel_range;
1762 uint16_t accel_samplerate;
1763 uint16_t accel_bandwidth;
1765 uint8_t accel_FIFO_enable;
1766 uint8_t accel_FIFO_decimation;
1769 uint8_t gyro_enable;
1770 uint16_t gyro_range;
1771 uint16_t gyro_samplerate;
1772 uint16_t gyro_bandwidth;
1774 uint8_t gyro_FIFO_enable;
1775 uint8_t gyro_FIFO_decimation;
1778 uint8_t temp_enable;
1781 uint16_t FIFO_threshold;
1782 uint16_t FIFO_samplerate;
1789 void LSM6DS3_init(
void);
1794 void LSM6DS3_who_am_i(
void);
1809 void LSM6DS3_config();
1816 void LSM6DS3_set_accel_power_down_mode();
1823 void LSM6DS3_set_accel_low_power_mode(uint16_t value);
1830 void LSM6DS3_set_accel_normal_mode(uint16_t value);
1837 void LSM6DS3_set_accel_high_performance_mode(uint16_t value);
1842 void LSM6DS3_read_accl_data(int16_t *x_axis, int16_t *y_axis, int16_t *z_axis);
1851 int16_t LSM6DS3_accelData_in_g(int16_t raw_data);
1856 void LSM6DS3_set_gyro_active_mode();
1861 void LSM6DS3_set_gyro_sleep_mode();
1866 void LSM6DS3_read_gyro_data(int16_t *gyro_x, int16_t *gyro_y, int16_t *gyro_z);
1874 float LSM6DS3_gyroData_in_dps(int16_t raw_data);
1879 void LSM6DS3_FIFO_config(
void);
1884 void LSM6DS3_clear_FIFO_buffer(
void);
1889 uint16_t LSM6DS3_read_FIFO_status(
void);
1894 int16_t LSM6DS3_read_FIFO_buffer(
void);
1899 void LSM6DS3_tap_detect_config();