Library for supporting the Nucleo Sensor Shield.
Dependents: Nucleo_Sensors_Demo m2x-temp_ethernet_demo m2x-MEMS_ACKme_Wifi_demo m2x_MEMS_Ublox_Cellular_demo ... more
Fork of Nucleo_Sensor_Shield by
lps25h_platform.h
00001 /** 00002 ****************************************************************************** 00003 * @file lps25h.h 00004 * @author MEMS Application Team 00005 * @version V1.0.0 00006 * @date 30-July-2014 00007 * @brief This file contains definitions for the lps25h.c 00008 * firmware driver. 00009 ****************************************************************************** 00010 * @attention 00011 * 00012 * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> 00013 * 00014 * Redistribution and use in source and binary forms, with or without modification, 00015 * are permitted provided that the following conditions are met: 00016 * 1. Redistributions of source code must retain the above copyright notice, 00017 * this list of conditions and the following disclaimer. 00018 * 2. Redistributions in binary form must reproduce the above copyright notice, 00019 * this list of conditions and the following disclaimer in the documentation 00020 * and/or other materials provided with the distribution. 00021 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00022 * may be used to endorse or promote products derived from this software 00023 * without specific prior written permission. 00024 * 00025 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00026 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00028 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00029 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00030 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00031 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00032 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00033 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00034 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 ****************************************************************************** 00037 */ 00038 00039 /* Define to prevent recursive inclusion -------------------------------------*/ 00040 #ifndef __LPS25H_PLATFORM_H 00041 #define __LPS25H_PLATFORM_H 00042 00043 /** @addtogroup LPS25H 00044 * @{ 00045 */ 00046 00047 /** @defgroup LPS25H_Exported_Constants 00048 * @{ 00049 */ 00050 00051 /******************************************************************************/ 00052 /*************************** START REGISTER MAPPING **************************/ 00053 /******************************************************************************/ 00054 00055 00056 /** 00057 * @brief Reference pressure (LSB data) 00058 * \code 00059 * Read/write 00060 * Default value: 0x00 00061 * 7:0 REF7-ODR0: Lower part of the reference pressure that 00062 * is sum to the sensor output pressure. 00063 * \endcode 00064 */ 00065 #define LPS25H_REF_P_XL_ADDR 0x08 00066 00067 /** 00068 * @brief Reference pressure (middle part) 00069 * \code 00070 * Read/write 00071 * Default value: 0x00 00072 * 7:0 REF15-ODR8: Middle part of the reference pressure that 00073 * is sum to the sensor output pressure. 00074 * \endcode 00075 */ 00076 #define LPS25H_REF_P_L_ADDR 0x09 00077 00078 /** 00079 * @brief Reference pressure (MSB part) 00080 * \code 00081 * Read/write 00082 * Default value: 0x00 00083 * 7:0 REF15-ODR8: Higher part of the reference pressure that 00084 * is sum to the sensor output pressure. 00085 * \endcode 00086 */ 00087 #define LPS25H_REF_P_H_ADDR 0x0A 00088 00089 /** 00090 * @brief Device identifier register. 00091 * \code 00092 * Read 00093 * Default value: 0xBD 00094 * 7:0 This read-only register contains the device identifier that, 00095 for LPS25H, is set to 0xCA. 00096 * \endcode 00097 */ 00098 #define LPS25H_WHO_AM_I_ADDR 0x0F 00099 00100 /** 00101 * @brief Pressure and temperature resolution mode register. 00102 * \code 00103 * Read 00104 * Default value: 0x05 00105 * [7:4] Reserved 00106 * [3:2] AVGP1-0: select the pressure internal average. 00107 * [1:0] AVGT1-0: select the temperature internal average. 00108 * \endcode 00109 */ 00110 #define LPS25H_RES_CONF_ADDR 0x10 00111 00112 /** 00113 * @brief Pressure sensor control register 1 00114 * \code 00115 * Read/write 00116 * Default value: 0x00 00117 * 7 PD: power down control. 0 - disable; 1 - enable 00118 * 6:4 ODR2, ODR1, ODR0: output data rate selection. 00119 * ODR2 | ODR1 | ODR0 | Pressure output data-rate(Hz) | Temperature output data-rate(Hz) 00120 * ---------------------------------------------------------------------------------- 00121 * 0 | 0 | 0 | one shot | one shot 00122 * 0 | 0 | 1 | 1 | 1 00123 * 0 | 1 | 0 | 7 | 7 00124 * 0 | 1 | 1 | 12.5 | 12.5 00125 * 1 | 0 | 0 | 25 | 25 00126 * 1 | 0 | 1 | Reserved | Reserved 00127 * 1 | 1 | 0 | Reserved | Reserved 00128 * 1 | 1 | 1 | Reserved | Reserved 00129 * 00130 * 3 DIFF_EN: Interrupt circuit. 0 - disable; 1 - enable 00131 * 2 BDU: block data update. 0 - disable; 1 - enable 00132 * 1 DELTA_EN: delta pressure. 0 - disable; 1 - enable 00133 * 1 RESET_AZ: reset AutoZero. 0 - disable; 1 - enable ///////ALE REVIEW 00134 * 0 SIM: SPI Serial Interface Mode selection. 0 - SPI 4-wire; 1 - SPI 3-wire ///////ALE REVIEW 00135 * \endcode 00136 */ 00137 #define LPS25H_CTRL_REG1_ADDR 0x20 00138 00139 /** 00140 * @brief Pressure sensor control register 2 00141 * \code 00142 * Read/write 00143 * Default value: 0x00 00144 * 7 BOOT: Reboot memory content. 0: normal mode; 1: reboot memory content 00145 * 6 FIFO_EN: FIFO. 0: disable; 1: enable 00146 * 5 WTM_EN: FIFO Watermark level use. 0: disable; 1: enable 00147 * 4:3 Reserved. keep these bits at 0 00148 * 2 SWRESET: Software reset. 0: normal mode; 1: SW reset. 00149 * 1 AUTO_ZERO: Autozero enable. 0: normal mode; 1: autozero enable. 00150 * 0 ONE_SHOT: One shot enable. 0: waiting for start of conversion; 1: start for a new dataset 00151 * \endcode 00152 */ 00153 #define LPS25H_CTRL_REG2_ADDR 0x21 00154 00155 /** 00156 * @brief Pressure sensor control register 3 00157 * \code 00158 * Read/write 00159 * Default value: 0x00 00160 * 7 INT_H_L: Interrupt. 0:active high; 1: active low. 00161 * 6 PP_OD: Push-Pull/OpenDrain selection on interrupt pads. 0: Push-pull; 1: open drain. 00162 * 5 Reserved 00163 * 4:3 INT2_S2, INT2_S1: INT2 output signal selection control bits. // TO DO 00164 * 1:0 INT1_S2, INT1_S1: data signal on INT1 pad control bits. 00165 * INT1(2)_S2 | INT1(2)_S1 | INT1(2) pin 00166 * ------------------------------------------------------ 00167 * 0 | 0 | Data signal 00168 * 0 | 1 | Pressure high (P_high) 00169 * 1 | 0 | Pressure low (P_low) 00170 * 1 | 1 | P_low OR P_high 00171 00172 00173 * \endcode 00174 */ 00175 #define LPS25H_CTRL_REG3_ADDR 0x22 00176 00177 /** 00178 * @brief Pressure sensor control register 4 00179 * \code 00180 * Read/write 00181 * Default value: 0x00 00182 * 7 P2_EMPTY: Empty Signal on INT2 pin. 00183 * 6 P2_WTM: Watermark Signal on INT2 pin. 00184 * 5 P2_Overrun:Overrun Signal on INT2 pin. 00185 * 4 P2_DRDY: Data Ready Signal on INT2 pin. 00186 * 3 P1_EMPTY: Empty Signal on INT1 pin. 00187 * 2 P1_WTM: Watermark Signal on INT1 pin. 00188 * 1 P1_Overrunn:Overrun Signal on INT1 pin. 00189 * 0 P1_DRDY: Data Ready Signal on INT1 pin. 00190 * \endcode 00191 */ 00192 #define LPS25H_CTRL_REG4_ADDR 0x23 00193 00194 /** 00195 * @brief Interrupt configuration Register 00196 * \code 00197 * Read/write 00198 * Default value: 0x00. 00199 * 7:3 Reserved. 00200 * 2 LIR: Latch Interrupt request into INT_SOURCE register. 0 - disable; 1 - enable 00201 * 1 PL_E: Enable interrupt generation on differential pressure low event. 0 - disable; 1 - enable 00202 * 0 PH_E: Enable interrupt generation on differential pressure high event. 0 - disable; 1 - enable 00203 * \endcode 00204 */ 00205 #define LPS25H_INT_CFG_REG_ADDR 0x24 00206 00207 /** 00208 * @brief Interrupt source Register 00209 * \code 00210 * Read 00211 * Default value: 0x00. 00212 * 7:3 0. 00213 * 2 IA: Interrupt Active.0: no interrupt has been generated; 1: one or more interrupt events have been generated. 00214 * 1 PL: Differential pressure Low. 0: no interrupt has been generated; 1: Low differential pressure event has occurred. 00215 * 0 PH: Differential pressure High. 0: no interrupt has been generated; 1: High differential pressure event has occurred. 00216 * \endcode 00217 */ 00218 #define LPS25H_INT_SOURCE_REG_ADDR 0x25 00219 00220 /** 00221 * @brief Threshold pressure (LSB) 00222 * \code 00223 * Read 00224 * Default value: 0x00. 00225 * 7:0 THS7-THS0: Low part of threshold value for pressure interrupt 00226 * generation. The complete threshold value is given by THS_P_H & THS_P_L and is 00227 * expressed as unsigned number. P_ths(mbar)=(THS_P_H & THS_P_L)[dec]/16. 00228 * \endcode 00229 */ 00230 #define LPS25H_THS_P_LOW_REG_ADDR 0x30 00231 00232 /** 00233 * @brief Threshold pressure (MSB) 00234 * \code 00235 * Read 00236 * Default value: 0x00. 00237 * 7:0 THS15-THS8: High part of threshold value for pressure interrupt 00238 * generation. The complete threshold value is given by THS_P_H & THS_P_L and is 00239 * expressed as unsigned number. P_ths(mbar)=(THS_P_H & THS_P_L)[dec]/16. 00240 * \endcode 00241 */ 00242 #define LPS25H_THS_P_HIGH_REG_ADDR 0x31 00243 00244 /** 00245 * @brief Status Register 00246 * \code 00247 * Read 00248 * Default value: 0x00 00249 * 7:6 0 00250 * 5 P_OR: Pressure data overrun. 0: no overrun has occurred; 1: new data for pressure has overwritten the previous one. 00251 * 4 T_OR: Temperature data overrun. 0: no overrun has occurred; 1: a new data for temperature has overwritten the previous one. 00252 * 3:2 0 00253 * 1 P_DA: Pressure data available. 0: new data for pressure is not yet available; 1: new data for pressure is available. 00254 * 0 T_DA: Temperature data available. 0: new data for temperature is not yet available; 1: new data for temperature is available. 00255 * \endcode 00256 */ 00257 #define LPS25H_STATUS_REG_ADDR 0x27 00258 00259 /** 00260 * @brief Pressure data (LSB). 00261 * \code 00262 * Read 00263 * Default value: 0x00. 00264 * POUT7 - POUT0: Pressure data LSB (2's complement). 00265 * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L & 00266 * PRESS_OUT_XL)[dec]/4096. 00267 * \endcode 00268 */ 00269 #define LPS25H_PRESS_POUT_XL_ADDR 0x28 00270 00271 /** 00272 * @brief Pressure data (Middle part). 00273 * \code 00274 * Read 00275 * Default value: 0x80. 00276 * POUT15 - POUT8: Pressure data middle part (2's complement). 00277 * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L & 00278 * PRESS_OUT_XL)[dec]/4096. 00279 * \endcode 00280 */ 00281 #define LPS25H_PRESS_OUT_L_ADDR 0x29 00282 00283 /** 00284 * @brief Pressure data (MSB). 00285 * \code 00286 * Read 00287 * Default value: 0x2F. 00288 * POUT23 - POUT16: Pressure data MSB (2's complement). 00289 * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L & 00290 * PRESS_OUT_XL)[dec]/4096. 00291 * \endcode 00292 */ 00293 #define LPS25H_PRESS_OUT_H_ADDR 0x2A 00294 00295 /** 00296 * @brief Temperature data (LSB). 00297 * \code 00298 * Read 00299 * Default value: 0x00. 00300 * TOUT7 - TOUT0: temperature data LSB. 00301 * T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480. 00302 * \endcode 00303 */ 00304 #define LPS25H_TEMP_OUT_L_ADDR 0x2B 00305 00306 /** 00307 * @brief Temperature data (MSB). 00308 * \code 00309 * Read 00310 * Default value: 0x00. 00311 * TOUT15 - TOUT8: temperature data MSB. 00312 * T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480. 00313 * \endcode 00314 */ 00315 #define LPS25H_TEMP_OUT_H_ADDR 0x2C 00316 00317 /** 00318 * @brief FIFO control register 00319 * \code 00320 * Read/write 00321 * Default value: 0x00 00322 * 7:5 F_MODE2, F_MODE1, F_MODE0: FIFO mode selection. 00323 * FM2 | FM1 | FM0 | FIFO MODE 00324 * --------------------------------------------------- 00325 * 0 | 0 | 0 | BYPASS MODE 00326 * 0 | 0 | 1 | FIFO MODE. Stops collecting data when full 00327 * 0 | 1 | 0 | STREAM MODE: Keep the newest measurements in the FIFO 00328 * 0 | 1 | 1 | STREAM MODE until trigger deasserted, then change to FIFO MODE 00329 * 1 | 0 | 0 | BYPASS MODE until trigger deasserted, then STREAM MODE 00330 * 1 | 0 | 1 | Reserved 00331 * 1 | 1 | 0 | FIFO_MEAN MODE: Fifo is used to generate a running average filtered pressure 00332 * 1 | 1 | 1 | BYPASS mode until trigger deasserted, then FIFO MODE 00333 * 00334 * 4:0 FIFO Mean Mode Sample size 00335 * WTM_POINT4 | WTM_POINT4 | WTM_POINT4 | WTM_POINT4 | WTM_POINT4 | Sample Size 00336 * ---------------------------------------------------------------------------------- 00337 * 0 | 0 | 0 | 0 | 1 | 2 00338 * 0 | 0 | 0 | 1 | 1 | 4 00339 * 0 | 0 | 1 | 1 | 1 | 8 00340 * 0 | 1 | 1 | 1 | 1 | 16 00341 * 1 | 1 | 1 | 1 | 1 | 32 00342 * other values operation not guaranteed 00343 * \endcode 00344 */ 00345 #define LPS25H_CTRL_FIFO_ADDR 0x2E 00346 00347 /** 00348 * @brief FIFO Status register 00349 * \code 00350 * Read/write 00351 * Default value: 0x00 00352 * 7 WTM_FIFO: Watermark status. 0:FIFO filling is lower than watermark level; 1: FIFO is equal or higher than watermark level. 00353 * 6 FULL_FIFO: Overrun bit status. 0 - FIFO not full; 1 -FIFO is full. 00354 * 5 EMPTY_FIFO: Empty FIFO bit. 0 - FIFO not empty; 1 -FIFO is empty. 00355 * 4:0 DIFF_POINT4...0: FIFOsStored data level. 00356 * \endcode 00357 */ 00358 #define LPS25H_STATUS_FIFO_ADDR 0x2F 00359 00360 /** 00361 * @brief Pressure offset register 00362 * \code 00363 * Read/write 00364 * Default value: 0x00 00365 * 7:0 RPDS15...8:Pressure Offset for 1 point calibration after soldering. 00366 * \endcode 00367 */ 00368 #define LPS25H_RPDS_TRIM_L_ADDR 0x39 00369 00370 /** 00371 * @brief Pressure offset register 00372 * \code 00373 * Read/write 00374 * Default value: 0x00 00375 * 7:0 RPDS23...16:Pressure Offset for 1 point calibration after soldering. 00376 * \endcode 00377 */ 00378 #define LPS25H_RPDS_TRIM_H_ADDR 0x3A 00379 00380 /******************************************************************************/ 00381 /**************************** END REGISTER MAPPING ***************************/ 00382 /******************************************************************************/ 00383 00384 /** 00385 * @brief Device Address 00386 */ 00387 #define LPS25H_ADDRESS_LOW 0xB8 00388 #define LPS25H_ADDRESS_HIGH 0xBA 00389 00390 00391 /** 00392 * @brief Device Identifier. Default value of the WHO_AM_I register. 00393 */ 00394 #define I_AM_LPS25H ((uint8_t)0xBD) 00395 00396 /** @defgroup Power_Mode_selection CTRL_REG1 00397 * @{ 00398 */ 00399 #define LPS25H_MODE_POWERDOWN ((uint8_t)0x00) 00400 #define LPS25H_MODE_ACTIVE ((uint8_t)0x80) 00401 00402 #define LPS25H_MODE_MASK ((uint8_t)0x80) 00403 /** 00404 * @} 00405 */ 00406 00407 /** @defgroup LPS25H Output Data Rate selection CTRL_REG1 00408 * @{ 00409 */ 00410 #define LPS25H_ODR_ONE_SHOT ((uint8_t)0x00) /*!< Output Data Rate: P - one shot, T - one shot */ 00411 #define LPS25H_ODR_1Hz ((uint8_t)0x10) /*!< Output Data Rate: P - 1Hz, T - 1Hz */ 00412 #define LPS25H_ODR_7Hz ((uint8_t)0x20) /*!< Output Data Rate: P - 7Hz, T - 7Hz */ 00413 #define LPS25H_ODR_12_5Hz ((uint8_t)0x30) /*!< Output Data Rate: P - 12.5Hz, T - 12.5Hz */ 00414 #define LPS25H_ODR_25Hz ((uint8_t)0x40) /*!< Output Data Rate: P - 25Hz, T - 25Hz */ 00415 00416 #define LPS25H_ODR_MASK ((uint8_t)0x70) 00417 /** 00418 * @} 00419 */ 00420 00421 /** @defgroup LPS25H Interrupt circuit enable CTRL_REG1 00422 * @{ 00423 */ 00424 #define LPS25H_DIFF_DISABLE ((uint8_t)0x00) /*!< interrupt circuit enabled */ 00425 #define LPS25H_DIFF_ENABLE ((uint8_t)0x08) /*!< interrupt generation disabled */ 00426 00427 #define LPS25H_DIFF_EN_MASK ((uint8_t)0x08) 00428 /** 00429 * @} 00430 */ 00431 00432 /** @defgroup LPS25H block data update CTRL_REG1 00433 * @{ 00434 */ 00435 #define LPS25H_BDU_CONT ((uint8_t)0x00) /*!< continuous update */ 00436 #define LPS25H_BDU_READ ((uint8_t)0x04) /*!< output registers not updated until MSB and LSB reading */ 00437 00438 #define LPS25H_BDU_MASK ((uint8_t)0x04) 00439 /** 00440 * @} 00441 */ 00442 00443 /** @defgroup LPS25H SPI Serial Interface Mode selection CTRL_REG1 00444 * @{ 00445 */ 00446 #define LPS25H_SPI_SIM_4W ((uint8_t)0x00) /*!< 4-wire interface */ 00447 #define LPS25H_SPI_SIM_3W ((uint8_t)0x01) /*!< 3-wire interface */ 00448 00449 #define LPS25H_SPI_SIM_MASK ((uint8_t)0x01) 00450 /** 00451 * @} 00452 */ 00453 00454 /** @defgroup LPS25H o refresh the content of the internal registers stored in the Flash memory 00455 block CTRL_REG2 00456 * @{ 00457 */ 00458 #define LPS25H_NORMAL_MODE ((uint8_t)0x00) 00459 #define LPS25H_RESET_MEMORY ((uint8_t)0x80) 00460 00461 #define LPS25H_RESET_MEMORY_MASK ((uint8_t)0x80) 00462 /** 00463 * @} 00464 */ 00465 00466 /** @defgroup LPS25H Pressure resolution selection RES_CONF 00467 * @{ 00468 */ 00469 #define LPS25H_P_RES_AVG_8 ((uint8_t)0x00) 00470 #define LPS25H_P_RES_AVG_32 ((uint8_t)0x01) 00471 #define LPS25H_P_RES_AVG_128 ((uint8_t)0x02) 00472 #define LPS25H_P_RES_AVG_512 ((uint8_t)0x03) 00473 00474 #define LPS25H_P_RES_MASK ((uint8_t)0x03) 00475 /** 00476 * @} 00477 */ 00478 00479 /** @defgroup LPS25H Temperature resolution RES_CONF 00480 * @{ 00481 */ 00482 #define LPS25H_T_RES_AVG_8 ((uint8_t)0x00) 00483 #define LPS25H_T_RES_AVG_16 ((uint8_t)0x04) 00484 #define LPS25H_T_RES_AVG_32 ((uint8_t)0x08) 00485 #define LPS25H_T_RES_AVG_64 ((uint8_t)0x0C) 00486 00487 #define LPS25H_T_RES_MASK ((uint8_t)0x0C) 00488 /** 00489 * @} 00490 */ 00491 00492 #define LPS25H_SA0_LOW ((uint8_t)0x00) 00493 #define LPS25H_SA0_HIGH ((uint8_t)0x01) 00494 00495 00496 #endif /* __LPS25H_PLATFORM_H */ 00497 00498 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 00499
Generated on Tue Jul 12 2022 14:47:53 by 1.7.2