+++ /dev/null
-/**\r
- * @file LSM303DLHC.h\r
- * @author ART Team IMS-Systems Lab\r
- * @version V2.3.0\r
- * @date 12 April 2012\r
- * @brief Header for LPS331AP.c file\r
- * @details\r
- *\r
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
- *\r
- * THIS SOURCE CODE IS PROTECTED BY A LICENSE.\r
- * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED\r
- * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.\r
- *\r
- * <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>\r
- */\r
-\r
-\r
-\r
-/* Define to prevent recursive inclusion -------------------------------------*/\r
-#ifndef __LPS331AP_H\r
-#define __LPS331AP_H\r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-#include <stdint.h>\r
-#include "HAL_LPS331AP.h"\r
-\r
-#ifdef __cplusplus\r
- extern "C" {\r
-#endif\r
-\r
-/**\r
- * @addtogroup Sensor_Libraries Sensor Libraries\r
- * @{\r
- */\r
- \r
-/**\r
- * @defgroup LPS331AP\r
- * @brief This module contains all the functions to configure the LPS331AP pressure sensor.\r
- * @details\r
- * Since this code is platform independent an implementation of the SPI or I2C driver must\r
- * be provided by the user according to the used platform.\r
- * Every function makes use of the <i>Lps331apBufferRead</i> and/or <i>Lps331apBufferWrite</i>\r
- * as low level functions to write bytes through the used digital interface.\r
- * In order to link and use this code the user should define and export these functions in a header\r
- * file called "HAL_LPS331AP.h" (included by this module).\r
- * \r
- * @{\r
- */\r
-\r
-/**\r
- * @defgroup LPS331AP_Exported_Types LPS331AP Exported Types\r
- * @{\r
- */\r
-\r
-/**\r
- * @brief LPS331AP Functional state. Used to enable or disable a specific option. \r
- */ \r
-typedef enum\r
-{\r
- LPS_DISABLE = 0,\r
- LPS_ENABLE = !LPS_DISABLE\r
-}LPSFunctionalState; \r
- \r
- \r
-/**\r
- * @brief Pressure Flag status. Used to set/reset the sensor flags.\r
- */ \r
-typedef enum\r
-{\r
- LPS_RESET = 0,\r
- LPS_SET = !LPS_RESET\r
-}LPSFlagStatus;\r
-\r
-\r
-/**\r
- * @brief LPS331AP Output Data Rate\r
- */ \r
-typedef enum\r
-{\r
- ODR_P_T_ONE_SHOT = 0x00, /*!< Output Data Rate: P - one shot, T - one shot */\r
- ODR_P_1HZ_T_1HZ = 0x10, /*!< Output Data Rate: P - 1Hz, T - 1Hz */\r
- ODR_P_7HZ_T_1HZ = 0x20, /*!< Output Data Rate: P - 7Hz, T - 1Hz */\r
- ODR_P_12_5HZ_T_1HZ = 0x30, /*!< Output Data Rate: P - 12.5Hz, T - 1Hz */\r
- ODR_P_25HZ_T_1HZ = 0x40, /*!< Output Data Rate: P - 25Hz, T - 1Hz */\r
- ODR_P_7HZ_T_7HZ = 0x50, /*!< Output Data Rate: P - 7Hz, T - 7Hz */\r
- ODR_P_12_5HZ_T_12_5HZ = 0x60, /*!< Output Data Rate: P - 12.5Hz, T - 12.5Hz */\r
- ODR_P_25HZ_T_25HZ = 0x70, /*!< Output Data Rate: P - 25Hz, T - 25Hz */\r
-}LPSOutputDataRate;\r
-\r
-\r
-/**\r
- * @brief LPS331AP Pressure resolution\r
- */ \r
-typedef enum\r
-{\r
- LPS_PRESS_AVG_1 = 0x00, /*!< Internal average on 1 sample */\r
- LPS_PRESS_AVG_2 = 0x01, /*!< Internal average on 2 sample */\r
- LPS_PRESS_AVG_4 = 0x02, /*!< Internal average on 4 sample */\r
- LPS_PRESS_AVG_8 = 0x03, /*!< Internal average on 8 sample */\r
- LPS_PRESS_AVG_16 = 0x04, /*!< Internal average on 16 sample */\r
- LPS_PRESS_AVG_32 = 0x05, /*!< Internal average on 32 sample */\r
- LPS_PRESS_AVG_64 = 0x06, /*!< Internal average on 64 sample */\r
- LPS_PRESS_AVG_128 = 0x07, /*!< Internal average on 128 sample */\r
- LPS_PRESS_AVG_256 = 0x08, /*!< Internal average on 256 sample */\r
- LPS_PRESS_AVG_384 = 0x09, /*!< Internal average on 384 sample */\r
- LPS_PRESS_AVG_512 = 0x0A, /*!< Internal average on 512 sample */\r
-}LPSPressureResolution;\r
-\r
-\r
-/**\r
- * @brief LPS331AP Temperature resolution\r
- */ \r
-typedef enum\r
-{\r
- LPS_TEMP_AVG_1 = 0x00, /*!< Internal average on 1 sample */\r
- LPS_TEMP_AVG_2 = 0x10, /*!< Internal average on 2 sample */\r
- LPS_TEMP_AVG_4 = 0x20, /*!< Internal average on 4 sample */\r
- LPS_TEMP_AVG_8 = 0x30, /*!< Internal average on 8 sample */\r
- LPS_TEMP_AVG_16 = 0x40, /*!< Internal average on 16 sample */\r
- LPS_TEMP_AVG_32 = 0x50, /*!< Internal average on 32 sample */\r
- LPS_TEMP_AVG_64 = 0x60, /*!< Internal average on 64 sample */\r
- LPS_TEMP_AVG_128 = 0x70, /*!< Internal average on 128 sample */\r
-}LPSTemperatureResolution;\r
-\r
-\r
-\r
-/**\r
- * @brief LPS331AP Irq list\r
- */\r
-typedef enum\r
-{\r
- LPS_GND = 0x00,\r
- LPS_P_HIGH = 0x01,\r
- LPS_P_LOW = 0x02,\r
- LPS_P_LOW_HIGH = 0x03,\r
- LPS_DATA_READY = 0x04,\r
- LPS_TRISTATE = 0x07,\r
-}LPSIrqList;\r
-\r
-\r
-/**\r
- * @brief LPS331AP Irq pin output configuration\r
- */\r
-typedef enum\r
-{\r
- LPS_PP = 0x00,\r
- LPS_OD = 0x40\r
-}LPSOutputType;\r
-\r
-\r
-/**\r
- * @brief Pressure sensor Irq initialization structure\r
- */\r
-typedef struct\r
-{\r
- LPSFunctionalState xIrqActiveLow;\r
- LPSOutputType xOutType;\r
- LPSIrqList xInt1List;\r
- LPSIrqList xInt2List;\r
- float fPressThr;\r
- LPSFunctionalState xIrqPressLow;\r
- LPSFunctionalState xIrqPressHigh;\r
-}LPSIrqInit;\r
-\r
-\r
-/**\r
- * @brief Pressure sensor Init structure definition\r
- */\r
-typedef struct\r
-{\r
- LPSOutputDataRate xOutputDataRate; /*!< Output Data Rate */\r
- LPSPressureResolution xPresRes; /*!< Pressure sensor resolution */\r
- LPSTemperatureResolution xTempRes; /*!< Temperature sensor resolution */\r
- LPSFunctionalState xPressureAutoZero; /*!< Auto zero feature enabled */\r
- float fPressureRef; /*!< Pressure sensor reference value */\r
- LPSFunctionalState xBDU; /*!< Auto zero feature enabled */\r
-}LPS331Init;\r
-\r
-\r
-/**\r
- * @brief Pressure sensor data status structure structure\r
- */\r
-typedef struct\r
-{\r
- LPSFlagStatus cTempDataAvailable:1; /*!< Temperature data available bit */\r
- LPSFlagStatus cPressDataAvailable:1; /*!< Pressure data available bit */\r
- uint8_t :2; /*!< 2 bits padding */\r
- LPSFlagStatus cTempDataOverrun:1; /*!< Temperature data over-run bit */\r
- LPSFlagStatus cPressDataOverrun:1; /*!< Pressure data over-run bit */\r
- uint8_t :2; /*!< 2 bits padding */\r
-}LPS331DataStatus;\r
-\r
-\r
-/**\r
- * @}\r
- */ \r
- \r
-/**\r
- * @defgroup LPS331AP_Exported_Constants LPS331AP Exported Constants\r
- * @{\r
- */\r
-\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/**\r
- * @defgroup LPS331AP_Exported_Macros LPS331AP Exported Macros\r
- * @{\r
- */\r
-\r
-/**\r
-* @brief Read LPS331AP output register, and calculate the pressure in mbar.\r
-* @param None.\r
-* @retval float: pressure expressed in mbar.\r
-*/\r
-#define Lps331apReadPressure() ((float)Lps331apReadRawPressure()/4096)\r
-\r
-\r
-/**\r
-* @brief Read LPS331AP output register, and calculate the temperature in C deg.\r
-* @param None.\r
-* @retval float: temperature expressed in C deg.\r
-*/\r
-#define Lps331apReadTemperature() ((float)Lps331apReadRawTemperature()/480.0+42.5)\r
-\r
-\r
-/** @defgroup LPS331AP_Communication LPS331AP Communication\r
- * @{\r
- */\r
-\r
-#define Lps331apByteRead(pVal,cAddress) Lps331apBufferRead(pVal,cAddress,1)\r
-#define Lps331apByteWrite(pVal,cAddress) Lps331apBufferWrite(pVal,cAddress,1)\r
-\r
-\r
-/**\r
- * @} \r
- */\r
-\r
-/**\r
- * @} \r
- */ \r
-\r
-\r
-/** @defgroup LPS331AP_Register_Mapping LPS331AP Register Mapping\r
- * @{\r
- */\r
-\r
-/**\r
- * @brief Reference pressure (LSB data)\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7:0 REF7-ODR0: Lower part of the reference pressure that\r
- * is sum to the sensor output pressure.\r
- * \endcode\r
- */\r
-#define LPS_REF_P_XL_ADDR 0x08\r
-\r
-\r
-/**\r
- * @brief Reference pressure (middle part)\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7:0 REF15-ODR8: Middle part of the reference pressure that\r
- * is sum to the sensor output pressure.\r
- * \endcode\r
- */\r
-#define LPS_REF_P_L_ADDR 0x09\r
-\r
-\r
-/**\r
- * @brief Reference pressure (MSB part)\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7:0 REF15-ODR8: Higher part of the reference pressure that\r
- * is sum to the sensor output pressure.\r
- * \endcode\r
- */\r
-#define LPS_REF_P_H_ADDR 0x0A\r
-\r
-\r
-/**\r
- * @brief Device identifier register.\r
- * \code\r
- * Read\r
- * Default value: 0xBB\r
- * 7:0 This read-only register contains the device identifier that, for LPS331AP, is set to BBh.\r
- * \endcode\r
- */\r
-#define LPS_WHO_AM_I_ADDR 0x0F\r
-\r
-\r
-/**\r
- * @brief Pressure resolution Register\r
- * \code\r
- * Read/write\r
- * Default value: 0x7A\r
- * 7 RFU\r
- * 6:4 AVGT2-AVGT0: temperature internal average.\r
- * AVGT2 | AVGT1 | AVGT0 | Nr. Internal Average\r
- * ------------------------------------------------------\r
- * 0 | 0 | 0 | 1 \r
- * 0 | 0 | 1 | 2 \r
- * 0 | 1 | 0 | 4 \r
- * 0 | 1 | 1 | 8 \r
- * 1 | 0 | 0 | 16 \r
- * 1 | 0 | 1 | 32\r
- * 1 | 1 | 0 | 64\r
- * 1 | 1 | 1 | 128\r
- *\r
- * 3:0 AVGP3-AVGP0: pressure internal average.\r
- * AVGP3 | AVGP2 | AVGP1 | AVGP0 | Nr. Internal Average\r
- * ------------------------------------------------------\r
- * 0 | 0 | 0 | 0 | 1\r
- * 0 | 0 | 0 | 1 | 2 \r
- * 0 | 0 | 1 | 0 | 4 \r
- * 0 | 0 | 1 | 1 | 8\r
- * 0 | 1 | 0 | 0 | 16 \r
- * 0 | 1 | 0 | 1 | 32 \r
- * 0 | 1 | 1 | 0 | 64\r
- * 0 | 1 | 1 | 1 | 128 \r
- * 1 | 0 | 0 | 0 | 256 \r
- * 1 | 0 | 0 | 1 | 384\r
- * 1 | 0 | 1 | 0 | 512 \r
- *\r
- * \endcode\r
- */\r
-#define LPS_RES_CONF_ADDR 0x10 \r
-\r
-\r
-\r
-\r
-/**\r
- * @brief Pressure sensor control register 1\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7 PD: power down control. 0 - disable; 1 - enable\r
- * 6:4 ODR2, ODR1, ODR0: output data rate selection.\r
- * ODR2 | ODR1 | ODR0 | Pressure output data-rate(Hz) | Temperature output data-rate(Hz)\r
- * ----------------------------------------------------------------------------------\r
- * 0 | 0 | 0 | one shot | one shot \r
- * 0 | 0 | 1 | 1 | 1 \r
- * 0 | 1 | 0 | 7 | 1 \r
- * 0 | 1 | 1 | 12.5 | 1 \r
- * 1 | 0 | 0 | 25 | 1 \r
- * 1 | 0 | 1 | 7 | 7 \r
- * 1 | 1 | 0 | 12.5 | 12.5 \r
- * 1 | 1 | 1 | 25 | 25\r
- *\r
- * 3 DIFF_EN: Interrupt circuit. 0 - disable; 1 - enable\r
- * 2 BDU: block data update. 0 - disable; 1 - enable\r
- * 1 DELTA_EN: delta pressure. 0 - disable; 1 - enable\r
- * 0 SIM: SPI Serial Interface Mode selection. 0 - disable; 1 - enable\r
- * \endcode\r
- */\r
-#define LPS_CTRL_REG1_ADDR 0x20\r
-\r
-\r
-/**\r
- * @brief Pressure sensor control register 2\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7 BOOT: Reboot memory content. 0: normal mode; 1: reboot memory content\r
- * 6:3 Reserved.\r
- * 2 SWRESET: Software reset. 0: normal mode; 1: SW reset.\r
- * 1 AUTO_ZERO: Autozero enable. 0: normal mode; 1: autozero enable.\r
- * 0 ONE_SHOT: One shot enable. 0: waiting for start of conversion; 1: start for a new dataset\r
- * \endcode\r
- */\r
-#define LPS_CTRL_REG2_ADDR 0x21\r
-\r
-\r
-/**\r
- * @brief Pressure sensor control register 3\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7 INT_H_L: Interrupt active high, low.\r
- * 6 PP_OD: Push-pull/open drain selection on interrupt pads.\r
- * 5:3 INT2_S3, INT2_S2, INT2_S1: data signal on INT2 pad control bits.\r
- * 2:0 INT1_S3, INT1_S2, INT1_S1: data signal on INT1 pad control bits.\r
- * INT1(2)_S3 | INT1(2)_S2 | INT1(2)_S1 | INT1(2) pin\r
- * ------------------------------------------------------\r
- * 0 | 0 | 0 | GND \r
- * 0 | 0 | 1 | Pressure high (P_high) \r
- * 0 | 1 | 0 | Pressure low (P_low) \r
- * 0 | 1 | 1 | P_low OR P_high \r
- * 1 | 0 | 0 | Data ready \r
- * 1 | 0 | 1 | Reserved\r
- * 1 | 1 | 0 | Reserved\r
- * 1 | 1 | 1 | Tri-state\r
-\r
- * \endcode\r
- */\r
-#define LPS_CTRL_REG3_ADDR 0x22 \r
-\r
-\r
-/**\r
- * @brief Interrupt configuration Register\r
- * \code\r
- * Read/write\r
- * Default value: 0x00.\r
- * 7:3 Reserved.\r
- * 2 LIR: Latch Interrupt request into INT_SOURCE register. 0 - disable; 1 - enable\r
- * 1 PL_E: Enable interrupt generation on differential pressure low event. 0 - disable; 1 - enable\r
- * 0 PH_E: Enable interrupt generation on differential pressure high event. 0 - disable; 1 - enable\r
- * \endcode\r
- */\r
-#define LPS_INT_CFG_REG_ADDR 0x23 \r
-\r
-\r
-/**\r
- * @brief Interrupt source Register\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * 7:3 0.\r
- * 2 IA: Interrupt Active.0: no interrupt has been generated; 1: one or more interrupt events have been generated.\r
- * 1 PL: Differential pressure Low. 0: no interrupt has been generated; 1: Low differential pressure event has occurred.\r
- * 0 PH: Differential pressure High. 0: no interrupt has been generated; 1: High differential pressure event has occurred.\r
- * \endcode\r
- */\r
-#define LPS_INT_SOURCE_REG_ADDR 0x24 \r
-\r
-\r
-/**\r
- * @brief Threshold pressure (LSB)\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * 7:0 THS7-THS0: Low part of threshold value for pressure interrupt\r
- * generation. The complete threshold value is given by THS_P_H & THS_P_L and is\r
- * expressed as unsigned number. P_ths(mbar)=(THS_P_H & THS_P_L)[dec]/16.\r
- * \endcode\r
- */\r
-#define LPS_THS_P_LOW_REG_ADDR 0x25 \r
-\r
-\r
-/**\r
- * @brief Threshold pressure (MSB)\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * 7:0 THS15-THS8: High part of threshold value for pressure interrupt\r
- * generation. The complete threshold value is given by THS_P_H & THS_P_L and is\r
- * expressed as unsigned number. P_ths(mbar)=(THS_P_H & THS_P_L)[dec]/16.\r
- * \endcode\r
- */\r
-#define LPS_THS_P_HIGH_REG_ADDR 0x26 \r
-\r
-\r
-/**\r
- * @brief Status Register\r
- * \code\r
- * Read\r
- * Default value: 0x00\r
- * 7:6 0\r
- * 5 P_OR: Pressure data overrun. 0: no overrun has occurred; 1: new data for pressure has overwritten the previous one.\r
- * 4 T_OR: Temperature data overrun. 0: no overrun has occurred; 1: a new data for temperature has overwritten the previous one.\r
- * 3:2 0\r
- * 1 P_DA: Pressure data available. 0: new data for pressure is not yet available; 1: new data for pressure is available.\r
- * 0 T_DA: Temperature data available. 0: new data for temperature is not yet available; 1: new data for temperature is available.\r
- * \endcode\r
- */\r
-#define LPS_STATUS_REG_ADDR 0x27 \r
-\r
-\r
-/**\r
- * @brief Pressure data (LSB).\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * POUT7 - POUT0: Pressure data LSB (2's complement). \r
- * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L &\r
- * PRESS_OUT_XL)[dec]/4096.\r
- * \endcode\r
- */\r
-#define LPS_PRESS_POUT_XL_ADDR 0x28 \r
-\r
-\r
-/**\r
- * @brief Pressure data (Middle part).\r
- * \code\r
- * Read\r
- * Default value: 0x80.\r
- * POUT15 - POUT8: Pressure data middle part (2's complement). \r
- * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L &\r
- * PRESS_OUT_XL)[dec]/4096.\r
- * \endcode\r
- */\r
-#define LPS_PRESS_OUT_L_ADDR 0x29\r
-\r
-\r
-/**\r
- * @brief Pressure data (MSB).\r
- * \code\r
- * Read\r
- * Default value: 0x2F.\r
- * POUT23 - POUT16: Pressure data MSB (2's complement).\r
- * Pressure output data: Pout(mbar)=(PRESS_OUT_H & PRESS_OUT_L &\r
- * PRESS_OUT_XL)[dec]/4096.\r
- * \endcode\r
- */\r
-#define LPS_PRESS_OUT_H_ADDR 0x2A\r
-\r
-\r
-/**\r
- * @brief Temperature data (LSB).\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * TOUT7 - TOUT0: temperature data LSB. \r
- * T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480.\r
- * \endcode\r
- */\r
-#define LPS_TEMP_OUT_L_ADDR 0x2B\r
-\r
-\r
-/**\r
- * @brief Temperature data (MSB).\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * TOUT15 - TOUT8: temperature data MSB. \r
- * T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480.\r
- * \endcode\r
- */\r
-#define LPS_TEMP_OUT_H_ADDR 0x2C \r
-\r
-\r
-/**\r
- * @brief Analog front end control\r
- * \code\r
- * Read/write\r
- * Default value: 0x00\r
- * 7:1 Reserved.\r
- * 0 SELMAIN: Current of operational amplifier selector.\r
- * -\911\92 always high current\r
- * -\910\92 high current during pressure acquisition and low current during temperature acquisition\r
- * \endcode\r
- */\r
-#define LPS_AMP_CTRL_ADDR 0x30 \r
-\r
-\r
-\r
-/**\r
- * @brief Pressure offset (LSB).\r
- * \code\r
- * Read\r
- * Default value: 0x00.\r
- * DELTA0 - DELTA7: Delta pressure register for One Point calibration. \r
- * \endcode\r
- */\r
-#define LPS_DELTA_PRESS_XL_ADDR 0x3C \r
-\r
-\r
-/**\r
- * @brief Pressure offset (Middle part).\r
- * \code\r
- * Read\r
- * Default value: 0x80.\r
- * DELTA15-DELTA8: Delta pressure register for One Point calibration. \r
- * \endcode\r
- */\r
-#define LPS_DELTA_PRESS_L_ADDR 0x3D\r
-\r
-\r
-/**\r
- * @brief Pressure offset (MSB).\r
- * \code\r
- * Read\r
- * Default value: 0x2F.\r
- * DELTA23-DELTA16: Delta pressure register for One Point calibration.\r
- * \endcode\r
- */\r
-#define LPS_DELTA_PRESS_H_ADDR 0x3E\r
-\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-\r
-\r
-/** @defgroup LPS331AP_Exported_Functions LPS331AP Exported Functions\r
- * @{\r
- */\r
-\r
-void Lps331apConfig(LPS331Init* pxLPS331InitStruct);\r
-void Lps331apGetInfo(LPS331Init* pxLPS331InitStruct);\r
-void Lps331apLowPowerMode(LPSFunctionalState xFunctionalState);\r
-void Lps331apSetPressureResolution(LPSPressureResolution xPressureResolution);\r
-void Lps331apSetTemperatureResolution(LPSTemperatureResolution xTemperatureResolution);\r
-void Lps331apSetDataRate(LPSOutputDataRate xDataRate);\r
-LPSOutputDataRate Lps331apGetDataRate(void);\r
-void Lps331apRebootCmd(void);\r
-void Lps331apEnterShutdownCmd(void);\r
-void Lps331apExitShutdownCmd(void);\r
-int32_t Lps331apReadRawPressure(void);\r
-int16_t Lps331apReadRawTemperature(void);\r
-void Lps331apIrqInit(LPSIrqInit* pxLPSIrqInit);\r
-void Lps331apOneShot(void);\r
-LPS331DataStatus Lps331apGetDataStatus(void);\r
-void Lps331apSetThreshold(float fThreshold);\r
-float Lps331apGetThreshold(void);\r
-\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
-/******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/\r
-\r
+++ /dev/null
-/**\r
- * @file LSM303DLH.c\r
- * @author ART Team IMS-Systems Lab\r
- * @version V2.3.0\r
- * @date 12 April 2012\r
- * @brief This file provides a set of functions needed to manage the LPS331AP slave.\r
- * @details\r
- *\r
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
- *\r
- * THIS SOURCE CODE IS PROTECTED BY A LICENSE.\r
- * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED\r
- * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.\r
- *\r
- * <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>\r
- */\r
-\r
-\r
-#include "LPS331AP.h"\r
-\r
-\r
-/**\r
- * @addtogroup Sensor_Libraries Sensor Libraries\r
- * @{\r
- */\r
-\r
-\r
-/**\r
-* @addtogroup LPS331AP\r
-* @{\r
-*/\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_TypesDefinitions LPS331AP Private TypesDefinitions\r
- * @{\r
- */\r
-\r
-\r
-/**\r
- *@}\r
- */\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_Defines LPS331AP Private Defines\r
- * @{\r
- */\r
-\r
-/**\r
- *@}\r
- */\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_Macros LPS331AP Private Macros\r
- * @{\r
- */\r
-\r
-/**\r
- *@}\r
- */\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_Variables LPS331AP Private Variables\r
- * @{\r
- */\r
-\r
-/**\r
- *@}\r
- */\r
-\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_FunctionPrototypes LPS331AP Private FunctionPrototypes\r
- * @{\r
- */\r
-\r
-/**\r
- *@}\r
- */\r
-\r
-\r
-/**\r
- * @defgroup LPS331AP_Private_Functions LPS331AP Private Functions\r
- * @{\r
- */\r
-\r
-/**\r
-* @brief Set configuration of pressure sensor LPS331AP\r
-* @param pxLPS331InitStruct : pointer to a LPS331Init structure that contains the configuration setting for the LPS331AP.\r
-* @retval None.\r
-* @details\r
-* <b>Example:</b>\r
-* @code\r
-* LPS331Init xLps331apInit;\r
-*\r
-* xLps331apInit.xOutputDataRate=ODR_P_7HZ_T_1HZ;\r
-* xLps331apInit.xPresRes=LPS_PRESS_AVG_1;\r
-* xLps331apInit.xTempRes=LPS_TEMP_AVG_1;\r
-* xLps331apInit.xPressureAutoZero=LPS_DISABLE;\r
-* xLps331apInit.fPressureRef=0;\r
-* xLps331apInit.xBDU=LPS_DISABLE;\r
-*\r
-* Lps331apInit(&xLps331apInit);\r
-* @endcode\r
-*/\r
-void Lps331apConfig(LPS331Init* pxLPS331InitStruct)\r
-{\r
- uint8_t tempReg[3];\r
- uint8_t i;\r
- \r
- for(i=0 ; i<3 ; i++)\r
- tempReg[i]=(uint8_t)(((uint32_t)(4096.0*pxLPS331InitStruct->fPressureRef))>>(8*i));\r
- \r
- /* Write the reference value on register */\r
- Lps331apBufferWrite(tempReg, LPS_REF_P_XL_ADDR,3);\r
- \r
- /* Resolution register setting */\r
- tempReg[0] = (uint8_t)pxLPS331InitStruct->xPresRes | (uint8_t)pxLPS331InitStruct->xTempRes;\r
- \r
- /* Write the value on register */ \r
- Lps331apByteWrite(&tempReg[0], LPS_RES_CONF_ADDR);\r
- \r
- /* Read the CTRL1 and 2 register content */\r
- Lps331apBufferRead(tempReg, LPS_CTRL_REG1_ADDR,2); \r
- \r
- /* Enter the SDN mode */\r
- tempReg[0] &= 0x7F;\r
- Lps331apByteWrite(tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /* CTRL1 register */\r
- tempReg[0] &= 0x8B;\r
- tempReg[0] |= pxLPS331InitStruct->xOutputDataRate;\r
- \r
- if(pxLPS331InitStruct->xBDU)\r
- tempReg[0] |= 0x04;\r
- else\r
- tempReg[0] &= 0xFB;\r
- \r
- /* CTRL2 register */\r
- if(pxLPS331InitStruct->xPressureAutoZero)\r
- tempReg[1] |= 0x02;\r
- else\r
- tempReg[1] &= 0xFD;\r
-\r
- /* Write the reference value on register */\r
- Lps331apBufferWrite(tempReg, LPS_CTRL_REG1_ADDR,2);\r
- \r
- /* Exit the SDN mode */\r
- tempReg[0] |= 0x80;\r
- Lps331apByteWrite(tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
-}\r
-\r
-\r
-/**\r
-* @brief Gets the general configuration of LPS331AP.\r
-* @param pxLPS331InitStruct : pointer to a LPS331Init structure that will\r
-* contain the configuration setting read from the LPS331AP registers.\r
-* @retval None\r
-*/\r
-void Lps331apGetInfo(LPS331Init* pxLPS331InitStruct)\r
-{\r
- uint8_t tempReg[4];\r
- \r
- Lps331apBufferRead(tempReg, LPS_REF_P_XL_ADDR,3);\r
- tempReg[3]=0;\r
- \r
- /* Get the reference value */\r
- pxLPS331InitStruct->fPressureRef = (float)(*((uint32_t*)tempReg))/4096.0;\r
-\r
- /* Read register */ \r
- Lps331apByteRead(&tempReg[0], LPS_RES_CONF_ADDR);\r
- \r
- pxLPS331InitStruct->xPresRes=(LPSPressureResolution)(tempReg[0] & 0x0F);\r
- pxLPS331InitStruct->xTempRes=(LPSTemperatureResolution)(tempReg[0] & 0x70);\r
- \r
- /* Read the CTRL1 and 2 register content */\r
- Lps331apBufferRead(tempReg, LPS_CTRL_REG1_ADDR,2);\r
- \r
- /* get info */\r
- if(tempReg[0] & 0x04)\r
- pxLPS331InitStruct->xBDU = LPS_ENABLE;\r
- else\r
- pxLPS331InitStruct->xBDU = LPS_DISABLE;\r
- \r
-\r
- if(tempReg[1] & 0x02)\r
- pxLPS331InitStruct->xPressureAutoZero = LPS_ENABLE;\r
- else\r
- pxLPS331InitStruct->xPressureAutoZero = LPS_DISABLE;\r
- \r
- /* Get the ODR info */\r
- Lps331apByteRead(tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
- pxLPS331InitStruct->xOutputDataRate = (LPSOutputDataRate)(tempReg[0] & 0x70);\r
- \r
-}\r
-\r
-\r
-/**\r
-* @brief Enable or disable the lowpower mode for pressure sensor LPS331AP.\r
-* @param xFunctionalState : new state for the lowpower mode.\r
-* This parameter can be: LPS_ENABLE or LPS_DISABLE\r
-* @retval None\r
-*/\r
-void Lps331apLowPowerMode(LPSFunctionalState xFunctionalState)\r
-{\r
- uint8_t tmpreg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tmpreg, LPS_AMP_CTRL_ADDR);\r
- \r
- /* modify the specified bit */\r
- if(xFunctionalState == LPS_ENABLE)\r
- {\r
- tmpreg |= 0x01;\r
- }\r
- else\r
- {\r
- tmpreg &= 0xFE;\r
- }\r
- \r
- /* Write the computed values on register */\r
- Lps331apByteWrite(&tmpreg, LPS_AMP_CTRL_ADDR);\r
-}\r
-\r
-\r
-/**\r
-* @brief Change pressure resolution for Pressure sensor LPS331AP.\r
-* @param xPressureResolution : new pressure resolution value. \r
-* This parameter can be one of the @ref LPSPressureResolution value.\r
-* @retval None\r
-*/\r
-void Lps331apSetPressureResolution(LPSPressureResolution xPressureResolution)\r
-{\r
- uint8_t tempReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tempReg, LPS_RES_CONF_ADDR);\r
- \r
- /* CTRL1 register */\r
- tempReg &= 0xF0;\r
- tempReg |= xPressureResolution;\r
- \r
- /* Write computed byte onto register */\r
- Lps331apByteWrite(&tempReg, LPS_RES_CONF_ADDR);\r
-}\r
-\r
-\r
-/**\r
-* @brief Change temperature resolution for Pressure sensor LPS331AP.\r
-* @param xTemperatureResolution : new pressure resolution value. \r
-* This parameter can be one of the @ref LPSTemperatureResolution value.\r
-* @retval None\r
-*/\r
-void Lps331apSetTemperatureResolution(LPSTemperatureResolution xTemperatureResolution)\r
-{\r
- uint8_t tempReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tempReg, LPS_RES_CONF_ADDR);\r
- \r
- /* CTRL1 register */\r
- tempReg &= 0x8F;\r
- tempReg |= xTemperatureResolution;\r
- \r
- /* Write computed byte onto register */\r
- Lps331apByteWrite(&tempReg, LPS_RES_CONF_ADDR);\r
-}\r
-\r
-\r
-/**\r
-* @brief Change the ODR(Output data rate) for pressure sensor LPS331AP.\r
-* @param xDataRate : new ODR value. \r
-* This parameter can be one of the @ref LPSOutputDataRate value.\r
-* @retval None\r
-*/\r
-void Lps331apSetDataRate(LPSOutputDataRate xDataRate)\r
-{\r
- uint8_t tempReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /* CTRL1 register */\r
- tempReg &= 0x8F;\r
- tempReg |= xDataRate;\r
- \r
- /*Enter Power Down mode*/\r
- Lps331apEnterShutdownCmd();\r
- \r
- /* Write computed byte onto register */\r
- Lps331apByteWrite(&tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /*Exit from Power down mode*/\r
- Lps331apExitShutdownCmd();\r
-}\r
-\r
-\r
-/**\r
-* @brief Returns the output data rate.\r
-* @param None.\r
-* @retval Datarate in Hz.\r
-* This parameter is a @ref LPSOutputDataRate.\r
-*/\r
-LPSOutputDataRate Lps331apGetDataRate(void)\r
-{\r
- uint8_t tmpReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tmpReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /* ..mask it */\r
- tmpReg &= 0x70;\r
-\r
- /* return the correspondent value */\r
- return ((LPSOutputDataRate)tmpReg);\r
-}\r
-\r
-\r
-\r
-/**\r
-* @brief Reboot memory content of LPS331AP.\r
-* @param None\r
-* @retval None\r
-*/\r
-void Lps331apRebootCmd(void)\r
-{\r
- uint8_t tmpReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tmpReg, LPS_CTRL_REG2_ADDR);\r
- \r
- /* Set the BOOT bit */\r
- tmpReg |= 0x80;\r
- \r
- /* Write register */\r
- Lps331apByteWrite(&tmpReg, LPS_CTRL_REG2_ADDR);\r
- \r
-}\r
-\r
-\r
-\r
-/**\r
-* @brief Enter the shutdown mode for LPS331AP.\r
-* @param None\r
-* @retval None\r
-*/\r
-void Lps331apEnterShutdownCmd(void)\r
-{\r
- uint8_t tmpReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tmpReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /* Reset the power down bit */\r
- tmpReg &= 0x7F;\r
- \r
- /* Write register */\r
- Lps331apByteWrite(&tmpReg, LPS_CTRL_REG1_ADDR);\r
- \r
-}\r
-\r
-\r
-/**\r
-* @brief Exit the shutdown mode for LPS331AP.\r
-* @param None\r
-* @retval None\r
-*/\r
-void Lps331apExitShutdownCmd(void)\r
-{\r
- uint8_t tmpReg;\r
- \r
- /* Read the register content */\r
- Lps331apByteRead(&tmpReg, LPS_CTRL_REG1_ADDR);\r
- \r
- /* Set the power down bit */\r
- tmpReg |= 0x80;\r
- \r
- /* Write register */\r
- Lps331apByteWrite(&tmpReg, LPS_CTRL_REG1_ADDR);\r
- \r
-}\r
-\r
-/**\r
-* @brief Read LPS331AP output register, and calculate the raw pressure.\r
-* @param None.\r
-* @retval int32_t: pressure raw value.\r
-*/\r
-int32_t Lps331apReadRawPressure(void)\r
-{\r
- uint8_t buffer[3];\r
- uint32_t tempVal=0;\r
- \r
- /* Read the register content */\r
- Lps331apBufferRead(buffer, LPS_PRESS_POUT_XL_ADDR, 3);\r
- \r
- /* Build the raw data */\r
- uint8_t i;\r
- for(i=0; i<3; i++)\r
- tempVal |= (((uint32_t)buffer[i]) << (8*i));\r
- \r
- /* convert the 2's complement 24 bit to 2's complement 32 bit */\r
- if(tempVal & 0x00800000)\r
- tempVal |= 0xFF000000;\r
- \r
- /* return the built value */\r
- return ((int32_t)tempVal);\r
- \r
-}\r
-\r
-\r
-/**\r
-* @brief Read LPS331AP output register, and calculate the raw temperature.\r
-* @param None.\r
-* @retval int16_t: temperature raw value.\r
-*/\r
-int16_t Lps331apReadRawTemperature(void)\r
-{\r
- uint8_t buffer[2];\r
- uint16_t tempVal=0;\r
- \r
- /* Read the register content */\r
- Lps331apBufferRead(buffer, LPS_TEMP_OUT_L_ADDR, 2);\r
- \r
- /* Build the raw value */\r
- tempVal = (((uint16_t)buffer[1]) << 8)+(uint16_t)buffer[0];\r
- \r
- /* Return it */\r
- return ((int16_t)tempVal);\r
- \r
-}\r
-\r
-\r
-/**\r
-* @brief Configures the LPS331AP IRQ outout pins.\r
-* @param pxLPSIrqInit: pointer to the LPSIrqInit structure that defines the IRQ parameters.\r
-* @retval None.\r
-* @details\r
-* <b>Example:</b>\r
-* @code\r
-* LPSIrqInit xLps331apIrqInit;\r
-*\r
-* xLps331apIrqInit.xIrqActiveLow = LPS_DISABLE;\r
-* xLps331apIrqInit.xOutType = LPS_PP;\r
-* xLps331apIrqInit.xInt1List = LPS_DATA_READY;\r
-* xLps331apIrqInit.xInt2List = LPS_P_LOW_HIGH;\r
-* xLps331apIrqInit.fPressThr = 1006.2;\r
-* xLps331apIrqInit.xIrqPressLow=LPS_ENABLE;\r
-* xLps331apIrqInit.xIrqPressHigh=LPS_ENABLE;\r
-*\r
-* ExtiConfiguration(); // set the micro exti before init\r
-* Lps331apIrqInit(&xLps331apIrqInit);\r
-* @endcode\r
-*/\r
-void Lps331apIrqInit(LPSIrqInit* pxLPSIrqInit)\r
-{\r
- uint8_t tempReg[2];\r
- \r
- /* From the structure build the value to write on CTRL3 reg */\r
- tempReg[0] = (((uint8_t)(pxLPSIrqInit->xIrqActiveLow))<<7) | ((uint8_t)(pxLPSIrqInit->xOutType)) | ((uint8_t)(pxLPSIrqInit->xInt2List)<<3) | ((uint8_t)(pxLPSIrqInit->xInt1List));\r
-\r
- /* Read the register content */\r
- Lps331apByteWrite(tempReg, LPS_CTRL_REG3_ADDR);\r
- \r
- /* Build the threshold register values */\r
- tempReg[0]=(uint8_t)(16.0*pxLPSIrqInit->fPressThr);\r
- tempReg[1]=(uint8_t)(((uint16_t)(16.0*pxLPSIrqInit->fPressThr))>>8); \r
- \r
- /* Read the registers content */\r
- Lps331apBufferWrite(tempReg, LPS_THS_P_LOW_REG_ADDR, 2);\r
- \r
- Lps331apByteRead(tempReg, LPS_INT_CFG_REG_ADDR);\r
- \r
- /* Enable or disable the high pressure interrupt */\r
- if(pxLPSIrqInit->xIrqPressHigh)\r
- tempReg[0] |= 0x01;\r
- else\r
- tempReg[0] &= 0xFE;\r
- \r
- /* Enable or disable the low pressure interrupt */\r
- if(pxLPSIrqInit->xIrqPressLow)\r
- tempReg[0] |= 0x02;\r
- else\r
- tempReg[0] &= 0xFD;\r
- \r
- tempReg[0]|=0x04;\r
- \r
- /* Write the register or disable the high pressure interrupt */\r
- Lps331apByteWrite(tempReg, LPS_INT_CFG_REG_ADDR);\r
- \r
- /* if one has been requested then enable the differential circuit */\r
- Lps331apByteRead(tempReg, LPS_CTRL_REG1_ADDR);\r
- if(pxLPSIrqInit->xIrqPressHigh || pxLPSIrqInit->xIrqPressLow)\r
- { \r
- tempReg[0] |= 0x08; \r
- }\r
- else\r
- /* else disable it */\r
- {\r
- tempReg[0] &= 0xF7; \r
- }\r
- Lps331apByteWrite(tempReg, LPS_CTRL_REG1_ADDR);\r
- \r
-}\r
-\r
-\r
-\r
-/**\r
-* @brief Sets the one-shot bit in order to start acquisition when the ONE SHOT mode has been selected by the ODR configuration.\r
-* @param None.\r
-* @retval None.\r
-*/\r
-void Lps331apOneShot(void)\r
-{\r
- uint8_t tempReg;\r
- \r
- /* Read the CTRL2 register */\r
- Lps331apByteRead(&tempReg, LPS_CTRL_REG2_ADDR);\r
- \r
- /* Set the one shot bit */\r
- tempReg |= 0x01;\r
- \r
- /* Write the CTRL2 register */\r
- Lps331apByteWrite(&tempReg, LPS_CTRL_REG2_ADDR);\r
-\r
-}\r
-\r
-\r
-/**\r
-* @brief Gets status for LPS331AP data.\r
-* @param None.\r
-* @retval LPS331DataStatus: Data status in a LPS331DataStatus bitfields structure.\r
-*/\r
-LPS331DataStatus Lps331apGetDataStatus(void)\r
-{\r
- uint8_t tempReg;\r
- \r
- /* Read the status register */\r
- Lps331apByteRead(&tempReg, LPS_STATUS_REG_ADDR);\r
- \r
- /* cast and return it */\r
- return(*(LPS331DataStatus*)&tempReg);\r
- \r
-}\r
-\r
-\r
-/** \r
-* @brief Sets the pressure threshold.\r
-* @param fThreshold: Threshold expressed in mbar.\r
-* This parameter is a float value.\r
-* @retval None.\r
-*/\r
-void Lps331apSetThreshold(float fThreshold)\r
-{\r
- uint8_t tempReg[2];\r
- \r
- /* Build the threshold register values */\r
- tempReg[0]=(uint8_t)(16.0*fThreshold);\r
- tempReg[1]=(uint8_t)(((uint16_t)(16.0*fThreshold))>>8); \r
- \r
- /* write the register content */\r
- Lps331apBufferWrite(tempReg, LPS_THS_P_LOW_REG_ADDR, 2);\r
- \r
-}\r
-\r
-\r
-/** \r
-* @brief Gets the pressure threshold.\r
-* @param None.\r
-* @retval float: threshold value expressed in mbar.\r
-*/\r
-float Lps331apGetThreshold(void)\r
-{\r
- uint8_t tempReg[2];\r
- \r
- /* read the register content */\r
- Lps331apBufferRead(tempReg, LPS_THS_P_LOW_REG_ADDR, 2);\r
- \r
- /* return the float value */\r
- return ((float)((((uint16_t)tempReg[1])<<8) + tempReg[0])/16);\r
- \r
-}\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/**\r
- * @}\r
- */\r
-\r
-/******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/\r