BMI160 Initial
Dependents: MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_Pitch_Charles Maxim_Squeeks
Diff: bmi160.h
- Revision:
- 8:a89b529b1d96
- Parent:
- 7:9848196cb65e
- Child:
- 9:ca6b5fecdd63
--- a/bmi160.h Thu Dec 15 23:46:42 2016 +0000 +++ b/bmi160.h Tue Dec 20 00:10:04 2016 +0000 @@ -64,6 +64,29 @@ ACC ///<g sensor }; + ///Sensor Axis + enum SensorAxis + { + X_AXIS = 0, + Y_AXIS, + Z_AXIS + }; + + ///Structure for axis data + struct AxisData + { + int16_t raw; ///<Axis raw data + float scaled; ///<Axis scaled data + }; + + ///Structure for holding sensor data + struct SensorData + { + AxisData xAxis; ///<Sensor X axis data + AxisData yAxis; ///<Sensor Y axis data + AxisData zAxis; ///<Sensor Z axis data + }; + ///BMI160 registers enum Registers { @@ -177,6 +200,7 @@ ///<softreset, NVM programming, etc. }; + ///ERR_REG Bit Mask bit0 static const uint8_t FATAL_ERR = 0x01; ///ERR_REG Bit Mask bits4:1 @@ -201,6 +225,60 @@ PFD_USED_LPM ///<Pre-filtered data are used in low power mode }; + + ///ACC_CONF Bit Mask bits3:0 + static const uint8_t ACC_ODR = 0x0F; + ///ACC_CONF Bit Mask bits6:4 + static const uint8_t ACC_BWP = 0x70; + ///ACC_CONF Bit Mask bit7 + static const uint8_t ACC_US = 0x80; + + ///ACC_CONF bits3:0 codes + enum AccOutPutDataRate + { + ACC_ODR_1 = 1, ///< 25/32Hz + ACC_ODR_2, ///< 25/16Hz + ACC_ODR_3, ///< 25/8Hz + ACC_ODR_4, ///< 25/4Hz + ACC_ODR_5, ///< 25/2Hz + ACC_ODR_6, ///< 25Hz + ACC_ODR_7, ///< 50Hz + ACC_ODR_8, ///< 100Hz + ACC_ODR_9, ///< 200Hz + ACC_ODR_10, ///< 400Hz + ACC_ODR_11, ///< 800Hz + ACC_ODR_12 ///< 1600Hz + }; + + ///ACC_CONF bits6:4 codes + enum AccBandWidthParam + { + ACC_BWP_0 = 0, ///< Average 1 cycle + ACC_BWP_1, ///< Average 2 cycles + ACC_BWP_2, ///< Average 4 cycles, use this setting when acc_us = 0 + ACC_BWP_3, ///< Average 8 cycles + ACC_BWP_4, ///< Average 16 cycles + ACC_BWP_5, ///< Average 32 cycles + ACC_BWP_6, ///< Average 64 cycles + ACC_BWP_7 ///< Average 128 cycles + }; + + ///ACC_CONF bit7 + enum AccUnderSampling + { + ACC_US_OFF = 0, + ACC_US_ON + }; + + ///Accelerometer range values + enum AccRange + { + SENS_2G = 0, ///<Accelerometer range +-2G + SENS_4G, ///<Accelerometer range +-4G + SENS_8G, ///<Accelerometer range +-8G + SENS_16G, ///<Accelerometer range +-16G + }; + ///BMI160 Power Modes enum PowerModes { @@ -215,8 +293,8 @@ { START_FOC = 0x03, ///<Starts Fast Offset Calibrartion ACC_SET_PMU_MODE = 0x10, ///<Sets acc power mode - GYR_SET_PMU_MODE = 0x14, ///<Sets gyro power mode - MAG_SET_PMU_MODE = 0x18, ///<Sets mag power mode + GYR_SET_PMU_MODE = 0x14, ///<Sets gyro power mode + MAG_SET_PMU_MODE = 0x18, ///<Sets mag power mode PROG_NVM = 0xA0, ///<Writes NVM backed registers into NVM FIFO_FLUSH = 0xB0, ///<Clears FIFO INT_RESET, ///<Clears interrupt engine, INT_STATUS, and @@ -324,16 +402,53 @@ int32_t getTemperature(float *temp); - ///@brief fx documentation template.\n + ///@brief Read data registers and sensortime.\n + /// + ///On Entry: + ///@param[in] data - buffer at least 23 bytes long + /// + ///On Exit: + ///@param[out] data - holds raw sensor data on success + /// + ///@returns 0 on success, non 0 on failure + int32_t getSensorDataAndTime(uint8_t *data); + + + ///@brief Get accelerometer axis as float.\n /// ///On Entry: - ///@param[in] none + ///@param[in] axis - Sensor axis + ///@param[in] data - AxisData structure + /// + ///On Exit: + ///@param[out] data - Structure holds raw and scaled axis data + /// + ///@returns 0 on success, non 0 on failure + int32_t getAccAxis(SensorAxis axis, AxisData &data); + + + ///@brief Get accelerometer xyz axis as float.\n + /// + ///On Entry: + ///@param[in] data - SensorData structure /// ///On Exit: - ///@param[out] none + ///@param[out] data - Structure holds raw and scaled data for all three axis /// - ///@returns none + ///@returns 0 on success, non 0 on failure + int32_t getAccXYZ(SensorData &data); + + +protected: + struct AccConfig + { + AccRange range; + AccUnderSampling us; + AccBandWidthParam bwp; + AccOutPutDataRate odr; + }; + }; @@ -410,3 +525,14 @@ }; #endif /* BMI160_H */ + + +///@brief fx documentation template.\n +/// +///On Entry: +///@param[in] none +/// +///On Exit: +///@param[out] none +/// +///@returns none