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 Daniel Griffin

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers lps25h_platform.h Source File

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>&copy; 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