BM1383glv driver for mbed classic, mbed os and arduino. Depends on rohm-sensor-hal.

Dependents:   rohm-bm1383-hello-mbedclassic

Committer:
MikkoZ
Date:
Tue Apr 12 12:52:55 2016 +0000
Revision:
1:0aa922b4c2e7
Parent:
0:e58a87234f6a
.hgignore autoupdated by mbed classic ui

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mikko Koivunen 0:e58a87234f6a 1 /* Copyright 2016 Rohm Semiconductor
Mikko Koivunen 0:e58a87234f6a 2
Mikko Koivunen 0:e58a87234f6a 3 Licensed under the Apache License, Version 2.0 (the "License");
Mikko Koivunen 0:e58a87234f6a 4 you may not use this file except in compliance with the License.
Mikko Koivunen 0:e58a87234f6a 5 You may obtain a copy of the License at
Mikko Koivunen 0:e58a87234f6a 6
Mikko Koivunen 0:e58a87234f6a 7 http://www.apache.org/licenses/LICENSE-2.0
Mikko Koivunen 0:e58a87234f6a 8
Mikko Koivunen 0:e58a87234f6a 9 Unless required by applicable law or agreed to in writing, software
Mikko Koivunen 0:e58a87234f6a 10 distributed under the License is distributed on an "AS IS" BASIS,
Mikko Koivunen 0:e58a87234f6a 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Mikko Koivunen 0:e58a87234f6a 12 See the License for the specific language governing permissions and
Mikko Koivunen 0:e58a87234f6a 13 limitations under the License.
Mikko Koivunen 0:e58a87234f6a 14 */
Mikko Koivunen 0:e58a87234f6a 15 #ifndef BM1383GLV_H
Mikko Koivunen 0:e58a87234f6a 16 #define BM1383GLV_H
Mikko Koivunen 0:e58a87234f6a 17
Mikko Koivunen 0:e58a87234f6a 18 /* registers */
Mikko Koivunen 0:e58a87234f6a 19 // [hPa]
Mikko Koivunen 0:e58a87234f6a 20 #define BM1383GLV_PRESSURE_MIN 0x12C
Mikko Koivunen 0:e58a87234f6a 21 // [hPa]
Mikko Koivunen 0:e58a87234f6a 22 #define BM1383GLV_PRESSURE_MAX 0x44C
Mikko Koivunen 0:e58a87234f6a 23 #define BM1383GLV_REGISTER_DUMP_START 0x10
Mikko Koivunen 0:e58a87234f6a 24 #define BM1383GLV_ID_REG 0x10
Mikko Koivunen 0:e58a87234f6a 25 // All control registers are accessible only when POWER is UP and SLEEP is OFF.
Mikko Koivunen 0:e58a87234f6a 26 #define BM1383GLV_RESET_CONTROL_REG 0x11
Mikko Koivunen 0:e58a87234f6a 27 #define BM1383GLV_POWER_REG 0x12
Mikko Koivunen 0:e58a87234f6a 28 #define BM1383GLV_SLEEP_REG 0x13
Mikko Koivunen 0:e58a87234f6a 29 #define BM1383GLV_MODE_CONTROL_REG 0x14
Mikko Koivunen 0:e58a87234f6a 30 // MSB of the high threshold value for pressure interrupt generation.
Mikko Koivunen 0:e58a87234f6a 31 #define BM1383GLV_INT_HIGH_TRESHOLD_MSB 0x15
Mikko Koivunen 0:e58a87234f6a 32 // LSB of the high threshold value for pressure interrupt generation.
Mikko Koivunen 0:e58a87234f6a 33 #define BM1383GLV_INT_HIGH_TRESHOLD_LSB 0x16
Mikko Koivunen 0:e58a87234f6a 34 #define BM1383GLV_INT_LOW_TRESHOLD_MSB 0x17
Mikko Koivunen 0:e58a87234f6a 35 #define BM1383GLV_INT_LOW_TRESHOLD_LSB 0x18
Mikko Koivunen 0:e58a87234f6a 36 #define BM1383GLV_INT_CONTROL_REG 0x19
Mikko Koivunen 0:e58a87234f6a 37 // TEMP_OUT: [15] sign ; [14:5] integer ; [4:0] decimal (2's complement numbers)
Mikko Koivunen 0:e58a87234f6a 38 #define BM1383GLV_TEMPERATURE_OUT_MSB 0x1A
Mikko Koivunen 0:e58a87234f6a 39 // Temperature value [C]= TEMP_OUT[15:0]/32
Mikko Koivunen 0:e58a87234f6a 40 #define BM1383GLV_TEMPERATURE_OUT_LSB 0x1B
Mikko Koivunen 0:e58a87234f6a 41 // PRESS_OUT[15:5] integer part of pressure value
Mikko Koivunen 0:e58a87234f6a 42 #define BM1383GLV_PRESSURE_OUT_MSB 0x1C
Mikko Koivunen 0:e58a87234f6a 43 // PRESS_OUT[4:0] PRESS_OUT_XL[5:0] decimal part of pressure value
Mikko Koivunen 0:e58a87234f6a 44 #define BM1383GLV_PRESSURE_OUT_LSB 0x1D
Mikko Koivunen 0:e58a87234f6a 45 // Pressurevalue[hPa] = { PRESS_OUT[15:8] PRESS_OUT[7:0] PRESS_OUT_XL[5:0] } / 2048
Mikko Koivunen 0:e58a87234f6a 46 #define BM1383GLV_PRESSURE_OUT_DECIMAL 0x1E
Mikko Koivunen 0:e58a87234f6a 47 #define BM1383GLV_REGISTER_DUMP_END 0x1E
Mikko Koivunen 0:e58a87234f6a 48 /* registers bits */
Mikko Koivunen 0:e58a87234f6a 49 #define BM1383GLV_ID_REG_MANUFACTURER_ID (0x03 << 4)
Mikko Koivunen 0:e58a87234f6a 50 #define BM1383GLV_ID_REG_PART_ID (0x01 << 0)
Mikko Koivunen 0:e58a87234f6a 51 enum e_BM1383GLV_RESET_CONTROL_REG_SW_RESET {
Mikko Koivunen 0:e58a87234f6a 52 BM1383GLV_RESET_CONTROL_REG_SW_RESET_NONE = (0x00 << 7),
Mikko Koivunen 0:e58a87234f6a 53 BM1383GLV_RESET_CONTROL_REG_SW_RESET_EXECUTE = (0x01 << 7)
Mikko Koivunen 0:e58a87234f6a 54 };
Mikko Koivunen 0:e58a87234f6a 55 enum e_BM1383GLV_RESET_CONTROL_REG_INT_RESET {
Mikko Koivunen 0:e58a87234f6a 56 BM1383GLV_RESET_CONTROL_REG_INT_RESET_ACTIVE = (0x00 << 6),
Mikko Koivunen 0:e58a87234f6a 57 BM1383GLV_RESET_CONTROL_REG_INT_RESET_INACTIVE = (0x01 << 6) // int terminal high impedance on inactive state
Mikko Koivunen 0:e58a87234f6a 58 };
Mikko Koivunen 0:e58a87234f6a 59 // write 000000
Mikko Koivunen 0:e58a87234f6a 60 #define BM1383GLV_RESET_CONTROL_REG_RESERVED_WRITE0 (0x00 << 0)
Mikko Koivunen 0:e58a87234f6a 61 #define BM1383GLV_POWER_REG_RESERVED_WRITE0 (0x00 << 1)
Mikko Koivunen 0:e58a87234f6a 62 enum e_BM1383GLV_POWER_REG_POWER {
Mikko Koivunen 0:e58a87234f6a 63 BM1383GLV_POWER_REG_POWER_DOWN = (0x00 << 0),
Mikko Koivunen 0:e58a87234f6a 64 BM1383GLV_POWER_REG_POWER_UP = (0x01 << 0)
Mikko Koivunen 0:e58a87234f6a 65 };
Mikko Koivunen 0:e58a87234f6a 66 #define BM1383GLV_SLEEP_REG_RESERVED_WRITE0 (0x00 << 1)
Mikko Koivunen 0:e58a87234f6a 67 enum e_BM1383GLV_SLEEP_REG_SLEEP {
Mikko Koivunen 0:e58a87234f6a 68 BM1383GLV_SLEEP_REG_SLEEP_ON = (0x00 << 0),
Mikko Koivunen 0:e58a87234f6a 69 BM1383GLV_SLEEP_REG_SLEEP_OFF = (0x01 << 0)
Mikko Koivunen 0:e58a87234f6a 70 };
Mikko Koivunen 0:e58a87234f6a 71 enum e_BM1383GLV_MODE_CONTROL_REG_AVE_NUM {
Mikko Koivunen 0:e58a87234f6a 72 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_SINGLE = (0x00 << 5),
Mikko Koivunen 0:e58a87234f6a 73 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_2_TIMES = (0x01 << 5),
Mikko Koivunen 0:e58a87234f6a 74 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_4_TIMES = (0x02 << 5),
Mikko Koivunen 0:e58a87234f6a 75 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_8_TIMES = (0x03 << 5),
Mikko Koivunen 0:e58a87234f6a 76 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_16_TIMES = (0x04 << 5),
Mikko Koivunen 0:e58a87234f6a 77 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_32_TIMES = (0x05 << 5),
Mikko Koivunen 0:e58a87234f6a 78 BM1383GLV_MODE_CONTROL_REG_AVE_NUM_64_TIMES = (0x06 << 5)
Mikko Koivunen 0:e58a87234f6a 79 };
Mikko Koivunen 0:e58a87234f6a 80 // write 00
Mikko Koivunen 0:e58a87234f6a 81 #define BM1383GLV_MODE_CONTROL_REG_RESERVED_WRITE0 (0x00 << 3)
Mikko Koivunen 0:e58a87234f6a 82 enum e_BM1383GLV_MODE_CONTROL_REG_MODE {
Mikko Koivunen 0:e58a87234f6a 83 BM1383GLV_MODE_CONTROL_REG_MODE_STANDBY = (0x00 << 0),
Mikko Koivunen 0:e58a87234f6a 84 BM1383GLV_MODE_CONTROL_REG_MODE_ONE_SHOT = (0x01 << 0),
Mikko Koivunen 0:e58a87234f6a 85 BM1383GLV_MODE_CONTROL_REG_MODE_50MS = (0x02 << 0),
Mikko Koivunen 0:e58a87234f6a 86 BM1383GLV_MODE_CONTROL_REG_MODE_100MS = (0x03 << 0),
Mikko Koivunen 0:e58a87234f6a 87 BM1383GLV_MODE_CONTROL_REG_MODE_200MS = (0x04 << 0),
Mikko Koivunen 0:e58a87234f6a 88 BM1383GLV_MODE_CONTROL_REG_MODE_PROHIBITED5 = (0x05 << 0),
Mikko Koivunen 0:e58a87234f6a 89 BM1383GLV_MODE_CONTROL_REG_MODE_PROHIBITED6 = (0x06 << 0),
Mikko Koivunen 0:e58a87234f6a 90 BM1383GLV_MODE_CONTROL_REG_MODE_PROHIBITED7 = (0x07 << 0)
Mikko Koivunen 0:e58a87234f6a 91 };
Mikko Koivunen 0:e58a87234f6a 92 enum e_BM1383GLV_INT_CONTROL_REG_TRESHOLD_HIGH {
Mikko Koivunen 0:e58a87234f6a 93 BM1383GLV_INT_CONTROL_REG_TRESHOLD_HIGH_IN_LIMITS = (0x00 << 7),
Mikko Koivunen 0:e58a87234f6a 94 BM1383GLV_INT_CONTROL_REG_TRESHOLD_HIGH_CROSSED = (0x01 << 7)
Mikko Koivunen 0:e58a87234f6a 95 };
Mikko Koivunen 0:e58a87234f6a 96 enum e_BM1383GLV_INT_CONTROL_REG_TRESHOLD_LOW {
Mikko Koivunen 0:e58a87234f6a 97 BM1383GLV_INT_CONTROL_REG_TRESHOLD_LOW_IN_LIMITS = (0x00 << 6),
Mikko Koivunen 0:e58a87234f6a 98 BM1383GLV_INT_CONTROL_REG_TRESHOLD_LOW_CROSSED = (0x01 << 6)
Mikko Koivunen 0:e58a87234f6a 99 };
Mikko Koivunen 0:e58a87234f6a 100 enum e_BM1383GLV_INT_CONTROL_REG_INT_HIGH {
Mikko Koivunen 0:e58a87234f6a 101 BM1383GLV_INT_CONTROL_REG_INT_HIGH_DISABLE = (0x00 << 5),
Mikko Koivunen 0:e58a87234f6a 102 BM1383GLV_INT_CONTROL_REG_INT_HIGH_ENABLE = (0x01 << 5)
Mikko Koivunen 0:e58a87234f6a 103 };
Mikko Koivunen 0:e58a87234f6a 104 enum e_BM1383GLV_INT_CONTROL_REG_INT_LOW {
Mikko Koivunen 0:e58a87234f6a 105 BM1383GLV_INT_CONTROL_REG_INT_LOW_DISABLE = (0x00 << 4),
Mikko Koivunen 0:e58a87234f6a 106 BM1383GLV_INT_CONTROL_REG_INT_LOW_ENABLE = (0x01 << 4)
Mikko Koivunen 0:e58a87234f6a 107 };
Mikko Koivunen 0:e58a87234f6a 108 enum e_BM1383GLV_INT_CONTROL_REG_INT_PULLUP {
Mikko Koivunen 0:e58a87234f6a 109 BM1383GLV_INT_CONTROL_REG_INT_PULLUP_ENABLE = (0x00 << 3), // pull up resistor in INT terminals
Mikko Koivunen 0:e58a87234f6a 110 BM1383GLV_INT_CONTROL_REG_INT_PULLUP_DISABLE = (0x01 << 3) // no pull up resistor in INT terminals
Mikko Koivunen 0:e58a87234f6a 111 };
Mikko Koivunen 0:e58a87234f6a 112 #define BM1383GLV_INT_CONTROL_REG_RESERVED_RES (0x00 << 2)
Mikko Koivunen 0:e58a87234f6a 113 enum e_BM1383GLV_INT_CONTROL_REG_INTERRUPT_STATE {
Mikko Koivunen 0:e58a87234f6a 114 BM1383GLV_INT_CONTROL_REG_INTERRUPT_STATE_KEEP_UNTIL_CLEARED = (0x00 << 1), // terminal is latched until interrupt is cleared
Mikko Koivunen 0:e58a87234f6a 115 BM1383GLV_INT_CONTROL_REG_INTERRUPT_STATE_CONTINUOUS_UPDATE = (0x01 << 1) // terminal is updated after each measurement
Mikko Koivunen 0:e58a87234f6a 116 };
Mikko Koivunen 0:e58a87234f6a 117 enum e_BM1383GLV_INT_CONTROL_REG_INTERRUPT {
Mikko Koivunen 0:e58a87234f6a 118 BM1383GLV_INT_CONTROL_REG_INTERRUPT_DISABLE = (0x00 << 0),
Mikko Koivunen 0:e58a87234f6a 119 BM1383GLV_INT_CONTROL_REG_INTERRUPT_ENABLE = (0x01 << 0)
Mikko Koivunen 0:e58a87234f6a 120 };
Mikko Koivunen 0:e58a87234f6a 121 /*registers bit masks */
Mikko Koivunen 0:e58a87234f6a 122 #define BM1383GLV_ID_REG_MANUFACTURER_MASK 0xF0
Mikko Koivunen 0:e58a87234f6a 123 #define BM1383GLV_ID_REG_PART_MASK 0x0F
Mikko Koivunen 0:e58a87234f6a 124 #define BM1383GLV_RESET_CONTROL_REG_SW_RESET_MASK 0x80
Mikko Koivunen 0:e58a87234f6a 125 #define BM1383GLV_RESET_CONTROL_REG_INT_RESET_MASK 0x40
Mikko Koivunen 0:e58a87234f6a 126
Mikko Koivunen 0:e58a87234f6a 127 #define BM1383GLV_RESET_CONTROL_REG_RESERVED_MASK 0x3F
Mikko Koivunen 0:e58a87234f6a 128
Mikko Koivunen 0:e58a87234f6a 129 #define BM1383GLV_POWER_REG_RESERVED_MASK 0xFE
Mikko Koivunen 0:e58a87234f6a 130 #define BM1383GLV_POWER_REG_POWER_MASK 0x01
Mikko Koivunen 0:e58a87234f6a 131 #define BM1383GLV_SLEEP_REG_RESERVED_MASK 0xFE
Mikko Koivunen 0:e58a87234f6a 132 #define BM1383GLV_SLEEP_REG_SLEEP_MASK 0x01
Mikko Koivunen 0:e58a87234f6a 133 #define BM1383GLV_MODE_CONTROL_REG_AVE_NUM_MASK 0xE0
Mikko Koivunen 0:e58a87234f6a 134 #define BM1383GLV_MODE_CONTROL_REG_RESERVED_MASK 0x18
Mikko Koivunen 0:e58a87234f6a 135
Mikko Koivunen 0:e58a87234f6a 136 #define BM1383GLV_MODE_CONTROL_REG_MODE_MASK 0x07
Mikko Koivunen 0:e58a87234f6a 137 #define BM1383GLV_INT_HIGH_TRESHOLD_MSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 138 #define BM1383GLV_INT_HIGH_TRESHOLD_LSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 139 #define BM1383GLV_INT_LOW_TRESHOLD_MSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 140 #define BM1383GLV_INT_LOW_TRESHOLD_LSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 141 #define BM1383GLV_INT_CONTROL_REG_TRESHOLD_HIGH_MASK 0x80
Mikko Koivunen 0:e58a87234f6a 142 #define BM1383GLV_INT_CONTROL_REG_TRESHOLD_LOW_MASK 0x40
Mikko Koivunen 0:e58a87234f6a 143 #define BM1383GLV_INT_CONTROL_REG_INT_HIGH_MASK 0x20
Mikko Koivunen 0:e58a87234f6a 144 #define BM1383GLV_INT_CONTROL_REG_INT_LOW_MASK 0x10
Mikko Koivunen 0:e58a87234f6a 145 #define BM1383GLV_INT_CONTROL_REG_INT_PULLUP_MASK 0x08
Mikko Koivunen 0:e58a87234f6a 146
Mikko Koivunen 0:e58a87234f6a 147 #define BM1383GLV_INT_CONTROL_REG_RESERVED_MASK 0x04
Mikko Koivunen 0:e58a87234f6a 148 #define BM1383GLV_INT_CONTROL_REG_INTERRUPT_STATE_MASK 0x02
Mikko Koivunen 0:e58a87234f6a 149
Mikko Koivunen 0:e58a87234f6a 150 #define BM1383GLV_INT_CONTROL_REG_INTERRUPT_MASK 0x01
Mikko Koivunen 0:e58a87234f6a 151 #define BM1383GLV_TEMPERATURE_OUT_MSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 152 #define BM1383GLV_TEMPERATURE_OUT_LSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 153 #define BM1383GLV_PRESSURE_OUT_MSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 154 #define BM1383GLV_PRESSURE_OUT_LSB_ALLBITS_MASK 0xFF
Mikko Koivunen 0:e58a87234f6a 155 #define BM1383GLV_PRESSURE_OUT_DECIMAL_ALLBITS_MASK 0x3F
Mikko Koivunen 0:e58a87234f6a 156
Mikko Koivunen 0:e58a87234f6a 157 #endif /* BM1383GLV_H */