https://wiki.seeedstudio.com/Grove-3-Axis_Digitial_Compass_v2.0/ for mbed

Committer:
takepiyo
Date:
Mon Dec 21 11:51:20 2020 +0000
Revision:
0:d000153cc719
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takepiyo 0:d000153cc719 1 #ifndef _BMM150_DEFS_H_
takepiyo 0:d000153cc719 2 #define _BMM150_DEFS_H_
takepiyo 0:d000153cc719 3
takepiyo 0:d000153cc719 4 #include "mbed.h"
takepiyo 0:d000153cc719 5
takepiyo 0:d000153cc719 6
takepiyo 0:d000153cc719 7 /**\name Macro definitions */
takepiyo 0:d000153cc719 8
takepiyo 0:d000153cc719 9 /**\name API success code */
takepiyo 0:d000153cc719 10 #define BMM150_OK (0)
takepiyo 0:d000153cc719 11
takepiyo 0:d000153cc719 12 /**\name API error codes */
takepiyo 0:d000153cc719 13 #define BMM150_E_ID_NOT_CONFORM (-1)
takepiyo 0:d000153cc719 14 #define BMM150_E_INVALID_CONFIG (-2)
takepiyo 0:d000153cc719 15 // #define BMM150_E_ID_WRONG (-3)
takepiyo 0:d000153cc719 16
takepiyo 0:d000153cc719 17 /**\name API warning codes */
takepiyo 0:d000153cc719 18 #define BMM150_W_NORMAL_SELF_TEST_YZ_FAIL INT8_C(1)
takepiyo 0:d000153cc719 19 #define BMM150_W_NORMAL_SELF_TEST_XZ_FAIL INT8_C(2)
takepiyo 0:d000153cc719 20 #define BMM150_W_NORMAL_SELF_TEST_Z_FAIL INT8_C(3)
takepiyo 0:d000153cc719 21 #define BMM150_W_NORMAL_SELF_TEST_XY_FAIL INT8_C(4)
takepiyo 0:d000153cc719 22 #define BMM150_W_NORMAL_SELF_TEST_Y_FAIL INT8_C(5)
takepiyo 0:d000153cc719 23 #define BMM150_W_NORMAL_SELF_TEST_X_FAIL INT8_C(6)
takepiyo 0:d000153cc719 24 #define BMM150_W_NORMAL_SELF_TEST_XYZ_FAIL INT8_C(7)
takepiyo 0:d000153cc719 25 #define BMM150_W_ADV_SELF_TEST_FAIL INT8_C(8)
takepiyo 0:d000153cc719 26
takepiyo 0:d000153cc719 27 #define BMM150_I2C_Address 0x13 << 1
takepiyo 0:d000153cc719 28
takepiyo 0:d000153cc719 29 /**\name CHIP ID & SOFT RESET VALUES */
takepiyo 0:d000153cc719 30 #define BMM150_CHIP_ID 0x32
takepiyo 0:d000153cc719 31 #define BMM150_SET_SOFT_RESET 0x82
takepiyo 0:d000153cc719 32
takepiyo 0:d000153cc719 33 /**\name POWER MODE DEFINTIONS */
takepiyo 0:d000153cc719 34 #define BMM150_NORMAL_MODE 0x00
takepiyo 0:d000153cc719 35 #define BMM150_FORCED_MODE 0x01
takepiyo 0:d000153cc719 36 #define BMM150_SLEEP_MODE 0x03
takepiyo 0:d000153cc719 37 #define BMM150_SUSPEND_MODE 0x04
takepiyo 0:d000153cc719 38
takepiyo 0:d000153cc719 39 /**\name PRESET MODE DEFINITIONS */
takepiyo 0:d000153cc719 40 #define BMM150_PRESETMODE_LOWPOWER 0x01
takepiyo 0:d000153cc719 41 #define BMM150_PRESETMODE_REGULAR 0x02
takepiyo 0:d000153cc719 42 #define BMM150_PRESETMODE_HIGHACCURACY 0x03
takepiyo 0:d000153cc719 43 #define BMM150_PRESETMODE_ENHANCED 0x04
takepiyo 0:d000153cc719 44
takepiyo 0:d000153cc719 45 /**\name Power mode settings */
takepiyo 0:d000153cc719 46 #define BMM150_POWER_CNTRL_DISABLE 0x00
takepiyo 0:d000153cc719 47 #define BMM150_POWER_CNTRL_ENABLE 0x01
takepiyo 0:d000153cc719 48
takepiyo 0:d000153cc719 49 /**\name Sensor delay time settings */
takepiyo 0:d000153cc719 50 #define BMM150_SOFT_RESET_DELAY (1)
takepiyo 0:d000153cc719 51 #define BMM150_NORMAL_SELF_TEST_DELAY (2)
takepiyo 0:d000153cc719 52 #define BMM150_START_UP_TIME (3)
takepiyo 0:d000153cc719 53 #define BMM150_ADV_SELF_TEST_DELAY (4)
takepiyo 0:d000153cc719 54
takepiyo 0:d000153cc719 55 /**\name ENABLE/DISABLE DEFINITIONS */
takepiyo 0:d000153cc719 56 #define BMM150_XY_CHANNEL_ENABLE 0x00
takepiyo 0:d000153cc719 57 #define BMM150_XY_CHANNEL_DISABLE 0x03
takepiyo 0:d000153cc719 58
takepiyo 0:d000153cc719 59 /**\name Register Address */
takepiyo 0:d000153cc719 60 #define BMM150_CHIP_ID_ADDR 0x40
takepiyo 0:d000153cc719 61 #define BMM150_DATA_X_LSB 0x42
takepiyo 0:d000153cc719 62 #define BMM150_DATA_X_MSB 0x43
takepiyo 0:d000153cc719 63 #define BMM150_DATA_Y_LSB 0x44
takepiyo 0:d000153cc719 64 #define BMM150_DATA_Y_MSB 0x45
takepiyo 0:d000153cc719 65 #define BMM150_DATA_Z_LSB 0x46
takepiyo 0:d000153cc719 66 #define BMM150_DATA_Z_MSB 0x47
takepiyo 0:d000153cc719 67 #define BMM150_DATA_READY_STATUS 0x48
takepiyo 0:d000153cc719 68 #define BMM150_INTERRUPT_STATUS 0x4A
takepiyo 0:d000153cc719 69 #define BMM150_POWER_CONTROL_ADDR 0x4B
takepiyo 0:d000153cc719 70 #define BMM150_OP_MODE_ADDR 0x4C
takepiyo 0:d000153cc719 71 #define BMM150_INT_CONFIG_ADDR 0x4D
takepiyo 0:d000153cc719 72 #define BMM150_AXES_ENABLE_ADDR 0x4E
takepiyo 0:d000153cc719 73 #define BMM150_LOW_THRESHOLD_ADDR 0x4F
takepiyo 0:d000153cc719 74 #define BMM150_HIGH_THRESHOLD_ADDR 0x50
takepiyo 0:d000153cc719 75 #define BMM150_REP_XY_ADDR 0x51
takepiyo 0:d000153cc719 76 #define BMM150_REP_Z_ADDR 0x52
takepiyo 0:d000153cc719 77
takepiyo 0:d000153cc719 78 /**\name DATA RATE DEFINITIONS */
takepiyo 0:d000153cc719 79 #define BMM150_DATA_RATE_10HZ (0x00)
takepiyo 0:d000153cc719 80 #define BMM150_DATA_RATE_02HZ (0x01)
takepiyo 0:d000153cc719 81 #define BMM150_DATA_RATE_06HZ (0x02)
takepiyo 0:d000153cc719 82 #define BMM150_DATA_RATE_08HZ (0x03)
takepiyo 0:d000153cc719 83 #define BMM150_DATA_RATE_15HZ (0x04)
takepiyo 0:d000153cc719 84 #define BMM150_DATA_RATE_20HZ (0x05)
takepiyo 0:d000153cc719 85 #define BMM150_DATA_RATE_25HZ (0x06)
takepiyo 0:d000153cc719 86 #define BMM150_DATA_RATE_30HZ (0x07)
takepiyo 0:d000153cc719 87
takepiyo 0:d000153cc719 88 /**\name TRIM REGISTERS */
takepiyo 0:d000153cc719 89 /* Trim Extended Registers */
takepiyo 0:d000153cc719 90 #define BMM150_DIG_X1 UINT8_C(0x5D)
takepiyo 0:d000153cc719 91 #define BMM150_DIG_Y1 UINT8_C(0x5E)
takepiyo 0:d000153cc719 92 #define BMM150_DIG_Z4_LSB UINT8_C(0x62)
takepiyo 0:d000153cc719 93 #define BMM150_DIG_Z4_MSB UINT8_C(0x63)
takepiyo 0:d000153cc719 94 #define BMM150_DIG_X2 UINT8_C(0x64)
takepiyo 0:d000153cc719 95 #define BMM150_DIG_Y2 UINT8_C(0x65)
takepiyo 0:d000153cc719 96 #define BMM150_DIG_Z2_LSB UINT8_C(0x68)
takepiyo 0:d000153cc719 97 #define BMM150_DIG_Z2_MSB UINT8_C(0x69)
takepiyo 0:d000153cc719 98 #define BMM150_DIG_Z1_LSB UINT8_C(0x6A)
takepiyo 0:d000153cc719 99 #define BMM150_DIG_Z1_MSB UINT8_C(0x6B)
takepiyo 0:d000153cc719 100 #define BMM150_DIG_XYZ1_LSB UINT8_C(0x6C)
takepiyo 0:d000153cc719 101 #define BMM150_DIG_XYZ1_MSB UINT8_C(0x6D)
takepiyo 0:d000153cc719 102 #define BMM150_DIG_Z3_LSB UINT8_C(0x6E)
takepiyo 0:d000153cc719 103 #define BMM150_DIG_Z3_MSB UINT8_C(0x6F)
takepiyo 0:d000153cc719 104 #define BMM150_DIG_XY2 UINT8_C(0x70)
takepiyo 0:d000153cc719 105 #define BMM150_DIG_XY1 UINT8_C(0x71)
takepiyo 0:d000153cc719 106
takepiyo 0:d000153cc719 107 /**\name PRESET MODES - REPETITIONS-XY RATES */
takepiyo 0:d000153cc719 108 #define BMM150_LOWPOWER_REPXY (1)
takepiyo 0:d000153cc719 109 #define BMM150_REGULAR_REPXY (4)
takepiyo 0:d000153cc719 110 #define BMM150_ENHANCED_REPXY (7)
takepiyo 0:d000153cc719 111 #define BMM150_HIGHACCURACY_REPXY (23)
takepiyo 0:d000153cc719 112
takepiyo 0:d000153cc719 113 /**\name PRESET MODES - REPETITIONS-Z RATES */
takepiyo 0:d000153cc719 114 #define BMM150_LOWPOWER_REPZ (2)
takepiyo 0:d000153cc719 115 #define BMM150_REGULAR_REPZ (14)
takepiyo 0:d000153cc719 116 #define BMM150_ENHANCED_REPZ (26)
takepiyo 0:d000153cc719 117 #define BMM150_HIGHACCURACY_REPZ (82)
takepiyo 0:d000153cc719 118
takepiyo 0:d000153cc719 119 /**\name Macros for bit masking */
takepiyo 0:d000153cc719 120 #define BMM150_PWR_CNTRL_MSK (0x01)
takepiyo 0:d000153cc719 121
takepiyo 0:d000153cc719 122 #define BMM150_CONTROL_MEASURE_MSK (0x38)
takepiyo 0:d000153cc719 123 #define BMM150_CONTROL_MEASURE_POS (0x03)
takepiyo 0:d000153cc719 124
takepiyo 0:d000153cc719 125 #define BMM150_POWER_CONTROL_BIT_MSK (0x01)
takepiyo 0:d000153cc719 126 #define BMM150_POWER_CONTROL_BIT_POS (0x00)
takepiyo 0:d000153cc719 127
takepiyo 0:d000153cc719 128 #define BMM150_OP_MODE_MSK (0x06)
takepiyo 0:d000153cc719 129 #define BMM150_OP_MODE_POS (0x01)
takepiyo 0:d000153cc719 130
takepiyo 0:d000153cc719 131 #define BMM150_ODR_MSK (0x38)
takepiyo 0:d000153cc719 132 #define BMM150_ODR_POS (0x03)
takepiyo 0:d000153cc719 133
takepiyo 0:d000153cc719 134 #define BMM150_DATA_X_MSK (0xF8)
takepiyo 0:d000153cc719 135 #define BMM150_DATA_X_POS (0x03)
takepiyo 0:d000153cc719 136
takepiyo 0:d000153cc719 137 #define BMM150_DATA_Y_MSK (0xF8)
takepiyo 0:d000153cc719 138 #define BMM150_DATA_Y_POS (0x03)
takepiyo 0:d000153cc719 139
takepiyo 0:d000153cc719 140 #define BMM150_DATA_Z_MSK (0xFE)
takepiyo 0:d000153cc719 141 #define BMM150_DATA_Z_POS (0x01)
takepiyo 0:d000153cc719 142
takepiyo 0:d000153cc719 143 #define BMM150_DATA_RHALL_MSK (0xFC)
takepiyo 0:d000153cc719 144 #define BMM150_DATA_RHALL_POS (0x02)
takepiyo 0:d000153cc719 145
takepiyo 0:d000153cc719 146 #define BMM150_SELF_TEST_MSK (0x01)
takepiyo 0:d000153cc719 147
takepiyo 0:d000153cc719 148 #define BMM150_ADV_SELF_TEST_MSK (0xC0)
takepiyo 0:d000153cc719 149 #define BMM150_ADV_SELF_TEST_POS (0x06)
takepiyo 0:d000153cc719 150
takepiyo 0:d000153cc719 151 #define BMM150_DRDY_EN_MSK (0x80)
takepiyo 0:d000153cc719 152 #define BMM150_DRDY_EN_POS (0x07)
takepiyo 0:d000153cc719 153
takepiyo 0:d000153cc719 154 #define BMM150_INT_PIN_EN_MSK (0x40)
takepiyo 0:d000153cc719 155 #define BMM150_INT_PIN_EN_POS (0x06)
takepiyo 0:d000153cc719 156
takepiyo 0:d000153cc719 157 #define BMM150_DRDY_POLARITY_MSK (0x04)
takepiyo 0:d000153cc719 158 #define BMM150_DRDY_POLARITY_POS (0x02)
takepiyo 0:d000153cc719 159
takepiyo 0:d000153cc719 160 #define BMM150_INT_LATCH_MSK (0x02)
takepiyo 0:d000153cc719 161 #define BMM150_INT_LATCH_POS (0x01)
takepiyo 0:d000153cc719 162
takepiyo 0:d000153cc719 163 #define BMM150_INT_POLARITY_MSK (0x01)
takepiyo 0:d000153cc719 164
takepiyo 0:d000153cc719 165 #define BMM150_DATA_OVERRUN_INT_MSK (0x80)
takepiyo 0:d000153cc719 166 #define BMM150_DATA_OVERRUN_INT_POS (0x07)
takepiyo 0:d000153cc719 167
takepiyo 0:d000153cc719 168 #define BMM150_OVERFLOW_INT_MSK (0x40)
takepiyo 0:d000153cc719 169 #define BMM150_OVERFLOW_INT_POS (0x06)
takepiyo 0:d000153cc719 170
takepiyo 0:d000153cc719 171 #define BMM150_HIGH_THRESHOLD_INT_MSK (0x38)
takepiyo 0:d000153cc719 172 #define BMM150_HIGH_THRESHOLD_INT_POS (0x03)
takepiyo 0:d000153cc719 173
takepiyo 0:d000153cc719 174 #define BMM150_LOW_THRESHOLD_INT_MSK (0x07)
takepiyo 0:d000153cc719 175
takepiyo 0:d000153cc719 176 #define BMM150_DRDY_STATUS_MSK (0x01)
takepiyo 0:d000153cc719 177
takepiyo 0:d000153cc719 178 /**\name OVERFLOW DEFINITIONS */
takepiyo 0:d000153cc719 179 #define BMM150_XYAXES_FLIP_OVERFLOW_ADCVAL (-4096)
takepiyo 0:d000153cc719 180 #define BMM150_ZAXIS_HALL_OVERFLOW_ADCVAL (-16384)
takepiyo 0:d000153cc719 181 #define BMM150_OVERFLOW_OUTPUT (-32768)
takepiyo 0:d000153cc719 182 #define BMM150_NEGATIVE_SATURATION_Z (-32767)
takepiyo 0:d000153cc719 183 #define BMM150_POSITIVE_SATURATION_Z (32767)
takepiyo 0:d000153cc719 184 #ifdef BMM150_USE_FLOATING_POINT
takepiyo 0:d000153cc719 185 #define BMM150_OVERFLOW_OUTPUT_FLOAT 0.0f
takepiyo 0:d000153cc719 186 #endif
takepiyo 0:d000153cc719 187
takepiyo 0:d000153cc719 188 /**\name Register read lengths */
takepiyo 0:d000153cc719 189 #define BMM150_SELF_TEST_LEN (5)
takepiyo 0:d000153cc719 190 #define BMM150_SETTING_DATA_LEN (8)
takepiyo 0:d000153cc719 191 #define BMM150_XYZR_DATA_LEN (8)
takepiyo 0:d000153cc719 192
takepiyo 0:d000153cc719 193 /**\name Self test selection macros */
takepiyo 0:d000153cc719 194 #define BMM150_NORMAL_SELF_TEST (0)
takepiyo 0:d000153cc719 195 #define BMM150_ADVANCED_SELF_TEST (1)
takepiyo 0:d000153cc719 196
takepiyo 0:d000153cc719 197 /**\name Self test settings */
takepiyo 0:d000153cc719 198 #define BMM150_DISABLE_XY_AXIS (0x03)
takepiyo 0:d000153cc719 199 #define BMM150_SELF_TEST_REP_Z (0x04)
takepiyo 0:d000153cc719 200
takepiyo 0:d000153cc719 201 /**\name Advanced self-test current settings */
takepiyo 0:d000153cc719 202 #define BMM150_DISABLE_SELF_TEST_CURRENT (0x00)
takepiyo 0:d000153cc719 203 #define BMM150_ENABLE_NEGATIVE_CURRENT (0x02)
takepiyo 0:d000153cc719 204 #define BMM150_ENABLE_POSITIVE_CURRENT (0x03)
takepiyo 0:d000153cc719 205
takepiyo 0:d000153cc719 206 /**\name Normal self-test status */
takepiyo 0:d000153cc719 207 #define BMM150_SELF_TEST_STATUS_XYZ_FAIL (0x00)
takepiyo 0:d000153cc719 208 #define BMM150_SELF_TEST_STATUS_SUCCESS (0x07)
takepiyo 0:d000153cc719 209
takepiyo 0:d000153cc719 210 /**\name Macro to SET and GET BITS of a register*/
takepiyo 0:d000153cc719 211 #define BMM150_SET_BITS(reg_data, bitname, data) \
takepiyo 0:d000153cc719 212 ((reg_data & ~(bitname##_MSK)) | \
takepiyo 0:d000153cc719 213 ((data << bitname##_POS) & bitname##_MSK))
takepiyo 0:d000153cc719 214
takepiyo 0:d000153cc719 215 #define BMM150_GET_BITS(reg_data, bitname) ((reg_data & (bitname##_MSK)) >> \
takepiyo 0:d000153cc719 216 (bitname##_POS))
takepiyo 0:d000153cc719 217
takepiyo 0:d000153cc719 218 #define BMM150_SET_BITS_POS_0(reg_data, bitname, data) \
takepiyo 0:d000153cc719 219 ((reg_data & ~(bitname##_MSK)) | \
takepiyo 0:d000153cc719 220 (data & bitname##_MSK))
takepiyo 0:d000153cc719 221
takepiyo 0:d000153cc719 222 #define BMM150_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK))
takepiyo 0:d000153cc719 223
takepiyo 0:d000153cc719 224
takepiyo 0:d000153cc719 225 struct bmm150_mag_data {
takepiyo 0:d000153cc719 226 int16_t x;
takepiyo 0:d000153cc719 227 int16_t y;
takepiyo 0:d000153cc719 228 int16_t z;
takepiyo 0:d000153cc719 229 };
takepiyo 0:d000153cc719 230
takepiyo 0:d000153cc719 231 /*
takepiyo 0:d000153cc719 232 @brief bmm150 un-compensated (raw) magnetometer data
takepiyo 0:d000153cc719 233 */
takepiyo 0:d000153cc719 234 struct bmm150_raw_mag_data {
takepiyo 0:d000153cc719 235 /*! Raw mag X data */
takepiyo 0:d000153cc719 236 int16_t raw_datax;
takepiyo 0:d000153cc719 237 /*! Raw mag Y data */
takepiyo 0:d000153cc719 238 int16_t raw_datay;
takepiyo 0:d000153cc719 239 /*! Raw mag Z data */
takepiyo 0:d000153cc719 240 int16_t raw_dataz;
takepiyo 0:d000153cc719 241 /*! Raw mag resistance value */
takepiyo 0:d000153cc719 242 uint16_t raw_data_r;
takepiyo 0:d000153cc719 243 };
takepiyo 0:d000153cc719 244
takepiyo 0:d000153cc719 245 /*!
takepiyo 0:d000153cc719 246 @brief bmm150 trim data structure
takepiyo 0:d000153cc719 247 */
takepiyo 0:d000153cc719 248 struct bmm150_trim_registers {
takepiyo 0:d000153cc719 249 /*! trim x1 data */
takepiyo 0:d000153cc719 250 int8_t dig_x1;
takepiyo 0:d000153cc719 251 /*! trim y1 data */
takepiyo 0:d000153cc719 252 int8_t dig_y1;
takepiyo 0:d000153cc719 253 /*! trim x2 data */
takepiyo 0:d000153cc719 254 int8_t dig_x2;
takepiyo 0:d000153cc719 255 /*! trim y2 data */
takepiyo 0:d000153cc719 256 int8_t dig_y2;
takepiyo 0:d000153cc719 257 /*! trim z1 data */
takepiyo 0:d000153cc719 258 uint16_t dig_z1;
takepiyo 0:d000153cc719 259 /*! trim z2 data */
takepiyo 0:d000153cc719 260 int16_t dig_z2;
takepiyo 0:d000153cc719 261 /*! trim z3 data */
takepiyo 0:d000153cc719 262 int16_t dig_z3;
takepiyo 0:d000153cc719 263 /*! trim z4 data */
takepiyo 0:d000153cc719 264 int16_t dig_z4;
takepiyo 0:d000153cc719 265 /*! trim xy1 data */
takepiyo 0:d000153cc719 266 uint8_t dig_xy1;
takepiyo 0:d000153cc719 267 /*! trim xy2 data */
takepiyo 0:d000153cc719 268 int8_t dig_xy2;
takepiyo 0:d000153cc719 269 /*! trim xyz1 data */
takepiyo 0:d000153cc719 270 uint16_t dig_xyz1;
takepiyo 0:d000153cc719 271 };
takepiyo 0:d000153cc719 272
takepiyo 0:d000153cc719 273 /**
takepiyo 0:d000153cc719 274 @brief bmm150 sensor settings
takepiyo 0:d000153cc719 275 */
takepiyo 0:d000153cc719 276 struct bmm150_settings {
takepiyo 0:d000153cc719 277 /*! Control measurement of XYZ axes */
takepiyo 0:d000153cc719 278 uint8_t xyz_axes_control;
takepiyo 0:d000153cc719 279 /*! Power control bit value */
takepiyo 0:d000153cc719 280 uint8_t pwr_cntrl_bit;
takepiyo 0:d000153cc719 281 /*! Power control bit value */
takepiyo 0:d000153cc719 282 uint8_t pwr_mode;
takepiyo 0:d000153cc719 283 /*! Data rate value (ODR) */
takepiyo 0:d000153cc719 284 uint8_t data_rate;
takepiyo 0:d000153cc719 285 /*! XY Repetitions */
takepiyo 0:d000153cc719 286 uint8_t xy_rep;
takepiyo 0:d000153cc719 287 /*! Z Repetitions */
takepiyo 0:d000153cc719 288 uint8_t z_rep;
takepiyo 0:d000153cc719 289 /*! Preset mode of sensor */
takepiyo 0:d000153cc719 290 uint8_t preset_mode;
takepiyo 0:d000153cc719 291 /*! Interrupt configuration settings */
takepiyo 0:d000153cc719 292 // struct bmm150_int_ctrl_settings int_settings;
takepiyo 0:d000153cc719 293 };
takepiyo 0:d000153cc719 294
takepiyo 0:d000153cc719 295 #endif