Shih-Ho Hsieh / Mbed 2 deprecated Motor_XYZ_UI_SPI_8mag_encoder

Dependencies:   mbed

Committer:
hober
Date:
Mon Jan 07 03:32:36 2019 +0000
Revision:
1:edc6b5cc7112
Parent:
0:9e6e3dc903c0
20190107 for motor control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hober 0:9e6e3dc903c0 1 /**
hober 0:9e6e3dc903c0 2 ******************************************************************************
hober 0:9e6e3dc903c0 3 * @file lis3mdl_class.cpp
hober 0:9e6e3dc903c0 4 * @author AST / EST
hober 0:9e6e3dc903c0 5 * @version V0.0.1
hober 0:9e6e3dc903c0 6 * @date 14-April-2015
hober 0:9e6e3dc903c0 7 * @brief Implementation file for the LIS3MDL driver class
hober 0:9e6e3dc903c0 8 ******************************************************************************
hober 0:9e6e3dc903c0 9 * @attention
hober 0:9e6e3dc903c0 10 *
hober 0:9e6e3dc903c0 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
hober 0:9e6e3dc903c0 12 *
hober 0:9e6e3dc903c0 13 * Redistribution and use in source and binary forms, with or without modification,
hober 0:9e6e3dc903c0 14 * are permitted provided that the following conditions are met:
hober 0:9e6e3dc903c0 15 * 1. Redistributions of source code must retain the above copyright notice,
hober 0:9e6e3dc903c0 16 * this list of conditions and the following disclaimer.
hober 0:9e6e3dc903c0 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
hober 0:9e6e3dc903c0 18 * this list of conditions and the following disclaimer in the documentation
hober 0:9e6e3dc903c0 19 * and/or other materials provided with the distribution.
hober 0:9e6e3dc903c0 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
hober 0:9e6e3dc903c0 21 * may be used to endorse or promote products derived from this software
hober 0:9e6e3dc903c0 22 * without specific prior written permission.
hober 0:9e6e3dc903c0 23 *
hober 0:9e6e3dc903c0 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
hober 0:9e6e3dc903c0 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
hober 0:9e6e3dc903c0 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
hober 0:9e6e3dc903c0 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
hober 0:9e6e3dc903c0 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
hober 0:9e6e3dc903c0 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
hober 0:9e6e3dc903c0 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
hober 0:9e6e3dc903c0 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
hober 0:9e6e3dc903c0 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
hober 0:9e6e3dc903c0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hober 0:9e6e3dc903c0 34 *
hober 0:9e6e3dc903c0 35 ******************************************************************************
hober 0:9e6e3dc903c0 36 */
hober 0:9e6e3dc903c0 37
hober 0:9e6e3dc903c0 38 /* Includes ------------------------------------------------------------------*/
hober 0:9e6e3dc903c0 39 #include "lis3mdl_class.h"
hober 0:9e6e3dc903c0 40 #include "lis3mdl.h"
hober 0:9e6e3dc903c0 41
hober 0:9e6e3dc903c0 42 /* Methods -------------------------------------------------------------------*/
hober 0:9e6e3dc903c0 43 /* betzw - based on:
hober 0:9e6e3dc903c0 44 X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.c: revision #400,
hober 0:9e6e3dc903c0 45 X-CUBE-MEMS1/trunk: revision #416
hober 0:9e6e3dc903c0 46 */
hober 0:9e6e3dc903c0 47
hober 0:9e6e3dc903c0 48 /**
hober 0:9e6e3dc903c0 49 * @brief Set LIS3MDL Initialization
hober 0:9e6e3dc903c0 50 * @param LIS3MDL_Init the configuration setting for the LIS3MDL
hober 0:9e6e3dc903c0 51 * @retval MAGNETO_OK in case of success, an error code otherwise
hober 0:9e6e3dc903c0 52 */
hober 0:9e6e3dc903c0 53 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Init(MAGNETO_InitTypeDef *LIS3MDL_Init)
hober 0:9e6e3dc903c0 54 {
hober 0:9e6e3dc903c0 55 uint8_t tmp1 = 0x00;
hober 0:9e6e3dc903c0 56
hober 0:9e6e3dc903c0 57 /* Configure the low level interface ---------------------------------------*/
hober 0:9e6e3dc903c0 58 if(LIS3MDL_IO_Init() != MAGNETO_OK) {
hober 0:9e6e3dc903c0 59 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 60 }
hober 0:9e6e3dc903c0 61
hober 0:9e6e3dc903c0 62 /****** Magnetic sensor *******/
hober 0:9e6e3dc903c0 63
hober 0:9e6e3dc903c0 64 if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 65 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 66 }
hober 0:9e6e3dc903c0 67
hober 0:9e6e3dc903c0 68 /* Conversion mode selection */
hober 0:9e6e3dc903c0 69 tmp1 &= ~(LIS3MDL_M_MD_MASK);
hober 0:9e6e3dc903c0 70 tmp1 |= LIS3MDL_Init->M_OperatingMode;
hober 0:9e6e3dc903c0 71
hober 0:9e6e3dc903c0 72 if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 73 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 74 }
hober 0:9e6e3dc903c0 75
hober 0:9e6e3dc903c0 76 if(LIS3MDL_M_Set_ODR( LIS3MDL_Init->M_OutputDataRate ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 77 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 78 }
hober 0:9e6e3dc903c0 79
hober 0:9e6e3dc903c0 80 if(LIS3MDL_M_Set_FS( LIS3MDL_Init->M_FullScale ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 81 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 82 }
hober 0:9e6e3dc903c0 83
hober 0:9e6e3dc903c0 84 /* Configure interrupt lines */
hober 0:9e6e3dc903c0 85 LIS3MDL_IO_ITConfig();
hober 0:9e6e3dc903c0 86
hober 0:9e6e3dc903c0 87 return MAGNETO_OK;
hober 0:9e6e3dc903c0 88
hober 0:9e6e3dc903c0 89 /******************************/
hober 0:9e6e3dc903c0 90 }
hober 0:9e6e3dc903c0 91
hober 0:9e6e3dc903c0 92
hober 0:9e6e3dc903c0 93 /**
hober 0:9e6e3dc903c0 94 * @brief Read ID of LIS3MDL Magnetic sensor
hober 0:9e6e3dc903c0 95 * @param m_id the pointer where the ID of the device is stored
hober 0:9e6e3dc903c0 96 * @retval MAGNETO_OK in case of success, an error code otherwise
hober 0:9e6e3dc903c0 97 */
hober 0:9e6e3dc903c0 98 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Read_M_ID(uint8_t *m_id)
hober 0:9e6e3dc903c0 99 {
hober 0:9e6e3dc903c0 100 if(!m_id) {
hober 0:9e6e3dc903c0 101 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 102 }
hober 0:9e6e3dc903c0 103
hober 0:9e6e3dc903c0 104 return LIS3MDL_IO_Read(m_id, LIS3MDL_M_WHO_AM_I_ADDR, 1);
hober 0:9e6e3dc903c0 105 }
hober 0:9e6e3dc903c0 106
hober 0:9e6e3dc903c0 107
hober 0:9e6e3dc903c0 108 /**
hober 0:9e6e3dc903c0 109 * @brief Read raw data from LIS3MDL Magnetic sensor output register
hober 0:9e6e3dc903c0 110 * @param pData the pointer where the magnetometer raw data are stored
hober 0:9e6e3dc903c0 111 * @retval MAGNETO_OK in case of success, an error code otherwise
hober 0:9e6e3dc903c0 112 */
hober 0:9e6e3dc903c0 113 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_GetAxesRaw(int16_t *pData)
hober 0:9e6e3dc903c0 114 {
hober 0:9e6e3dc903c0 115 uint8_t tempReg[6] = {0, 0, 0, 0, 0, 0};
hober 0:9e6e3dc903c0 116
hober 0:9e6e3dc903c0 117 if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_X_L_M), 6) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 118 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 119 }
hober 0:9e6e3dc903c0 120
hober 0:9e6e3dc903c0 121 pData[0] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
hober 0:9e6e3dc903c0 122 /*
hober 0:9e6e3dc903c0 123 if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Y_L_M), 2) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 124 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 125 }
hober 0:9e6e3dc903c0 126 */
hober 0:9e6e3dc903c0 127 pData[1] = ((((int16_t)tempReg[3]) << 8) + (int16_t)tempReg[2]);
hober 0:9e6e3dc903c0 128 /*
hober 0:9e6e3dc903c0 129 if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Z_L_M), 2) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 130 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 131 }
hober 0:9e6e3dc903c0 132 */
hober 0:9e6e3dc903c0 133 pData[2] = ((((int16_t)tempReg[5]) << 8) + (int16_t)tempReg[4]);
hober 0:9e6e3dc903c0 134
hober 0:9e6e3dc903c0 135 return MAGNETO_OK;
hober 0:9e6e3dc903c0 136 }
hober 0:9e6e3dc903c0 137
hober 0:9e6e3dc903c0 138
hober 0:9e6e3dc903c0 139 /**
hober 0:9e6e3dc903c0 140 * @brief Read data from LIS3MDL Magnetic sensor and calculate Magnetic in mgauss
hober 0:9e6e3dc903c0 141 * @param pData the pointer where the magnetometer data are stored
hober 0:9e6e3dc903c0 142 * @retval MAGNETO_OK in case of success, an error code otherwise
hober 0:9e6e3dc903c0 143 */
hober 0:9e6e3dc903c0 144 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_GetAxes(int32_t *pData)
hober 0:9e6e3dc903c0 145 {
hober 0:9e6e3dc903c0 146 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 147 int16_t pDataRaw[3];
hober 0:9e6e3dc903c0 148 float sensitivity = 0;
hober 0:9e6e3dc903c0 149
hober 0:9e6e3dc903c0 150 if(LIS3MDL_M_GetAxesRaw(pDataRaw) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 151 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 152 }
hober 0:9e6e3dc903c0 153
hober 0:9e6e3dc903c0 154 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 155 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 156 }
hober 0:9e6e3dc903c0 157
hober 0:9e6e3dc903c0 158 tempReg &= LIS3MDL_M_FS_MASK;
hober 0:9e6e3dc903c0 159
hober 0:9e6e3dc903c0 160 switch(tempReg) {
hober 0:9e6e3dc903c0 161 case LIS3MDL_M_FS_4:
hober 0:9e6e3dc903c0 162 sensitivity = 0.14;
hober 0:9e6e3dc903c0 163 break;
hober 0:9e6e3dc903c0 164 case LIS3MDL_M_FS_8:
hober 0:9e6e3dc903c0 165 sensitivity = 0.29;
hober 0:9e6e3dc903c0 166 break;
hober 0:9e6e3dc903c0 167 case LIS3MDL_M_FS_12:
hober 0:9e6e3dc903c0 168 sensitivity = 0.43;
hober 0:9e6e3dc903c0 169 break;
hober 0:9e6e3dc903c0 170 case LIS3MDL_M_FS_16:
hober 0:9e6e3dc903c0 171 sensitivity = 0.58;
hober 0:9e6e3dc903c0 172 break;
hober 0:9e6e3dc903c0 173 }
hober 0:9e6e3dc903c0 174
hober 0:9e6e3dc903c0 175 pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
hober 0:9e6e3dc903c0 176 pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
hober 0:9e6e3dc903c0 177 pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
hober 0:9e6e3dc903c0 178
hober 0:9e6e3dc903c0 179 return MAGNETO_OK;
hober 0:9e6e3dc903c0 180 }
hober 0:9e6e3dc903c0 181
hober 0:9e6e3dc903c0 182 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_Get_ODR( float *odr )
hober 0:9e6e3dc903c0 183 {
hober 0:9e6e3dc903c0 184 /*Here we have to add the check if the parameters are valid*/
hober 0:9e6e3dc903c0 185 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 186
hober 0:9e6e3dc903c0 187 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 188 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 189 }
hober 0:9e6e3dc903c0 190
hober 0:9e6e3dc903c0 191 tempReg &= LIS3MDL_M_FAST_ODR_MASK;
hober 0:9e6e3dc903c0 192 if(tempReg == LIS3MDL_M_FAST_ODR_ENABLE) {
hober 0:9e6e3dc903c0 193
hober 0:9e6e3dc903c0 194 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 195 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 196 }
hober 0:9e6e3dc903c0 197 tempReg &= LIS3MDL_M_OM_MASK;
hober 0:9e6e3dc903c0 198 switch(tempReg) {
hober 0:9e6e3dc903c0 199 case LIS3MDL_M_OM_LP:
hober 0:9e6e3dc903c0 200 *odr = 1000.0f;
hober 0:9e6e3dc903c0 201 break;
hober 0:9e6e3dc903c0 202 case LIS3MDL_M_OM_MP:
hober 0:9e6e3dc903c0 203 *odr = 560.0f;
hober 0:9e6e3dc903c0 204 break;
hober 0:9e6e3dc903c0 205 case LIS3MDL_M_OM_HP:
hober 0:9e6e3dc903c0 206 *odr = 300.0f;
hober 0:9e6e3dc903c0 207 break;
hober 0:9e6e3dc903c0 208 case LIS3MDL_M_OM_UHP:
hober 0:9e6e3dc903c0 209 *odr = 155.0f;
hober 0:9e6e3dc903c0 210 break;
hober 0:9e6e3dc903c0 211 }
hober 0:9e6e3dc903c0 212 } else {
hober 0:9e6e3dc903c0 213 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 214 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 215 }
hober 0:9e6e3dc903c0 216 tempReg &= LIS3MDL_M_DO_MASK;
hober 0:9e6e3dc903c0 217 switch(tempReg) {
hober 0:9e6e3dc903c0 218 case LIS3MDL_M_DO_0_625:
hober 0:9e6e3dc903c0 219 *odr = 0.625f;
hober 0:9e6e3dc903c0 220 break;
hober 0:9e6e3dc903c0 221 case LIS3MDL_M_DO_1_25:
hober 0:9e6e3dc903c0 222 *odr = 1.25f;
hober 0:9e6e3dc903c0 223 break;
hober 0:9e6e3dc903c0 224 case LIS3MDL_M_DO_2_5:
hober 0:9e6e3dc903c0 225 *odr = 2.5f;
hober 0:9e6e3dc903c0 226 break;
hober 0:9e6e3dc903c0 227 case LIS3MDL_M_DO_5:
hober 0:9e6e3dc903c0 228 *odr = 5.0f;
hober 0:9e6e3dc903c0 229 break;
hober 0:9e6e3dc903c0 230 case LIS3MDL_M_DO_10:
hober 0:9e6e3dc903c0 231 *odr = 10.0f;
hober 0:9e6e3dc903c0 232 break;
hober 0:9e6e3dc903c0 233 case LIS3MDL_M_DO_20:
hober 0:9e6e3dc903c0 234 *odr = 20.0f;
hober 0:9e6e3dc903c0 235 break;
hober 0:9e6e3dc903c0 236 case LIS3MDL_M_DO_40:
hober 0:9e6e3dc903c0 237 *odr = 40.0f;
hober 0:9e6e3dc903c0 238 break;
hober 0:9e6e3dc903c0 239 case LIS3MDL_M_DO_80:
hober 0:9e6e3dc903c0 240 *odr = 80.0f;
hober 0:9e6e3dc903c0 241 break;
hober 0:9e6e3dc903c0 242 }
hober 0:9e6e3dc903c0 243 }
hober 0:9e6e3dc903c0 244 return MAGNETO_OK;
hober 0:9e6e3dc903c0 245 }
hober 0:9e6e3dc903c0 246
hober 0:9e6e3dc903c0 247 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_Set_ODR( float odr )
hober 0:9e6e3dc903c0 248 {
hober 0:9e6e3dc903c0 249 uint8_t new_odr = 0x00;
hober 0:9e6e3dc903c0 250 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 251
hober 0:9e6e3dc903c0 252 if(odr>80.0f){
hober 0:9e6e3dc903c0 253 new_odr = ( odr <= 155.0f ) ? LIS3MDL_M_OM_UHP
hober 0:9e6e3dc903c0 254 : ( odr <= 300.0f ) ? LIS3MDL_M_OM_HP
hober 0:9e6e3dc903c0 255 : ( odr <= 560.0f ) ? LIS3MDL_M_OM_MP
hober 0:9e6e3dc903c0 256 : LIS3MDL_M_OM_LP;
hober 0:9e6e3dc903c0 257
hober 0:9e6e3dc903c0 258 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 259 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 260 }
hober 0:9e6e3dc903c0 261
hober 0:9e6e3dc903c0 262 tempReg &= ~(LIS3MDL_M_OM_MASK);
hober 0:9e6e3dc903c0 263 tempReg |= (new_odr|LIS3MDL_M_FAST_ODR_ENABLE);
hober 0:9e6e3dc903c0 264
hober 0:9e6e3dc903c0 265 if(LIS3MDL_IO_Write(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 266 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 267 }
hober 0:9e6e3dc903c0 268 }
hober 0:9e6e3dc903c0 269 else{
hober 0:9e6e3dc903c0 270
hober 0:9e6e3dc903c0 271 new_odr = ( odr <= 0.625f ) ? LIS3MDL_M_DO_0_625
hober 0:9e6e3dc903c0 272 : ( odr <= 1.25f ) ? LIS3MDL_M_DO_1_25
hober 0:9e6e3dc903c0 273 : ( odr <= 2.5f ) ? LIS3MDL_M_DO_2_5
hober 0:9e6e3dc903c0 274 : ( odr <= 5.0f ) ? LIS3MDL_M_DO_5
hober 0:9e6e3dc903c0 275 : ( odr <= 10.0f ) ? LIS3MDL_M_DO_10
hober 0:9e6e3dc903c0 276 : ( odr <= 20.0f ) ? LIS3MDL_M_DO_20
hober 0:9e6e3dc903c0 277 : ( odr <= 40.0f ) ? LIS3MDL_M_DO_40
hober 0:9e6e3dc903c0 278 : LIS3MDL_M_DO_80;
hober 0:9e6e3dc903c0 279
hober 0:9e6e3dc903c0 280 if(LIS3MDL_IO_Read( &tempReg, LIS3MDL_M_CTRL_REG1_M, 1 ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 281 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 282 }
hober 0:9e6e3dc903c0 283
hober 0:9e6e3dc903c0 284 tempReg &= ~(LIS3MDL_M_DO_MASK);
hober 0:9e6e3dc903c0 285 tempReg |= new_odr;
hober 0:9e6e3dc903c0 286
hober 0:9e6e3dc903c0 287 if(LIS3MDL_IO_Write(&tempReg, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 288 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 289 }
hober 0:9e6e3dc903c0 290 }
hober 0:9e6e3dc903c0 291 return MAGNETO_OK;
hober 0:9e6e3dc903c0 292 }
hober 0:9e6e3dc903c0 293
hober 0:9e6e3dc903c0 294 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_Get_FS( float *fullScale )
hober 0:9e6e3dc903c0 295 {
hober 0:9e6e3dc903c0 296 /*Here we have to add the check if the parameters are valid*/
hober 0:9e6e3dc903c0 297 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 298
hober 0:9e6e3dc903c0 299 if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 300 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 301 }
hober 0:9e6e3dc903c0 302
hober 0:9e6e3dc903c0 303 tempReg &= LIS3MDL_M_FS_MASK;
hober 0:9e6e3dc903c0 304
hober 0:9e6e3dc903c0 305 switch(tempReg) {
hober 0:9e6e3dc903c0 306 case LIS3MDL_M_FS_4:
hober 0:9e6e3dc903c0 307 *fullScale = 4.0f;
hober 0:9e6e3dc903c0 308 break;
hober 0:9e6e3dc903c0 309 case LIS3MDL_M_FS_8:
hober 0:9e6e3dc903c0 310 *fullScale = 8.0f;
hober 0:9e6e3dc903c0 311 break;
hober 0:9e6e3dc903c0 312 case LIS3MDL_M_FS_12:
hober 0:9e6e3dc903c0 313 *fullScale = 12.0f;
hober 0:9e6e3dc903c0 314 break;
hober 0:9e6e3dc903c0 315 case LIS3MDL_M_FS_16:
hober 0:9e6e3dc903c0 316 *fullScale = 16.0f;
hober 0:9e6e3dc903c0 317 break;
hober 0:9e6e3dc903c0 318 }
hober 0:9e6e3dc903c0 319
hober 0:9e6e3dc903c0 320 return MAGNETO_OK;
hober 0:9e6e3dc903c0 321 }
hober 0:9e6e3dc903c0 322
hober 0:9e6e3dc903c0 323 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_Set_FS( float fullScale )
hober 0:9e6e3dc903c0 324 {
hober 0:9e6e3dc903c0 325 uint8_t new_fs = 0x00;
hober 0:9e6e3dc903c0 326 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 327
hober 0:9e6e3dc903c0 328 new_fs = ( fullScale <= 4.0f ) ? LIS3MDL_M_FS_4
hober 0:9e6e3dc903c0 329 : ( fullScale <= 8.0f ) ? LIS3MDL_M_FS_8
hober 0:9e6e3dc903c0 330 : ( fullScale <= 12.0f ) ? LIS3MDL_M_FS_12
hober 0:9e6e3dc903c0 331 : LIS3MDL_M_FS_16;
hober 0:9e6e3dc903c0 332
hober 0:9e6e3dc903c0 333 if(LIS3MDL_IO_Read( &tempReg, LIS3MDL_M_CTRL_REG2_M, 1 ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 334 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 335 }
hober 0:9e6e3dc903c0 336
hober 0:9e6e3dc903c0 337 tempReg &= ~(LIS3MDL_M_FS_MASK);
hober 0:9e6e3dc903c0 338 tempReg |= new_fs;
hober 0:9e6e3dc903c0 339
hober 0:9e6e3dc903c0 340 if(LIS3MDL_IO_Write(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 341 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 342 }
hober 0:9e6e3dc903c0 343
hober 0:9e6e3dc903c0 344 return MAGNETO_OK;
hober 0:9e6e3dc903c0 345 }
hober 0:9e6e3dc903c0 346
hober 0:9e6e3dc903c0 347 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_GetSensitivity( float *pfData )
hober 0:9e6e3dc903c0 348 {
hober 0:9e6e3dc903c0 349 /*Here we have to add the check if the parameters are valid*/
hober 0:9e6e3dc903c0 350
hober 0:9e6e3dc903c0 351 uint8_t tempReg = 0x00;
hober 0:9e6e3dc903c0 352 if(LIS3MDL_IO_Read( &tempReg, LIS3MDL_M_CTRL_REG2_M, 1 ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 353 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 354 }
hober 0:9e6e3dc903c0 355
hober 0:9e6e3dc903c0 356 tempReg &= LIS3MDL_M_FS_MASK;
hober 0:9e6e3dc903c0 357
hober 0:9e6e3dc903c0 358 switch(tempReg) {
hober 0:9e6e3dc903c0 359 case LIS3MDL_M_FS_4:
hober 0:9e6e3dc903c0 360 *pfData = 0.14;
hober 0:9e6e3dc903c0 361 break;
hober 0:9e6e3dc903c0 362 case LIS3MDL_M_FS_8:
hober 0:9e6e3dc903c0 363 *pfData = 0.29;
hober 0:9e6e3dc903c0 364 break;
hober 0:9e6e3dc903c0 365 case LIS3MDL_M_FS_12:
hober 0:9e6e3dc903c0 366 *pfData = 0.43;
hober 0:9e6e3dc903c0 367 break;
hober 0:9e6e3dc903c0 368 case LIS3MDL_M_FS_16:
hober 0:9e6e3dc903c0 369 *pfData = 0.58;
hober 0:9e6e3dc903c0 370 break;
hober 0:9e6e3dc903c0 371 }
hober 0:9e6e3dc903c0 372
hober 0:9e6e3dc903c0 373 return MAGNETO_OK;
hober 0:9e6e3dc903c0 374 }
hober 0:9e6e3dc903c0 375
hober 0:9e6e3dc903c0 376 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Reset_Regs()
hober 0:9e6e3dc903c0 377 {
hober 0:9e6e3dc903c0 378 uint8_t tmp = 0;
hober 0:9e6e3dc903c0 379
hober 0:9e6e3dc903c0 380 if(LIS3MDL_IO_Read( &tmp, LIS3MDL_M_CTRL_REG2_M, 1 ) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 381 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 382 }
hober 0:9e6e3dc903c0 383
hober 0:9e6e3dc903c0 384 tmp &= LIS3MDL_M_SOFT_RST_MASK;
hober 0:9e6e3dc903c0 385 tmp |= LIS3MDL_M_SOFT_RST_RESET;
hober 0:9e6e3dc903c0 386
hober 0:9e6e3dc903c0 387 if(LIS3MDL_IO_Write( &tmp, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK) {
hober 0:9e6e3dc903c0 388 return MAGNETO_ERROR;
hober 0:9e6e3dc903c0 389 }
hober 0:9e6e3dc903c0 390
hober 0:9e6e3dc903c0 391 return MAGNETO_OK;
hober 0:9e6e3dc903c0 392 }
hober 0:9e6e3dc903c0 393 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
hober 0:9e6e3dc903c0 394