LSM6DSL: Added SW reset function.
continuous-integration/drone/push Build is passing Details

Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
Yilin Sun 2023-07-07 00:08:43 +08:00
parent b48b9fb2d8
commit 23ff8ae04f
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
1 changed files with 32 additions and 1 deletions

View File

@ -2,14 +2,20 @@
#define LSM6DSL_REG_WHOAMI 0x0FU
#define LSM6DSL_REG_CTRL1_XL 0x10U
#define LSM6DSL_REG_CTRL3_C 0x12U
#define LSM6DSL_REG_OUT_TEMP_L 0x20U
#define LSM6DSL_REG_OUT_TEMP_H 0x21U
#define LSM6DSL_CONST_WHOAMI 0x6AU
#define LSM6DSL_REG_CTRL3_C_SW_RESET_Pos (0U)
#define LSM6DSL_REG_CTRL3_C_SW_RESET_Msk (1U << LSM6DSL_REG_CTRL3_C_SW_RESET_Pos)
#define LSM6DSL_CONST_TURN_ON_TIME_MS 35
#define LSM6DSL_CONST_WHOAMI 0x6AU
#define LSM6DSL_MAXIMUM_MULTI_WRITE_SIZE 32
static ims_ret_t ims_lsm6dsl_whoami(ims_lsm6dsl_t *imu, uint8_t *whoami);
static ims_ret_t ims_lsm6dsl_reset(ims_lsm6dsl_t *imu);
static ims_ret_t ims_lsm6dsl_read_register(ims_lsm6dsl_t *imu, uint8_t addr, uint8_t *data);
static ims_ret_t ims_lsm6dsl_read_registers(ims_lsm6dsl_t *imu, uint8_t addr, uint8_t *data, uint16_t len);
@ -26,6 +32,11 @@ ims_ret_t ims_lsm6dsl_init(ims_lsm6dsl_t *imu) {
return ret;
}
ret = ims_lsm6dsl_reset(imu);
if (ret != IMS_SUCCESS) {
return ret;
}
if (who_am_i != LSM6DSL_CONST_WHOAMI) {
return IMS_FAIL;
}
@ -62,6 +73,26 @@ static ims_ret_t ims_lsm6dsl_whoami(ims_lsm6dsl_t *imu, uint8_t *whoami) {
return ims_lsm6dsl_read_register(imu, LSM6DSL_REG_WHOAMI, whoami);
}
static ims_ret_t ims_lsm6dsl_reset(ims_lsm6dsl_t *imu) {
ims_ret_t ret;
uint8_t ctrl3_c;
ret = ims_lsm6dsl_read_register(imu, LSM6DSL_REG_CTRL3_C, &ctrl3_c);
if (ret != IMS_SUCCESS) {
return ret;
}
ctrl3_c |= LSM6DSL_REG_CTRL3_C_SW_RESET_Msk;
ret = ims_lsm6dsl_write_register(imu, LSM6DSL_REG_CTRL3_C, ctrl3_c);
if (ret != IMS_SUCCESS) {
return ret;
}
return imu->cb.delay(imu->pdev, LSM6DSL_CONST_TURN_ON_TIME_MS);
}
static ims_ret_t ims_lsm6dsl_read_register(ims_lsm6dsl_t *imu, uint8_t addr, uint8_t *data) {
return ims_lsm6dsl_read_registers(imu, addr, data, 1U);
}