Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: MPL3115A2.cpp
- Revision:
- 4:fdf14a259af8
- Parent:
- 3:a2f1752add9a
- Child:
- 5:9edec5ee8bf4
diff -r a2f1752add9a -r fdf14a259af8 MPL3115A2.cpp
--- a/MPL3115A2.cpp Wed May 29 11:56:52 2013 +0000
+++ b/MPL3115A2.cpp Thu May 30 07:27:24 2013 +0000
@@ -3,6 +3,7 @@
#define REG_WHO_AM_I 0x0C // return 0xC4 by default
#define REG_STATUS 0x00
#define REG_CTRL_REG_1 0x26
+#define REG_CTRL_REG_3 0x28
#define REG_CTRL_REG_4 0x29
#define REG_CTRL_REG_5 0x2A
#define REG_PRESSURE_MSB 0x01 // 3 byte pressure data
@@ -36,6 +37,11 @@
MPL3115A2::MPL3115A2(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
MPL3115A2_mode = BAROMETRIC_MODE;
MPL3115A2_oversampling = OVERSAMPLE_RATIO_1;
+ //
+ user1_fptr = NULL;
+ user2_fptr = NULL;
+ MPL3115A2_Int1.fall( NULL);
+ MPL3115A2_Int2.fall( NULL);
}
void MPL3115A2::Reset( void)
@@ -55,21 +61,18 @@
unsigned char dt[5];
unsigned char data[2];
+ // Soft Reset
Reset();
- /*
- ** Read contents of CTRL_REG_1
- ** Clear SBYB mask while holding all other values of CTRL_REG_1.
- ** To put part into Standby mode
- */
Standby();
- /*
- ** Clear all interrupts by reading the output registers.
- ** Activate sensor in Altimeter mode.
- */
+ // Clear all interrupts by reading the output registers.
readRegs( REG_ALTIMETER_MSB, &dt[0], 5);
getStatus();
+ // Configure INT active low and pullup
+ data[0] = REG_CTRL_REG_3;
+ data[1] = 0x00;
+ writeRegs(data, 2);
// Enable Interrupt fot data ready
data[0] = REG_CTRL_REG_4;
data[1] = 0x80;
@@ -78,12 +81,20 @@
data[0] = REG_CTRL_REG_5;
data[1] = 0x00;
writeRegs(data, 2);
+ data[0] = REG_PT_DATA_CFG;
+ data[1] = 0x07;
+ writeRegs(data, 2);
- /*
- ** Configure the OverSampling rate, Altimeter mode and set the sensor Active
- */
+ // Configure the OverSampling rate, Altimeter/Barometer mode and set the sensor Active
data[0] = REG_CTRL_REG_1;
- data[1] = 0x81 | (OS<<3);
+ data[1] = (OS<<3);
+ //
+ if (MPL3115A2_mode == BAROMETRIC_MODE)
+ data[1] &= 0x7F;
+ else
+ data[1] |= 0x80;
+ //
+ data[1] |= 0x01;
writeRegs(data, 2);
user2_fptr = fptr;
@@ -115,14 +126,16 @@
getStatus();
// Write Target and Window Values
- data[0] = (level<<8);
- data[1] = (level&0xFF);
- writeRegs( data, 2);
+ dt[0] = REG_P_TGT_MSB;
+ dt[1] = (level>>8);
+ dt[2] = (level&0xFF);
+ writeRegs( dt, 3);
// Window values are zero
- data[0] = 0;
- data[1] = 0;
- writeRegs( data, 2);
+ dt[0] = REG_P_WND_MSB;
+ dt[1] = 0;
+ dt[2] = 0;
+ writeRegs( dt, 3);
// Enable Pressure Threshold interrupt
data[0] = REG_CTRL_REG_4;
@@ -132,8 +145,13 @@
data[0] = REG_CTRL_REG_5;
data[1] = 0x08;
writeRegs( data, 2);
-
- Active();
+ data[0] = REG_PT_DATA_CFG;
+ data[1] = 0x07;
+ writeRegs(data, 2);
+ // Configure the OverSampling rate, Altimeter mode and set the sensor Active
+ data[0] = REG_CTRL_REG_1;
+ data[1] = 0x81 | (MPL3115A2_oversampling<<3);
+ writeRegs(data, 2);
user1_fptr = fptr;
MPL3115A2_Int1.fall( this, &MPL3115A2::AltitudeTrg_IRQ);