My implementation of Bosh BMI160 Only I2C is tested so far.

Dependents:   test_BMI160 TFT_test_MAX32630FTHR

Committer:
Rhyme
Date:
Mon Sep 11 23:53:22 2017 +0000
Revision:
2:4cc456503e9f
Parent:
1:d56df81c389b
Child:
3:9d3079170b35
commit before changing I/Fs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:9aed6f5a35c0 1 #ifndef _BMI160_H_
Rhyme 0:9aed6f5a35c0 2 #define _BMI160_H_
Rhyme 2:4cc456503e9f 3 /**
Rhyme 2:4cc456503e9f 4 * @brief BMI160 Bosch Small, low power inertial measurement unit
Rhyme 2:4cc456503e9f 5 *
Rhyme 2:4cc456503e9f 6 */
Rhyme 0:9aed6f5a35c0 7 class BMI160 {
Rhyme 0:9aed6f5a35c0 8 public:
Rhyme 0:9aed6f5a35c0 9 /**
Rhyme 0:9aed6f5a35c0 10 * BMI160 I2C Interface
Rhyme 0:9aed6f5a35c0 11 *
Rhyme 0:9aed6f5a35c0 12 * @param sda SDA pin
Rhyme 0:9aed6f5a35c0 13 * @param scl SCL pin
Rhyme 0:9aed6f5a35c0 14 * @param addr address of the I2C peripheral
Rhyme 0:9aed6f5a35c0 15 */
Rhyme 0:9aed6f5a35c0 16 BMI160(PinName sda, PinName scl, int addr) ;
Rhyme 0:9aed6f5a35c0 17
Rhyme 0:9aed6f5a35c0 18 /**
Rhyme 0:9aed6f5a35c0 19 * BMI160 SPI Interface
Rhyme 0:9aed6f5a35c0 20 *
Rhyme 0:9aed6f5a35c0 21 * @param sck SPI SCKL pin
Rhyme 0:9aed6f5a35c0 22 * @param miso SPI Master In Slave Out pin
Rhyme 0:9aed6f5a35c0 23 * @param mosi SPI Master Out Slave In pin
Rhyme 0:9aed6f5a35c0 24 * @param cs SPI Chip Select pin
Rhyme 0:9aed6f5a35c0 25 */
Rhyme 0:9aed6f5a35c0 26 BMI160(PinName sck, PinName miso, PinName mosi, PinName cs) ;
Rhyme 0:9aed6f5a35c0 27
Rhyme 0:9aed6f5a35c0 28 /**
Rhyme 0:9aed6f5a35c0 29 * BMI160 destructor
Rhyme 0:9aed6f5a35c0 30 */
Rhyme 0:9aed6f5a35c0 31 ~BMI160() ;
Rhyme 0:9aed6f5a35c0 32
Rhyme 1:d56df81c389b 33 void setCMD(uint8_t cmd) ;
Rhyme 1:d56df81c389b 34 uint8_t getStatus(void) ;
Rhyme 0:9aed6f5a35c0 35 uint8_t getChipID(void) ;
Rhyme 1:d56df81c389b 36 uint8_t getAccRange(void) ;
Rhyme 1:d56df81c389b 37 int16_t getGyrRange(void) ;
Rhyme 1:d56df81c389b 38 int16_t getAccX(void) ;
Rhyme 1:d56df81c389b 39 int16_t getAccY(void) ;
Rhyme 1:d56df81c389b 40 int16_t getAccZ(void) ;
Rhyme 1:d56df81c389b 41 int16_t getGyrX(void) ;
Rhyme 1:d56df81c389b 42 int16_t getGyrY(void) ;
Rhyme 1:d56df81c389b 43 int16_t getGyrZ(void) ;
Rhyme 1:d56df81c389b 44 void getAcc(int16_t *value) ;
Rhyme 1:d56df81c389b 45 void getGyr(int16_t *value) ;
Rhyme 1:d56df81c389b 46
Rhyme 0:9aed6f5a35c0 47
Rhyme 0:9aed6f5a35c0 48 private:
Rhyme 0:9aed6f5a35c0 49 SPI *m_spi ;
Rhyme 0:9aed6f5a35c0 50 I2C *m_i2c ;
Rhyme 0:9aed6f5a35c0 51 DigitalOut *m_cs ;
Rhyme 0:9aed6f5a35c0 52 int m_addr ;
Rhyme 0:9aed6f5a35c0 53
Rhyme 0:9aed6f5a35c0 54 void init(void) ;
Rhyme 0:9aed6f5a35c0 55 void i2c_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 56 void i2c_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 57 void spi_readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 58 void spi_writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 59 void readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 60 void writeRegs(uint8_t *data, int len) ;
Rhyme 0:9aed6f5a35c0 61 } ;
Rhyme 0:9aed6f5a35c0 62
Rhyme 1:d56df81c389b 63 #define ACC_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 64 #define ACC_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 65 #define ACC_PMU_LOWPOWER 0x02
Rhyme 1:d56df81c389b 66 #define GYR_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 67 #define GYR_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 68 #define GYR_PMU_FASTSU 0x03
Rhyme 1:d56df81c389b 69 #define MAG_PMU_SUSPEND 0x00
Rhyme 1:d56df81c389b 70 #define MAG_PMU_NORMAL 0x01
Rhyme 1:d56df81c389b 71 #define MAG_PMU_LOWPOWER 0x02
Rhyme 0:9aed6f5a35c0 72 #endif /* _BMI160_H_ */