Contains the BSP driver for the B-L475E-IOT01 board.

Dependents:   mbed-os-example-ble-Thermometer DISCO_L475VG_IOT01-Telegram-BOT DISCO_L475VG_IOT01-sche_cheveux DISCO_L475VG_IOT01-QSPI_FLASH_FILE_SYSTEM ... more

https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/

Committer:
jeromecoutant
Date:
Tue Sep 24 15:30:09 2019 +0200
Revision:
7:bfe8272ced90
Parent:
4:137bb367ba50
Update BSP files with STM32Cube L4 V1.14.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 4:137bb367ba50 1 /**
bcostm 4:137bb367ba50 2 ******************************************************************************
bcostm 4:137bb367ba50 3 * @file lsm6dsl.c
bcostm 4:137bb367ba50 4 * @author MCD Application Team
bcostm 4:137bb367ba50 5 * @brief This file provides a set of functions needed to manage the LSM6DSL
bcostm 4:137bb367ba50 6 * accelero and gyro devices
bcostm 4:137bb367ba50 7 ******************************************************************************
bcostm 4:137bb367ba50 8 * @attention
bcostm 4:137bb367ba50 9 *
jeromecoutant 7:bfe8272ced90 10 * <<h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
jeromecoutant 7:bfe8272ced90 11 * All rights reserved.</center></h2>
bcostm 4:137bb367ba50 12 *
jeromecoutant 7:bfe8272ced90 13 * This software component is licensed by ST under BSD 3-Clause license,
jeromecoutant 7:bfe8272ced90 14 * the "License"; You may not use this file except in compliance with the
jeromecoutant 7:bfe8272ced90 15 * License. You may obtain a copy of the License at:
jeromecoutant 7:bfe8272ced90 16 * opensource.org/licenses/BSD-3-Clause
bcostm 4:137bb367ba50 17 *
bcostm 4:137bb367ba50 18 ******************************************************************************
bcostm 4:137bb367ba50 19 */
bcostm 4:137bb367ba50 20
bcostm 4:137bb367ba50 21 /* Includes ------------------------------------------------------------------*/
bcostm 4:137bb367ba50 22 #include "lsm6dsl.h"
bcostm 4:137bb367ba50 23
bcostm 4:137bb367ba50 24 /** @addtogroup BSP
bcostm 4:137bb367ba50 25 * @{
bcostm 4:137bb367ba50 26 */
bcostm 4:137bb367ba50 27
bcostm 4:137bb367ba50 28 /** @addtogroup Component
bcostm 4:137bb367ba50 29 * @{
bcostm 4:137bb367ba50 30 */
bcostm 4:137bb367ba50 31
bcostm 4:137bb367ba50 32 /** @defgroup LSM6DSL LSM6DSL
bcostm 4:137bb367ba50 33 * @{
bcostm 4:137bb367ba50 34 */
bcostm 4:137bb367ba50 35
bcostm 4:137bb367ba50 36 /** @defgroup LSM6DSL_Private_Variables LSM6DSL Private Variables
bcostm 4:137bb367ba50 37 * @{
bcostm 4:137bb367ba50 38 */
bcostm 4:137bb367ba50 39 ACCELERO_DrvTypeDef Lsm6dslAccDrv =
bcostm 4:137bb367ba50 40 {
bcostm 4:137bb367ba50 41 LSM6DSL_AccInit,
bcostm 4:137bb367ba50 42 LSM6DSL_AccDeInit,
bcostm 4:137bb367ba50 43 LSM6DSL_AccReadID,
bcostm 4:137bb367ba50 44 0,
bcostm 4:137bb367ba50 45 LSM6DSL_AccLowPower,
bcostm 4:137bb367ba50 46 0,
bcostm 4:137bb367ba50 47 0,
bcostm 4:137bb367ba50 48 0,
bcostm 4:137bb367ba50 49 0,
bcostm 4:137bb367ba50 50 0,
bcostm 4:137bb367ba50 51 0,
bcostm 4:137bb367ba50 52 0,
bcostm 4:137bb367ba50 53 LSM6DSL_AccReadXYZ
bcostm 4:137bb367ba50 54 };
bcostm 4:137bb367ba50 55
bcostm 4:137bb367ba50 56 GYRO_DrvTypeDef Lsm6dslGyroDrv =
bcostm 4:137bb367ba50 57 {
bcostm 4:137bb367ba50 58 LSM6DSL_GyroInit,
bcostm 4:137bb367ba50 59 LSM6DSL_GyroDeInit,
bcostm 4:137bb367ba50 60 LSM6DSL_GyroReadID,
bcostm 4:137bb367ba50 61 0,
bcostm 4:137bb367ba50 62 LSM6DSL_GyroLowPower,
bcostm 4:137bb367ba50 63 0,
bcostm 4:137bb367ba50 64 0,
bcostm 4:137bb367ba50 65 0,
bcostm 4:137bb367ba50 66 0,
bcostm 4:137bb367ba50 67 0,
bcostm 4:137bb367ba50 68 0,
bcostm 4:137bb367ba50 69 0,
bcostm 4:137bb367ba50 70 LSM6DSL_GyroReadXYZAngRate
bcostm 4:137bb367ba50 71 };
bcostm 4:137bb367ba50 72 /**
bcostm 4:137bb367ba50 73 * @}
bcostm 4:137bb367ba50 74 */
bcostm 4:137bb367ba50 75
bcostm 4:137bb367ba50 76 /** @defgroup LSM6DSL_ACC_Private_Functions LSM6DSL ACC Private Functions
bcostm 4:137bb367ba50 77 * @{
bcostm 4:137bb367ba50 78 */
bcostm 4:137bb367ba50 79 /**
bcostm 4:137bb367ba50 80 * @brief Set LSM6DSL Accelerometer Initialization.
bcostm 4:137bb367ba50 81 * @param InitStruct: Init parameters
bcostm 4:137bb367ba50 82 */
bcostm 4:137bb367ba50 83 void LSM6DSL_AccInit(uint16_t InitStruct)
bcostm 4:137bb367ba50 84 {
bcostm 4:137bb367ba50 85 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 86 uint8_t tmp;
bcostm 4:137bb367ba50 87
bcostm 4:137bb367ba50 88 /* Read CTRL1_XL */
bcostm 4:137bb367ba50 89 tmp = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL1_XL);
bcostm 4:137bb367ba50 90
bcostm 4:137bb367ba50 91 /* Write value to ACC MEMS CTRL1_XL register: FS and Data Rate */
bcostm 4:137bb367ba50 92 ctrl = (uint8_t) InitStruct;
bcostm 4:137bb367ba50 93 tmp &= ~(0xFC);
bcostm 4:137bb367ba50 94 tmp |= ctrl;
bcostm 4:137bb367ba50 95 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL1_XL, tmp);
bcostm 4:137bb367ba50 96
bcostm 4:137bb367ba50 97 /* Read CTRL3_C */
bcostm 4:137bb367ba50 98 tmp = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL3_C);
bcostm 4:137bb367ba50 99
bcostm 4:137bb367ba50 100 /* Write value to ACC MEMS CTRL3_C register: BDU and Auto-increment */
bcostm 4:137bb367ba50 101 ctrl = ((uint8_t) (InitStruct >> 8));
bcostm 4:137bb367ba50 102 tmp &= ~(0x44);
bcostm 4:137bb367ba50 103 tmp |= ctrl;
bcostm 4:137bb367ba50 104 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL3_C, tmp);
bcostm 4:137bb367ba50 105 }
bcostm 4:137bb367ba50 106
bcostm 4:137bb367ba50 107 /**
bcostm 4:137bb367ba50 108 * @brief LSM6DSL Accelerometer De-initialization.
bcostm 4:137bb367ba50 109 */
bcostm 4:137bb367ba50 110 void LSM6DSL_AccDeInit(void)
bcostm 4:137bb367ba50 111 {
bcostm 4:137bb367ba50 112 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 113
bcostm 4:137bb367ba50 114 /* Read control register 1 value */
bcostm 4:137bb367ba50 115 ctrl = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL1_XL);
bcostm 4:137bb367ba50 116
bcostm 4:137bb367ba50 117 /* Clear ODR bits */
bcostm 4:137bb367ba50 118 ctrl &= ~(LSM6DSL_ODR_BITPOSITION);
bcostm 4:137bb367ba50 119
bcostm 4:137bb367ba50 120 /* Set Power down */
bcostm 4:137bb367ba50 121 ctrl |= LSM6DSL_ODR_POWER_DOWN;
bcostm 4:137bb367ba50 122
bcostm 4:137bb367ba50 123 /* write back control register */
bcostm 4:137bb367ba50 124 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL1_XL, ctrl);
bcostm 4:137bb367ba50 125 }
bcostm 4:137bb367ba50 126
bcostm 4:137bb367ba50 127 /**
bcostm 4:137bb367ba50 128 * @brief Read LSM6DSL ID.
bcostm 4:137bb367ba50 129 * @retval ID
bcostm 4:137bb367ba50 130 */
bcostm 4:137bb367ba50 131 uint8_t LSM6DSL_AccReadID(void)
bcostm 4:137bb367ba50 132 {
bcostm 4:137bb367ba50 133 /* IO interface initialization */
bcostm 4:137bb367ba50 134 SENSOR_IO_Init();
bcostm 4:137bb367ba50 135 /* Read value at Who am I register address */
bcostm 4:137bb367ba50 136 return (SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_WHO_AM_I_REG));
bcostm 4:137bb367ba50 137 }
bcostm 4:137bb367ba50 138
bcostm 4:137bb367ba50 139 /**
bcostm 4:137bb367ba50 140 * @brief Set/Unset Accelerometer in low power mode.
bcostm 4:137bb367ba50 141 * @param status 0 means disable Low Power Mode, otherwise Low Power Mode is enabled
bcostm 4:137bb367ba50 142 */
bcostm 4:137bb367ba50 143 void LSM6DSL_AccLowPower(uint16_t status)
bcostm 4:137bb367ba50 144 {
bcostm 4:137bb367ba50 145 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 146
bcostm 4:137bb367ba50 147 /* Read CTRL6_C value */
bcostm 4:137bb367ba50 148 ctrl = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL6_C);
bcostm 4:137bb367ba50 149
bcostm 4:137bb367ba50 150 /* Clear Low Power Mode bit */
bcostm 4:137bb367ba50 151 ctrl &= ~(0x10);
bcostm 4:137bb367ba50 152
bcostm 4:137bb367ba50 153 /* Set Low Power Mode */
bcostm 4:137bb367ba50 154 if(status)
bcostm 4:137bb367ba50 155 {
bcostm 4:137bb367ba50 156 ctrl |= LSM6DSL_ACC_GYRO_LP_XL_ENABLED;
bcostm 4:137bb367ba50 157 }else
bcostm 4:137bb367ba50 158 {
bcostm 4:137bb367ba50 159 ctrl |= LSM6DSL_ACC_GYRO_LP_XL_DISABLED;
bcostm 4:137bb367ba50 160 }
bcostm 4:137bb367ba50 161
bcostm 4:137bb367ba50 162 /* write back control register */
bcostm 4:137bb367ba50 163 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL6_C, ctrl);
bcostm 4:137bb367ba50 164 }
bcostm 4:137bb367ba50 165
bcostm 4:137bb367ba50 166 /**
bcostm 4:137bb367ba50 167 * @brief Read X, Y & Z Acceleration values
bcostm 4:137bb367ba50 168 * @param pData: Data out pointer
bcostm 4:137bb367ba50 169 */
bcostm 4:137bb367ba50 170 void LSM6DSL_AccReadXYZ(int16_t* pData)
bcostm 4:137bb367ba50 171 {
bcostm 4:137bb367ba50 172 int16_t pnRawData[3];
bcostm 4:137bb367ba50 173 uint8_t ctrlx= 0;
bcostm 4:137bb367ba50 174 uint8_t buffer[6];
bcostm 4:137bb367ba50 175 uint8_t i = 0;
bcostm 4:137bb367ba50 176 float sensitivity = 0;
bcostm 4:137bb367ba50 177
bcostm 4:137bb367ba50 178 /* Read the acceleration control register content */
bcostm 4:137bb367ba50 179 ctrlx = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL1_XL);
bcostm 4:137bb367ba50 180
bcostm 4:137bb367ba50 181 /* Read output register X, Y & Z acceleration */
bcostm 4:137bb367ba50 182 SENSOR_IO_ReadMultiple(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_OUTX_L_XL, buffer, 6);
bcostm 4:137bb367ba50 183
bcostm 4:137bb367ba50 184 for(i=0; i<3; i++)
bcostm 4:137bb367ba50 185 {
bcostm 4:137bb367ba50 186 pnRawData[i]=((((uint16_t)buffer[2*i+1]) << 8) + (uint16_t)buffer[2*i]);
bcostm 4:137bb367ba50 187 }
bcostm 4:137bb367ba50 188
bcostm 4:137bb367ba50 189 /* Normal mode */
bcostm 4:137bb367ba50 190 /* Switch the sensitivity value set in the CRTL1_XL */
bcostm 4:137bb367ba50 191 switch(ctrlx & 0x0C)
bcostm 4:137bb367ba50 192 {
bcostm 4:137bb367ba50 193 case LSM6DSL_ACC_FULLSCALE_2G:
bcostm 4:137bb367ba50 194 sensitivity = LSM6DSL_ACC_SENSITIVITY_2G;
bcostm 4:137bb367ba50 195 break;
bcostm 4:137bb367ba50 196 case LSM6DSL_ACC_FULLSCALE_4G:
bcostm 4:137bb367ba50 197 sensitivity = LSM6DSL_ACC_SENSITIVITY_4G;
bcostm 4:137bb367ba50 198 break;
bcostm 4:137bb367ba50 199 case LSM6DSL_ACC_FULLSCALE_8G:
bcostm 4:137bb367ba50 200 sensitivity = LSM6DSL_ACC_SENSITIVITY_8G;
bcostm 4:137bb367ba50 201 break;
bcostm 4:137bb367ba50 202 case LSM6DSL_ACC_FULLSCALE_16G:
bcostm 4:137bb367ba50 203 sensitivity = LSM6DSL_ACC_SENSITIVITY_16G;
bcostm 4:137bb367ba50 204 break;
bcostm 4:137bb367ba50 205 }
bcostm 4:137bb367ba50 206
bcostm 4:137bb367ba50 207 /* Obtain the mg value for the three axis */
bcostm 4:137bb367ba50 208 for(i=0; i<3; i++)
bcostm 4:137bb367ba50 209 {
bcostm 4:137bb367ba50 210 pData[i]=( int16_t )(pnRawData[i] * sensitivity);
bcostm 4:137bb367ba50 211 }
bcostm 4:137bb367ba50 212 }
bcostm 4:137bb367ba50 213
bcostm 4:137bb367ba50 214 /**
bcostm 4:137bb367ba50 215 * @}
bcostm 4:137bb367ba50 216 */
bcostm 4:137bb367ba50 217
bcostm 4:137bb367ba50 218 /** @defgroup LSM6DSL_GYRO_Private_Functions LSM6DSL GYRO Private Functions
bcostm 4:137bb367ba50 219 * @{
bcostm 4:137bb367ba50 220 */
bcostm 4:137bb367ba50 221
bcostm 4:137bb367ba50 222 /**
bcostm 4:137bb367ba50 223 * @brief Set LSM6DSL Gyroscope Initialization.
bcostm 4:137bb367ba50 224 * @param InitStruct: pointer to a LSM6DSL_InitTypeDef structure
bcostm 4:137bb367ba50 225 * that contains the configuration setting for the LSM6DSL.
bcostm 4:137bb367ba50 226 */
bcostm 4:137bb367ba50 227 void LSM6DSL_GyroInit(uint16_t InitStruct)
bcostm 4:137bb367ba50 228 {
bcostm 4:137bb367ba50 229 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 230 uint8_t tmp;
bcostm 4:137bb367ba50 231
bcostm 4:137bb367ba50 232 /* Read CTRL2_G */
bcostm 4:137bb367ba50 233 tmp = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL2_G);
bcostm 4:137bb367ba50 234
bcostm 4:137bb367ba50 235 /* Write value to GYRO MEMS CTRL2_G register: FS and Data Rate */
bcostm 4:137bb367ba50 236 ctrl = (uint8_t) InitStruct;
bcostm 4:137bb367ba50 237 tmp &= ~(0xFC);
bcostm 4:137bb367ba50 238 tmp |= ctrl;
bcostm 4:137bb367ba50 239 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL2_G, tmp);
bcostm 4:137bb367ba50 240
bcostm 4:137bb367ba50 241 /* Read CTRL3_C */
bcostm 4:137bb367ba50 242 tmp = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL3_C);
bcostm 4:137bb367ba50 243
bcostm 4:137bb367ba50 244 /* Write value to GYRO MEMS CTRL3_C register: BDU and Auto-increment */
bcostm 4:137bb367ba50 245 ctrl = ((uint8_t) (InitStruct >> 8));
bcostm 4:137bb367ba50 246 tmp &= ~(0x44);
bcostm 4:137bb367ba50 247 tmp |= ctrl;
bcostm 4:137bb367ba50 248 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL3_C, tmp);
bcostm 4:137bb367ba50 249 }
bcostm 4:137bb367ba50 250
bcostm 4:137bb367ba50 251
bcostm 4:137bb367ba50 252 /**
bcostm 4:137bb367ba50 253 * @brief LSM6DSL Gyroscope De-initialization
bcostm 4:137bb367ba50 254 */
bcostm 4:137bb367ba50 255 void LSM6DSL_GyroDeInit(void)
bcostm 4:137bb367ba50 256 {
bcostm 4:137bb367ba50 257 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 258
bcostm 4:137bb367ba50 259 /* Read control register 1 value */
bcostm 4:137bb367ba50 260 ctrl = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL2_G);
bcostm 4:137bb367ba50 261
bcostm 4:137bb367ba50 262 /* Clear ODR bits */
bcostm 4:137bb367ba50 263 ctrl &= ~(LSM6DSL_ODR_BITPOSITION);
bcostm 4:137bb367ba50 264
bcostm 4:137bb367ba50 265 /* Set Power down */
bcostm 4:137bb367ba50 266 ctrl |= LSM6DSL_ODR_POWER_DOWN;
bcostm 4:137bb367ba50 267
bcostm 4:137bb367ba50 268 /* write back control register */
bcostm 4:137bb367ba50 269 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL2_G, ctrl);
bcostm 4:137bb367ba50 270 }
bcostm 4:137bb367ba50 271
bcostm 4:137bb367ba50 272 /**
bcostm 4:137bb367ba50 273 * @brief Read ID address of LSM6DSL
bcostm 4:137bb367ba50 274 * @retval ID
bcostm 4:137bb367ba50 275 */
bcostm 4:137bb367ba50 276 uint8_t LSM6DSL_GyroReadID(void)
bcostm 4:137bb367ba50 277 {
bcostm 4:137bb367ba50 278 /* IO interface initialization */
bcostm 4:137bb367ba50 279 SENSOR_IO_Init();
bcostm 4:137bb367ba50 280 /* Read value at Who am I register address */
bcostm 4:137bb367ba50 281 return SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_WHO_AM_I_REG);
bcostm 4:137bb367ba50 282 }
bcostm 4:137bb367ba50 283
bcostm 4:137bb367ba50 284 /**
bcostm 4:137bb367ba50 285 * @brief Set/Unset LSM6DSL Gyroscope in low power mode
bcostm 4:137bb367ba50 286 * @param status 0 means disable Low Power Mode, otherwise Low Power Mode is enabled
bcostm 4:137bb367ba50 287 */
bcostm 4:137bb367ba50 288 void LSM6DSL_GyroLowPower(uint16_t status)
bcostm 4:137bb367ba50 289 {
bcostm 4:137bb367ba50 290 uint8_t ctrl = 0x00;
bcostm 4:137bb367ba50 291
bcostm 4:137bb367ba50 292 /* Read CTRL7_G value */
bcostm 4:137bb367ba50 293 ctrl = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL7_G);
bcostm 4:137bb367ba50 294
bcostm 4:137bb367ba50 295 /* Clear Low Power Mode bit */
bcostm 4:137bb367ba50 296 ctrl &= ~(0x80);
bcostm 4:137bb367ba50 297
bcostm 4:137bb367ba50 298 /* Set Low Power Mode */
bcostm 4:137bb367ba50 299 if(status)
bcostm 4:137bb367ba50 300 {
bcostm 4:137bb367ba50 301 ctrl |= LSM6DSL_ACC_GYRO_LP_G_ENABLED;
bcostm 4:137bb367ba50 302 }else
bcostm 4:137bb367ba50 303 {
bcostm 4:137bb367ba50 304 ctrl |= LSM6DSL_ACC_GYRO_LP_G_DISABLED;
bcostm 4:137bb367ba50 305 }
bcostm 4:137bb367ba50 306
bcostm 4:137bb367ba50 307 /* write back control register */
bcostm 4:137bb367ba50 308 SENSOR_IO_Write(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL7_G, ctrl);
bcostm 4:137bb367ba50 309 }
bcostm 4:137bb367ba50 310
bcostm 4:137bb367ba50 311 /**
bcostm 4:137bb367ba50 312 * @brief Calculate the LSM6DSL angular data.
bcostm 4:137bb367ba50 313 * @param pfData: Data out pointer
bcostm 4:137bb367ba50 314 */
bcostm 4:137bb367ba50 315 void LSM6DSL_GyroReadXYZAngRate(float *pfData)
bcostm 4:137bb367ba50 316 {
bcostm 4:137bb367ba50 317 int16_t pnRawData[3];
bcostm 4:137bb367ba50 318 uint8_t ctrlg= 0;
bcostm 4:137bb367ba50 319 uint8_t buffer[6];
bcostm 4:137bb367ba50 320 uint8_t i = 0;
bcostm 4:137bb367ba50 321 float sensitivity = 0;
bcostm 4:137bb367ba50 322
bcostm 4:137bb367ba50 323 /* Read the gyro control register content */
bcostm 4:137bb367ba50 324 ctrlg = SENSOR_IO_Read(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_CTRL2_G);
bcostm 4:137bb367ba50 325
bcostm 4:137bb367ba50 326 /* Read output register X, Y & Z acceleration */
bcostm 4:137bb367ba50 327 SENSOR_IO_ReadMultiple(LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DSL_ACC_GYRO_OUTX_L_G, buffer, 6);
bcostm 4:137bb367ba50 328
bcostm 4:137bb367ba50 329 for(i=0; i<3; i++)
bcostm 4:137bb367ba50 330 {
bcostm 4:137bb367ba50 331 pnRawData[i]=((((uint16_t)buffer[2*i+1]) << 8) + (uint16_t)buffer[2*i]);
bcostm 4:137bb367ba50 332 }
bcostm 4:137bb367ba50 333
bcostm 4:137bb367ba50 334 /* Normal mode */
bcostm 4:137bb367ba50 335 /* Switch the sensitivity value set in the CRTL2_G */
bcostm 4:137bb367ba50 336 switch(ctrlg & 0x0C)
bcostm 4:137bb367ba50 337 {
bcostm 4:137bb367ba50 338 case LSM6DSL_GYRO_FS_245:
bcostm 4:137bb367ba50 339 sensitivity = LSM6DSL_GYRO_SENSITIVITY_245DPS;
bcostm 4:137bb367ba50 340 break;
bcostm 4:137bb367ba50 341 case LSM6DSL_GYRO_FS_500:
bcostm 4:137bb367ba50 342 sensitivity = LSM6DSL_GYRO_SENSITIVITY_500DPS;
bcostm 4:137bb367ba50 343 break;
bcostm 4:137bb367ba50 344 case LSM6DSL_GYRO_FS_1000:
bcostm 4:137bb367ba50 345 sensitivity = LSM6DSL_GYRO_SENSITIVITY_1000DPS;
bcostm 4:137bb367ba50 346 break;
bcostm 4:137bb367ba50 347 case LSM6DSL_GYRO_FS_2000:
bcostm 4:137bb367ba50 348 sensitivity = LSM6DSL_GYRO_SENSITIVITY_2000DPS;
bcostm 4:137bb367ba50 349 break;
bcostm 4:137bb367ba50 350 }
bcostm 4:137bb367ba50 351
bcostm 4:137bb367ba50 352 /* Obtain the mg value for the three axis */
bcostm 4:137bb367ba50 353 for(i=0; i<3; i++)
bcostm 4:137bb367ba50 354 {
bcostm 4:137bb367ba50 355 pfData[i]=( float )(pnRawData[i] * sensitivity);
bcostm 4:137bb367ba50 356 }
bcostm 4:137bb367ba50 357 }
bcostm 4:137bb367ba50 358
bcostm 4:137bb367ba50 359 /**
bcostm 4:137bb367ba50 360 * @}
bcostm 4:137bb367ba50 361 */
bcostm 4:137bb367ba50 362
bcostm 4:137bb367ba50 363 /**
bcostm 4:137bb367ba50 364 * @}
bcostm 4:137bb367ba50 365 */
bcostm 4:137bb367ba50 366
bcostm 4:137bb367ba50 367 /**
bcostm 4:137bb367ba50 368 * @}
bcostm 4:137bb367ba50 369 */
bcostm 4:137bb367ba50 370
bcostm 4:137bb367ba50 371 /**
bcostm 4:137bb367ba50 372 * @}
bcostm 4:137bb367ba50 373 */
bcostm 4:137bb367ba50 374
bcostm 4:137bb367ba50 375 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
bcostm 4:137bb367ba50 376