TUKS MCU Introductory course / TUKS-COURSE-2-LED
Committer:
elmot
Date:
Fri Feb 24 21:13:56 2017 +0000
Revision:
1:d0dfbce63a89
Ready-to-copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elmot 1:d0dfbce63a89 1 /**
elmot 1:d0dfbce63a89 2 ******************************************************************************
elmot 1:d0dfbce63a89 3 * @file l3gd20.c
elmot 1:d0dfbce63a89 4 * @author MCD Application Team
elmot 1:d0dfbce63a89 5 * @version V2.0.0
elmot 1:d0dfbce63a89 6 * @date 26-June-2015
elmot 1:d0dfbce63a89 7 * @brief This file provides a set of functions needed to manage the L3GD20,
elmot 1:d0dfbce63a89 8 * ST MEMS motion sensor, 3-axis digital output gyroscope.
elmot 1:d0dfbce63a89 9 ******************************************************************************
elmot 1:d0dfbce63a89 10 * @attention
elmot 1:d0dfbce63a89 11 *
elmot 1:d0dfbce63a89 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
elmot 1:d0dfbce63a89 13 *
elmot 1:d0dfbce63a89 14 * Redistribution and use in source and binary forms, with or without modification,
elmot 1:d0dfbce63a89 15 * are permitted provided that the following conditions are met:
elmot 1:d0dfbce63a89 16 * 1. Redistributions of source code must retain the above copyright notice,
elmot 1:d0dfbce63a89 17 * this list of conditions and the following disclaimer.
elmot 1:d0dfbce63a89 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
elmot 1:d0dfbce63a89 19 * this list of conditions and the following disclaimer in the documentation
elmot 1:d0dfbce63a89 20 * and/or other materials provided with the distribution.
elmot 1:d0dfbce63a89 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
elmot 1:d0dfbce63a89 22 * may be used to endorse or promote products derived from this software
elmot 1:d0dfbce63a89 23 * without specific prior written permission.
elmot 1:d0dfbce63a89 24 *
elmot 1:d0dfbce63a89 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
elmot 1:d0dfbce63a89 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
elmot 1:d0dfbce63a89 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
elmot 1:d0dfbce63a89 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
elmot 1:d0dfbce63a89 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
elmot 1:d0dfbce63a89 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
elmot 1:d0dfbce63a89 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
elmot 1:d0dfbce63a89 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
elmot 1:d0dfbce63a89 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
elmot 1:d0dfbce63a89 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
elmot 1:d0dfbce63a89 35 *
elmot 1:d0dfbce63a89 36 ******************************************************************************
elmot 1:d0dfbce63a89 37 */
elmot 1:d0dfbce63a89 38 /* Includes ------------------------------------------------------------------*/
elmot 1:d0dfbce63a89 39 #include "l3gd20.h"
elmot 1:d0dfbce63a89 40
elmot 1:d0dfbce63a89 41 /** @addtogroup BSP
elmot 1:d0dfbce63a89 42 * @{
elmot 1:d0dfbce63a89 43 */
elmot 1:d0dfbce63a89 44
elmot 1:d0dfbce63a89 45 /** @addtogroup Components
elmot 1:d0dfbce63a89 46 * @{
elmot 1:d0dfbce63a89 47 */
elmot 1:d0dfbce63a89 48
elmot 1:d0dfbce63a89 49 /** @addtogroup L3GD20
elmot 1:d0dfbce63a89 50 * @{
elmot 1:d0dfbce63a89 51 */
elmot 1:d0dfbce63a89 52
elmot 1:d0dfbce63a89 53 /** @defgroup L3GD20_Private_TypesDefinitions
elmot 1:d0dfbce63a89 54 * @{
elmot 1:d0dfbce63a89 55 */
elmot 1:d0dfbce63a89 56
elmot 1:d0dfbce63a89 57 /**
elmot 1:d0dfbce63a89 58 * @}
elmot 1:d0dfbce63a89 59 */
elmot 1:d0dfbce63a89 60
elmot 1:d0dfbce63a89 61 /** @defgroup L3GD20_Private_Defines
elmot 1:d0dfbce63a89 62 * @{
elmot 1:d0dfbce63a89 63 */
elmot 1:d0dfbce63a89 64
elmot 1:d0dfbce63a89 65 /**
elmot 1:d0dfbce63a89 66 * @}
elmot 1:d0dfbce63a89 67 */
elmot 1:d0dfbce63a89 68
elmot 1:d0dfbce63a89 69 /** @defgroup L3GD20_Private_Macros
elmot 1:d0dfbce63a89 70 * @{
elmot 1:d0dfbce63a89 71 */
elmot 1:d0dfbce63a89 72
elmot 1:d0dfbce63a89 73 /**
elmot 1:d0dfbce63a89 74 * @}
elmot 1:d0dfbce63a89 75 */
elmot 1:d0dfbce63a89 76
elmot 1:d0dfbce63a89 77 /** @defgroup L3GD20_Private_Variables
elmot 1:d0dfbce63a89 78 * @{
elmot 1:d0dfbce63a89 79 */
elmot 1:d0dfbce63a89 80 GYRO_DrvTypeDef L3gd20Drv =
elmot 1:d0dfbce63a89 81 {
elmot 1:d0dfbce63a89 82 L3GD20_Init,
elmot 1:d0dfbce63a89 83 L3GD20_DeInit,
elmot 1:d0dfbce63a89 84 L3GD20_ReadID,
elmot 1:d0dfbce63a89 85 L3GD20_RebootCmd,
elmot 1:d0dfbce63a89 86 L3GD20_LowPower,
elmot 1:d0dfbce63a89 87 L3GD20_INT1InterruptConfig,
elmot 1:d0dfbce63a89 88 L3GD20_EnableIT,
elmot 1:d0dfbce63a89 89 L3GD20_DisableIT,
elmot 1:d0dfbce63a89 90 0,
elmot 1:d0dfbce63a89 91 0,
elmot 1:d0dfbce63a89 92 L3GD20_FilterConfig,
elmot 1:d0dfbce63a89 93 L3GD20_FilterCmd,
elmot 1:d0dfbce63a89 94 L3GD20_ReadXYZAngRate
elmot 1:d0dfbce63a89 95 };
elmot 1:d0dfbce63a89 96
elmot 1:d0dfbce63a89 97 /**
elmot 1:d0dfbce63a89 98 * @}
elmot 1:d0dfbce63a89 99 */
elmot 1:d0dfbce63a89 100
elmot 1:d0dfbce63a89 101 /** @defgroup L3GD20_Private_FunctionPrototypes
elmot 1:d0dfbce63a89 102 * @{
elmot 1:d0dfbce63a89 103 */
elmot 1:d0dfbce63a89 104
elmot 1:d0dfbce63a89 105 /**
elmot 1:d0dfbce63a89 106 * @}
elmot 1:d0dfbce63a89 107 */
elmot 1:d0dfbce63a89 108
elmot 1:d0dfbce63a89 109 /** @defgroup L3GD20_Private_Functions
elmot 1:d0dfbce63a89 110 * @{
elmot 1:d0dfbce63a89 111 */
elmot 1:d0dfbce63a89 112
elmot 1:d0dfbce63a89 113 /**
elmot 1:d0dfbce63a89 114 * @brief Set L3GD20 Initialization.
elmot 1:d0dfbce63a89 115 * @param L3GD20_InitStruct: pointer to a L3GD20_InitTypeDef structure
elmot 1:d0dfbce63a89 116 * that contains the configuration setting for the L3GD20.
elmot 1:d0dfbce63a89 117 * @retval None
elmot 1:d0dfbce63a89 118 */
elmot 1:d0dfbce63a89 119 void L3GD20_Init(uint16_t InitStruct)
elmot 1:d0dfbce63a89 120 {
elmot 1:d0dfbce63a89 121 uint8_t ctrl = 0x00;
elmot 1:d0dfbce63a89 122
elmot 1:d0dfbce63a89 123 /* Configure the low level interface */
elmot 1:d0dfbce63a89 124 GYRO_IO_Init();
elmot 1:d0dfbce63a89 125
elmot 1:d0dfbce63a89 126 /* Write value to MEMS CTRL_REG1 register */
elmot 1:d0dfbce63a89 127 ctrl = (uint8_t) InitStruct;
elmot 1:d0dfbce63a89 128 GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG1_ADDR, 1);
elmot 1:d0dfbce63a89 129
elmot 1:d0dfbce63a89 130 /* Write value to MEMS CTRL_REG4 register */
elmot 1:d0dfbce63a89 131 ctrl = (uint8_t) (InitStruct >> 8);
elmot 1:d0dfbce63a89 132 GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG4_ADDR, 1);
elmot 1:d0dfbce63a89 133 }
elmot 1:d0dfbce63a89 134
elmot 1:d0dfbce63a89 135
elmot 1:d0dfbce63a89 136
elmot 1:d0dfbce63a89 137 /**
elmot 1:d0dfbce63a89 138 * @brief L3GD20 De-initialization
elmot 1:d0dfbce63a89 139 * @param None
elmot 1:d0dfbce63a89 140 * @retval None
elmot 1:d0dfbce63a89 141 */
elmot 1:d0dfbce63a89 142 void L3GD20_DeInit(void)
elmot 1:d0dfbce63a89 143 {
elmot 1:d0dfbce63a89 144 }
elmot 1:d0dfbce63a89 145
elmot 1:d0dfbce63a89 146 /**
elmot 1:d0dfbce63a89 147 * @brief Read ID address of L3GD20
elmot 1:d0dfbce63a89 148 * @param None
elmot 1:d0dfbce63a89 149 * @retval ID name
elmot 1:d0dfbce63a89 150 */
elmot 1:d0dfbce63a89 151 uint8_t L3GD20_ReadID(void)
elmot 1:d0dfbce63a89 152 {
elmot 1:d0dfbce63a89 153 uint8_t tmp;
elmot 1:d0dfbce63a89 154
elmot 1:d0dfbce63a89 155 /* Configure the low level interface */
elmot 1:d0dfbce63a89 156 GYRO_IO_Init();
elmot 1:d0dfbce63a89 157
elmot 1:d0dfbce63a89 158 /* Read WHO I AM register */
elmot 1:d0dfbce63a89 159 GYRO_IO_Read(&tmp, L3GD20_WHO_AM_I_ADDR, 1);
elmot 1:d0dfbce63a89 160
elmot 1:d0dfbce63a89 161 /* Return the ID */
elmot 1:d0dfbce63a89 162 return (uint8_t)tmp;
elmot 1:d0dfbce63a89 163 }
elmot 1:d0dfbce63a89 164
elmot 1:d0dfbce63a89 165 /**
elmot 1:d0dfbce63a89 166 * @brief Reboot memory content of L3GD20
elmot 1:d0dfbce63a89 167 * @param None
elmot 1:d0dfbce63a89 168 * @retval None
elmot 1:d0dfbce63a89 169 */
elmot 1:d0dfbce63a89 170 void L3GD20_RebootCmd(void)
elmot 1:d0dfbce63a89 171 {
elmot 1:d0dfbce63a89 172 uint8_t tmpreg;
elmot 1:d0dfbce63a89 173
elmot 1:d0dfbce63a89 174 /* Read CTRL_REG5 register */
elmot 1:d0dfbce63a89 175 GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);
elmot 1:d0dfbce63a89 176
elmot 1:d0dfbce63a89 177 /* Enable or Disable the reboot memory */
elmot 1:d0dfbce63a89 178 tmpreg |= L3GD20_BOOT_REBOOTMEMORY;
elmot 1:d0dfbce63a89 179
elmot 1:d0dfbce63a89 180 /* Write value to MEMS CTRL_REG5 register */
elmot 1:d0dfbce63a89 181 GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);
elmot 1:d0dfbce63a89 182 }
elmot 1:d0dfbce63a89 183
elmot 1:d0dfbce63a89 184 /**
elmot 1:d0dfbce63a89 185 * @brief Set L3GD20 in low-power mode
elmot 1:d0dfbce63a89 186 * @param
elmot 1:d0dfbce63a89 187 * @retval None
elmot 1:d0dfbce63a89 188 */
elmot 1:d0dfbce63a89 189 void L3GD20_LowPower(uint16_t InitStruct)
elmot 1:d0dfbce63a89 190 {
elmot 1:d0dfbce63a89 191 uint8_t ctrl = 0x00;
elmot 1:d0dfbce63a89 192
elmot 1:d0dfbce63a89 193 /* Write value to MEMS CTRL_REG1 register */
elmot 1:d0dfbce63a89 194 ctrl = (uint8_t) InitStruct;
elmot 1:d0dfbce63a89 195 GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG1_ADDR, 1);
elmot 1:d0dfbce63a89 196 }
elmot 1:d0dfbce63a89 197
elmot 1:d0dfbce63a89 198 /**
elmot 1:d0dfbce63a89 199 * @brief Set L3GD20 Interrupt INT1 configuration
elmot 1:d0dfbce63a89 200 * @param Int1Config: the configuration setting for the L3GD20 Interrupt.
elmot 1:d0dfbce63a89 201 * @retval None
elmot 1:d0dfbce63a89 202 */
elmot 1:d0dfbce63a89 203 void L3GD20_INT1InterruptConfig(uint16_t Int1Config)
elmot 1:d0dfbce63a89 204 {
elmot 1:d0dfbce63a89 205 uint8_t ctrl_cfr = 0x00, ctrl3 = 0x00;
elmot 1:d0dfbce63a89 206
elmot 1:d0dfbce63a89 207 /* Read INT1_CFG register */
elmot 1:d0dfbce63a89 208 GYRO_IO_Read(&ctrl_cfr, L3GD20_INT1_CFG_ADDR, 1);
elmot 1:d0dfbce63a89 209
elmot 1:d0dfbce63a89 210 /* Read CTRL_REG3 register */
elmot 1:d0dfbce63a89 211 GYRO_IO_Read(&ctrl3, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 212
elmot 1:d0dfbce63a89 213 ctrl_cfr &= 0x80;
elmot 1:d0dfbce63a89 214 ctrl_cfr |= ((uint8_t) Int1Config >> 8);
elmot 1:d0dfbce63a89 215
elmot 1:d0dfbce63a89 216 ctrl3 &= 0xDF;
elmot 1:d0dfbce63a89 217 ctrl3 |= ((uint8_t) Int1Config);
elmot 1:d0dfbce63a89 218
elmot 1:d0dfbce63a89 219 /* Write value to MEMS INT1_CFG register */
elmot 1:d0dfbce63a89 220 GYRO_IO_Write(&ctrl_cfr, L3GD20_INT1_CFG_ADDR, 1);
elmot 1:d0dfbce63a89 221
elmot 1:d0dfbce63a89 222 /* Write value to MEMS CTRL_REG3 register */
elmot 1:d0dfbce63a89 223 GYRO_IO_Write(&ctrl3, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 224 }
elmot 1:d0dfbce63a89 225
elmot 1:d0dfbce63a89 226 /**
elmot 1:d0dfbce63a89 227 * @brief Enable INT1 or INT2 interrupt
elmot 1:d0dfbce63a89 228 * @param IntSel: choice of INT1 or INT2
elmot 1:d0dfbce63a89 229 * This parameter can be:
elmot 1:d0dfbce63a89 230 * @arg L3GD20_INT1
elmot 1:d0dfbce63a89 231 * @arg L3GD20_INT2
elmot 1:d0dfbce63a89 232 * @retval None
elmot 1:d0dfbce63a89 233 */
elmot 1:d0dfbce63a89 234 void L3GD20_EnableIT(uint8_t IntSel)
elmot 1:d0dfbce63a89 235 {
elmot 1:d0dfbce63a89 236 uint8_t tmpreg;
elmot 1:d0dfbce63a89 237
elmot 1:d0dfbce63a89 238 /* Read CTRL_REG3 register */
elmot 1:d0dfbce63a89 239 GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 240
elmot 1:d0dfbce63a89 241 if(IntSel == L3GD20_INT1)
elmot 1:d0dfbce63a89 242 {
elmot 1:d0dfbce63a89 243 tmpreg &= 0x7F;
elmot 1:d0dfbce63a89 244 tmpreg |= L3GD20_INT1INTERRUPT_ENABLE;
elmot 1:d0dfbce63a89 245 }
elmot 1:d0dfbce63a89 246 else if(IntSel == L3GD20_INT2)
elmot 1:d0dfbce63a89 247 {
elmot 1:d0dfbce63a89 248 tmpreg &= 0xF7;
elmot 1:d0dfbce63a89 249 tmpreg |= L3GD20_INT2INTERRUPT_ENABLE;
elmot 1:d0dfbce63a89 250 }
elmot 1:d0dfbce63a89 251
elmot 1:d0dfbce63a89 252 /* Write value to MEMS CTRL_REG3 register */
elmot 1:d0dfbce63a89 253 GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 254 }
elmot 1:d0dfbce63a89 255
elmot 1:d0dfbce63a89 256 /**
elmot 1:d0dfbce63a89 257 * @brief Disable INT1 or INT2 interrupt
elmot 1:d0dfbce63a89 258 * @param IntSel: choice of INT1 or INT2
elmot 1:d0dfbce63a89 259 * This parameter can be:
elmot 1:d0dfbce63a89 260 * @arg L3GD20_INT1
elmot 1:d0dfbce63a89 261 * @arg L3GD20_INT2
elmot 1:d0dfbce63a89 262 * @retval None
elmot 1:d0dfbce63a89 263 */
elmot 1:d0dfbce63a89 264 void L3GD20_DisableIT(uint8_t IntSel)
elmot 1:d0dfbce63a89 265 {
elmot 1:d0dfbce63a89 266 uint8_t tmpreg;
elmot 1:d0dfbce63a89 267
elmot 1:d0dfbce63a89 268 /* Read CTRL_REG3 register */
elmot 1:d0dfbce63a89 269 GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 270
elmot 1:d0dfbce63a89 271 if(IntSel == L3GD20_INT1)
elmot 1:d0dfbce63a89 272 {
elmot 1:d0dfbce63a89 273 tmpreg &= 0x7F;
elmot 1:d0dfbce63a89 274 tmpreg |= L3GD20_INT1INTERRUPT_DISABLE;
elmot 1:d0dfbce63a89 275 }
elmot 1:d0dfbce63a89 276 else if(IntSel == L3GD20_INT2)
elmot 1:d0dfbce63a89 277 {
elmot 1:d0dfbce63a89 278 tmpreg &= 0xF7;
elmot 1:d0dfbce63a89 279 tmpreg |= L3GD20_INT2INTERRUPT_DISABLE;
elmot 1:d0dfbce63a89 280 }
elmot 1:d0dfbce63a89 281
elmot 1:d0dfbce63a89 282 /* Write value to MEMS CTRL_REG3 register */
elmot 1:d0dfbce63a89 283 GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1);
elmot 1:d0dfbce63a89 284 }
elmot 1:d0dfbce63a89 285
elmot 1:d0dfbce63a89 286 /**
elmot 1:d0dfbce63a89 287 * @brief Set High Pass Filter Modality
elmot 1:d0dfbce63a89 288 * @param FilterStruct: contains the configuration setting for the L3GD20.
elmot 1:d0dfbce63a89 289 * @retval None
elmot 1:d0dfbce63a89 290 */
elmot 1:d0dfbce63a89 291 void L3GD20_FilterConfig(uint8_t FilterStruct)
elmot 1:d0dfbce63a89 292 {
elmot 1:d0dfbce63a89 293 uint8_t tmpreg;
elmot 1:d0dfbce63a89 294
elmot 1:d0dfbce63a89 295 /* Read CTRL_REG2 register */
elmot 1:d0dfbce63a89 296 GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1);
elmot 1:d0dfbce63a89 297
elmot 1:d0dfbce63a89 298 tmpreg &= 0xC0;
elmot 1:d0dfbce63a89 299
elmot 1:d0dfbce63a89 300 /* Configure MEMS: mode and cutoff frequency */
elmot 1:d0dfbce63a89 301 tmpreg |= FilterStruct;
elmot 1:d0dfbce63a89 302
elmot 1:d0dfbce63a89 303 /* Write value to MEMS CTRL_REG2 register */
elmot 1:d0dfbce63a89 304 GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1);
elmot 1:d0dfbce63a89 305 }
elmot 1:d0dfbce63a89 306
elmot 1:d0dfbce63a89 307 /**
elmot 1:d0dfbce63a89 308 * @brief Enable or Disable High Pass Filter
elmot 1:d0dfbce63a89 309 * @param HighPassFilterState: new state of the High Pass Filter feature.
elmot 1:d0dfbce63a89 310 * This parameter can be:
elmot 1:d0dfbce63a89 311 * @arg: L3GD20_HIGHPASSFILTER_DISABLE
elmot 1:d0dfbce63a89 312 * @arg: L3GD20_HIGHPASSFILTER_ENABLE
elmot 1:d0dfbce63a89 313 * @retval None
elmot 1:d0dfbce63a89 314 */
elmot 1:d0dfbce63a89 315 void L3GD20_FilterCmd(uint8_t HighPassFilterState)
elmot 1:d0dfbce63a89 316 {
elmot 1:d0dfbce63a89 317 uint8_t tmpreg;
elmot 1:d0dfbce63a89 318
elmot 1:d0dfbce63a89 319 /* Read CTRL_REG5 register */
elmot 1:d0dfbce63a89 320 GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);
elmot 1:d0dfbce63a89 321
elmot 1:d0dfbce63a89 322 tmpreg &= 0xEF;
elmot 1:d0dfbce63a89 323
elmot 1:d0dfbce63a89 324 tmpreg |= HighPassFilterState;
elmot 1:d0dfbce63a89 325
elmot 1:d0dfbce63a89 326 /* Write value to MEMS CTRL_REG5 register */
elmot 1:d0dfbce63a89 327 GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);
elmot 1:d0dfbce63a89 328 }
elmot 1:d0dfbce63a89 329
elmot 1:d0dfbce63a89 330 /**
elmot 1:d0dfbce63a89 331 * @brief Get status for L3GD20 data
elmot 1:d0dfbce63a89 332 * @param None
elmot 1:d0dfbce63a89 333 * @retval Data status in a L3GD20 Data
elmot 1:d0dfbce63a89 334 */
elmot 1:d0dfbce63a89 335 uint8_t L3GD20_GetDataStatus(void)
elmot 1:d0dfbce63a89 336 {
elmot 1:d0dfbce63a89 337 uint8_t tmpreg;
elmot 1:d0dfbce63a89 338
elmot 1:d0dfbce63a89 339 /* Read STATUS_REG register */
elmot 1:d0dfbce63a89 340 GYRO_IO_Read(&tmpreg, L3GD20_STATUS_REG_ADDR, 1);
elmot 1:d0dfbce63a89 341
elmot 1:d0dfbce63a89 342 return tmpreg;
elmot 1:d0dfbce63a89 343 }
elmot 1:d0dfbce63a89 344
elmot 1:d0dfbce63a89 345 /**
elmot 1:d0dfbce63a89 346 * @brief Calculate the L3GD20 angular data.
elmot 1:d0dfbce63a89 347 * @param pfData: Data out pointer
elmot 1:d0dfbce63a89 348 * @retval None
elmot 1:d0dfbce63a89 349 */
elmot 1:d0dfbce63a89 350 void L3GD20_ReadXYZAngRate(float *pfData)
elmot 1:d0dfbce63a89 351 {
elmot 1:d0dfbce63a89 352 uint8_t tmpbuffer[6] ={0};
elmot 1:d0dfbce63a89 353 int16_t RawData[3] = {0};
elmot 1:d0dfbce63a89 354 uint8_t tmpreg = 0;
elmot 1:d0dfbce63a89 355 float sensitivity = 0;
elmot 1:d0dfbce63a89 356 int i =0;
elmot 1:d0dfbce63a89 357
elmot 1:d0dfbce63a89 358 GYRO_IO_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);
elmot 1:d0dfbce63a89 359
elmot 1:d0dfbce63a89 360 GYRO_IO_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);
elmot 1:d0dfbce63a89 361
elmot 1:d0dfbce63a89 362 /* check in the control register 4 the data alignment (Big Endian or Little Endian)*/
elmot 1:d0dfbce63a89 363 if(!(tmpreg & L3GD20_BLE_MSB))
elmot 1:d0dfbce63a89 364 {
elmot 1:d0dfbce63a89 365 for(i=0; i<3; i++)
elmot 1:d0dfbce63a89 366 {
elmot 1:d0dfbce63a89 367 RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i+1] << 8) + tmpbuffer[2*i]);
elmot 1:d0dfbce63a89 368 }
elmot 1:d0dfbce63a89 369 }
elmot 1:d0dfbce63a89 370 else
elmot 1:d0dfbce63a89 371 {
elmot 1:d0dfbce63a89 372 for(i=0; i<3; i++)
elmot 1:d0dfbce63a89 373 {
elmot 1:d0dfbce63a89 374 RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i] << 8) + tmpbuffer[2*i+1]);
elmot 1:d0dfbce63a89 375 }
elmot 1:d0dfbce63a89 376 }
elmot 1:d0dfbce63a89 377
elmot 1:d0dfbce63a89 378 /* Switch the sensitivity value set in the CRTL4 */
elmot 1:d0dfbce63a89 379 switch(tmpreg & L3GD20_FULLSCALE_SELECTION)
elmot 1:d0dfbce63a89 380 {
elmot 1:d0dfbce63a89 381 case L3GD20_FULLSCALE_250:
elmot 1:d0dfbce63a89 382 sensitivity=L3GD20_SENSITIVITY_250DPS;
elmot 1:d0dfbce63a89 383 break;
elmot 1:d0dfbce63a89 384
elmot 1:d0dfbce63a89 385 case L3GD20_FULLSCALE_500:
elmot 1:d0dfbce63a89 386 sensitivity=L3GD20_SENSITIVITY_500DPS;
elmot 1:d0dfbce63a89 387 break;
elmot 1:d0dfbce63a89 388
elmot 1:d0dfbce63a89 389 case L3GD20_FULLSCALE_2000:
elmot 1:d0dfbce63a89 390 sensitivity=L3GD20_SENSITIVITY_2000DPS;
elmot 1:d0dfbce63a89 391 break;
elmot 1:d0dfbce63a89 392 }
elmot 1:d0dfbce63a89 393 /* Divide by sensitivity */
elmot 1:d0dfbce63a89 394 for(i=0; i<3; i++)
elmot 1:d0dfbce63a89 395 {
elmot 1:d0dfbce63a89 396 pfData[i]=(float)(RawData[i] * sensitivity);
elmot 1:d0dfbce63a89 397 }
elmot 1:d0dfbce63a89 398 }
elmot 1:d0dfbce63a89 399
elmot 1:d0dfbce63a89 400 /**
elmot 1:d0dfbce63a89 401 * @}
elmot 1:d0dfbce63a89 402 */
elmot 1:d0dfbce63a89 403
elmot 1:d0dfbce63a89 404 /**
elmot 1:d0dfbce63a89 405 * @}
elmot 1:d0dfbce63a89 406 */
elmot 1:d0dfbce63a89 407
elmot 1:d0dfbce63a89 408 /**
elmot 1:d0dfbce63a89 409 * @}
elmot 1:d0dfbce63a89 410 */
elmot 1:d0dfbce63a89 411
elmot 1:d0dfbce63a89 412 /**
elmot 1:d0dfbce63a89 413 * @}
elmot 1:d0dfbce63a89 414 */
elmot 1:d0dfbce63a89 415
elmot 1:d0dfbce63a89 416 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/