ISSDK  1.8
IoT Sensing Software Development Kit
mag3110.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 #ifndef MAG3110_H_
9 #define MAG3110_H_
10 
11 /**
12  **
13  ** MAG3110 Sensor Internal Registers
14  */
15 enum {
34 };
35 
36 #define MAG3110_I2C_ADDRESS (0x0E) /* MAG3110 I2C Slave Address. */
37 #define MAG3110_WHOAMI_VALUE (0xC4) /* MAG3110 Who_Am_I Value. */
38 
39 
40 
41 /*--------------------------------
42 ** Register: DR_STATUS
43 ** Enum: MAG3110_DR_STATUS
44 ** --
45 ** Offset : 0x00 - Data-ready status information
46 ** ------------------------------*/
47 typedef union {
48  struct {
49  uint8_t xdr : 1; /* - X-Axis new Data Available. */
50 
51  uint8_t ydr : 1; /* - Y-Axis new data available. */
52 
53  uint8_t zdr : 1; /* - Z-Axis new data available. */
54 
55  uint8_t zyxdr : 1; /* - X or Y or Z-Axis new data available. */
56 
57  uint8_t xow : 1; /* - X-Axis data overwrite. */
58 
59  uint8_t yow : 1; /* - Y-Axis data overwrite. */
60 
61  uint8_t zow : 1; /* - Z-Axis data overwrite. */
62 
63  uint8_t zyxow : 1; /* - X, Y, Z-Axis data overwrite. */
64 
65  } b;
66  uint8_t w;
68 
69 
70 /*
71 ** DR_STATUS - Bit field mask definitions
72 */
73 #define MAG3110_DR_STATUS_XDR_MASK ((uint8_t) 0x01)
74 #define MAG3110_DR_STATUS_XDR_SHIFT ((uint8_t) 0)
75 
76 #define MAG3110_DR_STATUS_YDR_MASK ((uint8_t) 0x02)
77 #define MAG3110_DR_STATUS_YDR_SHIFT ((uint8_t) 1)
78 
79 #define MAG3110_DR_STATUS_ZDR_MASK ((uint8_t) 0x04)
80 #define MAG3110_DR_STATUS_ZDR_SHIFT ((uint8_t) 2)
81 
82 #define MAG3110_DR_STATUS_ZYXDR_MASK ((uint8_t) 0x08)
83 #define MAG3110_DR_STATUS_ZYXDR_SHIFT ((uint8_t) 3)
84 
85 #define MAG3110_DR_STATUS_XOW_MASK ((uint8_t) 0x10)
86 #define MAG3110_DR_STATUS_XOW_SHIFT ((uint8_t) 4)
87 
88 #define MAG3110_DR_STATUS_YOW_MASK ((uint8_t) 0x20)
89 #define MAG3110_DR_STATUS_YOW_SHIFT ((uint8_t) 5)
90 
91 #define MAG3110_DR_STATUS_ZOW_MASK ((uint8_t) 0x40)
92 #define MAG3110_DR_STATUS_ZOW_SHIFT ((uint8_t) 6)
93 
94 #define MAG3110_DR_STATUS_ZYXOW_MASK ((uint8_t) 0x80)
95 #define MAG3110_DR_STATUS_ZYXOW_SHIFT ((uint8_t) 7)
96 
97 
98 /*
99 ** DR_STATUS - Bit field value definitions
100 */
101 #define MAG3110_DR_STATUS_XDR_DRDY ((uint8_t) 0x01) /* - Set to 1 whenever new X-axis data acquisition is */
102  /* completed. XDR is cleared any time OUT_X_MSB */
103  /* register is read. */
104 #define MAG3110_DR_STATUS_YDR_DRDY ((uint8_t) 0x02) /* - Set to 1 whenever new Y-axis data acquisition is */
105  /* completed. YDR is cleared any time OUT_Y_MSB */
106  /* register is read. */
107 #define MAG3110_DR_STATUS_ZDR_DRDY ((uint8_t) 0x04) /* - Set to 1 whenever new Z-axis data acquisition is */
108  /* completed. ZDR is cleared any time OUT_Z_MSB */
109  /* register is read. */
110 #define MAG3110_DR_STATUS_ZYXDR_DRDY ((uint8_t) 0x08) /* - Signals that new acquisition for any of the */
111  /* enabled channels is available. ZYXDR is cleared */
112  /* when the high-bytes of the data (OUT_X_MSB, */
113  /* OUT_Y_MSB, OUT_Z_MSB) of all the enabled channels */
114  /* are read. */
115 #define MAG3110_DR_STATUS_XOW_OWR ((uint8_t) 0x10) /* - Set to 1 whenever new X-axis acquisition is */
116  /* completed before the retrieval of the previous */
117  /* data. When this occurs the previous data is */
118  /* overwritten. XOW is cleared any time OUT_X_MSB */
119  /* register is read. */
120 #define MAG3110_DR_STATUS_YOW_OWR ((uint8_t) 0x20) /* - Set to 1 whenever new Y-axis acquisition is */
121  /* completed before the retrieval of the previous */
122  /* data. When this occurs the previous data is */
123  /* overwritten. YOW is cleared any time OUT_Y_MSB */
124  /* register is read. */
125 #define MAG3110_DR_STATUS_ZOW_OWR ((uint8_t) 0x40) /* - Set to 1 whenever new Z-axis acquisition is */
126  /* completed before the retrieval of the previous */
127  /* data. When this occurs the previous data is */
128  /* overwritten. ZOW is cleared any time OUT_Z_MSB */
129  /* register is read. */
130 #define MAG3110_DR_STATUS_ZYXOW_OWR ((uint8_t) 0x80) /* - Set to 1 whenever new data is acquired before */
131  /* completing the retrieval of the previous set. This */
132  /* event occurs when the content of at least one data */
133  /* register (i.e. OUT_X, OUT_Y, OUT_Z) has been */
134  /* overwritten. ZYXOW is cleared when the highbytes of */
135  /* the data (OUT_X_MSB, OUT_Y_MSB, OUT_Z_MSB) of all */
136  /* active channels are read. */
137 /*------------------------------*/
138 
139 
140 
141 
142 /*--------------------------------
143 ** Register: OUT_X_MSB
144 ** Enum: MAG3110_OUT_X_MSB
145 ** --
146 ** Offset : 0x01 - Bits 8-15 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
147 ** ------------------------------*/
148 typedef uint8_t MAG3110_OUT_X_MSB_t;
149 
150 
151 /*--------------------------------
152 ** Register: OUT_X_LSB
153 ** Enum: MAG3110_OUT_X_LSB
154 ** --
155 ** Offset : 0x02 - Bits 0-7 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
156 ** ------------------------------*/
157 typedef uint8_t MAG3110_OUT_X_LSB_t;
158 
159 
160 /*--------------------------------
161 ** Register: OUT_Y_MSB
162 ** Enum: MAG3110_OUT_Y_MSB
163 ** --
164 ** Offset : 0x03 - Bits 8-15 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
165 ** ------------------------------*/
166 typedef uint8_t MAG3110_OUT_Y_MSB_t;
167 
168 
169 /*--------------------------------
170 ** Register: OUT_Y_LSB
171 ** Enum: MAG3110_OUT_Y_LSB
172 ** --
173 ** Offset : 0x04 - Bits 0-7 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
174 ** ------------------------------*/
175 typedef uint8_t MAG3110_OUT_Y_LSB_t;
176 
177 
178 /*--------------------------------
179 ** Register: OUT_Z_MSB
180 ** Enum: MAG3110_OUT_Z_MSB
181 ** --
182 ** Offset : 0x05 - Bits 8-15 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
183 ** ------------------------------*/
184 typedef uint8_t MAG3110_OUT_Z_MSB_t;
185 
186 
187 /*--------------------------------
188 ** Register: OUT_Z_LSB
189 ** Enum: MAG3110_OUT_Z_LSB
190 ** --
191 ** Offset : 0x06 - Bits 0-7 of 16-bit real-time Magnetic Field Strength sample expressed as signed 2's complement numbers.
192 ** ------------------------------*/
193 
194 typedef uint8_t MAG3110_OUT_Z_LSB_t;
195 
196 
197 
198 /*--------------------------------
199 ** Register: WHO_AM_I
200 ** Enum: MAG3110_WHO_AM_I
201 ** --
202 ** Offset : 0x07 - Device identification register containing Fixed Device ID Number.
203 ** ------------------------------*/
204 typedef uint8_t MAG3110_WHO_AM_I_t;
205 
206 
207 
208 
209 /*--------------------------------
210 ** Register: SYSMOD
211 ** Enum: MAG3110_SYSMOD
212 ** --
213 ** Offset : 0x08 - The read-only system mode register indicating the current device operating mode.
214 ** ------------------------------*/
215 typedef union {
216  struct {
217  uint8_t sysmod : 2; /* - System mode data bits 0-1. (Bits 7-2 will always read 0.) */
218 
219  } b;
220  uint8_t w;
222 
223 
224 /*
225 ** SYSMOD - Bit field mask definitions
226 */
227 #define MAG3110_SYSMOD_SYSMOD_MASK ((uint8_t) 0x03)
228 #define MAG3110_SYSMOD_SYSMOD_SHIFT ((uint8_t) 0)
229 
230 
231 /*
232 ** SYSMOD - Bit field value definitions
233 */
234 #define MAG3110_SYSMOD_SYSMOD_STANDBY ((uint8_t) 0x00) /* - STANDBY Mode. */
235 #define MAG3110_SYSMOD_SYSMOD_ACTIVE_RAW ((uint8_t) 0x01) /* - ACTIVE Mode, RAW Data. */
236 #define MAG3110_SYSMOD_SYSMOD_ACTIVE ((uint8_t) 0x02) /* - ACTIVE Mode, non-RAW user-corrected Data. */
237 /*------------------------------*/
238 
239 
240 
241 
242 /*--------------------------------
243 ** Register: OFF_X_MSB
244 ** Enum: MAG3110_OFF_X_MSB
245 ** --
246 ** Offset : 0x09 - Bits 7-14 of X-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
247 ** ------------------------------*/
248 typedef uint8_t MAG3110_OFF_X_MSB_t;
249 
250 
251 
252 /*--------------------------------
253 ** Register: OFF_X_LSB
254 ** Enum: MAG3110_OFF_X_LSB
255 ** --
256 ** Offset : 0x0A - Bits 0-6 of X-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
257 ** ------------------------------*/
258 typedef union {
259  struct {
260  uint8_t _reserved_ : 1;
261  uint8_t off_x_lsb : 7; /* - OFF_X_LSB register bits 1-7. (Bit 0 will always be 0.) */
262 
263  } b;
264  uint8_t w;
266 
267 
268 /*
269 ** OFF_X_LSB - Bit field mask definitions
270 */
271 #define MAG3110_OFF_X_LSB_OFF_X_LSB_MASK ((uint8_t) 0xFE)
272 #define MAG3110_OFF_X_LSB_OFF_X_LSB_SHIFT ((uint8_t) 1)
273 
274 
275 /*------------------------------*/
276 
277 
278 
279 /*--------------------------------
280 ** Register: OFF_Y_MSB
281 ** Enum: MAG3110_OFF_Y_MSB
282 ** --
283 ** Offset : 0x0B - Bits 7-14 of Y-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
284 ** ------------------------------*/
285 typedef uint8_t MAG3110_OFF_Y_MSB_t;
286 
287 
288 
289 /*--------------------------------
290 ** Register: OFF_Y_LSB
291 ** Enum: MAG3110_OFF_Y_LSB
292 ** --
293 ** Offset : 0x0C - Bits 0-6 of Y-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
294 ** ------------------------------*/
295 typedef union {
296  struct {
297  uint8_t _reserved_ : 1;
298  uint8_t off_y_lsb : 7; /* - OFF_Y_LSB register bits 1-7. (Bit 0 will always be 0.) */
299 
300  } b;
301  uint8_t w;
303 
304 
305 /*
306 ** OFF_Y_LSB - Bit field mask definitions
307 */
308 #define MAG3110_OFF_Y_LSB_OFF_Y_LSB_MASK ((uint8_t) 0xFE)
309 #define MAG3110_OFF_Y_LSB_OFF_Y_LSB_SHIFT ((uint8_t) 1)
310 
311 
312 /*------------------------------*/
313 
314 
315 
316 /*--------------------------------
317 ** Register: OFF_Z_MSB
318 ** Enum: MAG3110_OFF_Z_MSB
319 ** --
320 ** Offset : 0x0D - Bits 7-14 of Z-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
321 ** ------------------------------*/
322 typedef uint8_t MAG3110_OFF_Z_MSB_t;
323 
324 
325 
326 /*--------------------------------
327 ** Register: OFF_Z_LSB
328 ** Enum: MAG3110_OFF_Z_LSB
329 ** --
330 ** Offset : 0x0E - Bits 0-6 of Z-Axis user defined offsets in 2's complement format which are used when CTRL_REG2[RAW] = 0.
331 ** ------------------------------*/
332 typedef union {
333  struct {
334  uint8_t _reserved_ : 1;
335  uint8_t off_z_lsb : 7; /* - OFF_Z_LSB register bits 1-7. (Bit 0 will always be 0.) */
336 
337  } b;
338  uint8_t w;
340 
341 
342 /*
343 ** OFF_Z_LSB - Bit field mask definitions
344 */
345 #define MAG3110_OFF_Z_LSB_OFF_Z_LSB_MASK ((uint8_t) 0xFE)
346 #define MAG3110_OFF_Z_LSB_OFF_Z_LSB_SHIFT ((uint8_t) 1)
347 
348 
349 /*------------------------------*/
350 
351 
352 
353 
354 /*--------------------------------
355 ** Register: DIE_TEMP
356 ** Enum: MAG3110_DIE_TEMP
357 ** --
358 ** Offset : 0x0F - The die temperature in °C expressed as an 8-bit 2's complement number.
359 ** ------------------------------*/
360 typedef uint8_t MAG3110_DIE_TEMP_t;
361 
362 
363 
364 
365 /*--------------------------------
366 ** Register: CTRL_REG1
367 ** Enum: MAG3110_CTRL_REG1
368 ** --
369 ** Offset : 0x10 - Control Register 1: Modes, Trigger, ODR, OSR.
370 ** ------------------------------*/
371 typedef union {
372  struct {
373  uint8_t ac : 1; /* - Operating Mode. */
374 
375  uint8_t tm : 1; /* - Trigger immediate measurement (if the ac bit is set to standby). */
376 
377  uint8_t fr : 1; /* - Fast Read selection Mode. 8-bit values are read from the MSB registers */
378  /* (Auto-increment skips over the LSB register in burst-read mode). */
379 
380  uint8_t os : 2; /* - These bits configures the over sampling ratio for the measurement. */
381 
382  uint8_t dr : 3; /* - These bits configures the Output Data Rate. */
383 
384  } b;
385  uint8_t w;
387 
388 
389 /*
390 ** CTRL_REG1 - Bit field mask definitions
391 */
392 #define MAG3110_CTRL_REG1_AC_MASK ((uint8_t) 0x01)
393 #define MAG3110_CTRL_REG1_AC_SHIFT ((uint8_t) 0)
394 
395 #define MAG3110_CTRL_REG1_TM_MASK ((uint8_t) 0x02)
396 #define MAG3110_CTRL_REG1_TM_SHIFT ((uint8_t) 1)
397 
398 #define MAG3110_CTRL_REG1_FR_MASK ((uint8_t) 0x04)
399 #define MAG3110_CTRL_REG1_FR_SHIFT ((uint8_t) 2)
400 
401 #define MAG3110_CTRL_REG1_OS_MASK ((uint8_t) 0x18)
402 #define MAG3110_CTRL_REG1_OS_SHIFT ((uint8_t) 3)
403 
404 #define MAG3110_CTRL_REG1_DR_MASK ((uint8_t) 0xE0)
405 #define MAG3110_CTRL_REG1_DR_SHIFT ((uint8_t) 5)
406 
407 
408 /*
409 ** CTRL_REG1 - Bit field value definitions
410 */
411 #define MAG3110_CTRL_REG1_AC_STANDBY ((uint8_t) 0x00) /* - Standby Mode. */
412 #define MAG3110_CTRL_REG1_AC_ACTIVE ((uint8_t) 0x01) /* - Active Mode. */
413 #define MAG3110_CTRL_REG1_TM_NORMAL ((uint8_t) 0x00) /* - Normal operation based on AC condition. */
414 #define MAG3110_CTRL_REG1_TM_TRIGGER ((uint8_t) 0x02) /* - Trigger Measurement. */
415 #define MAG3110_CTRL_REG1_FR_FULL ((uint8_t) 0x00) /* - The full 16-bit values are read. */
416 #define MAG3110_CTRL_REG1_FR_FAST ((uint8_t) 0x04) /* - 8-bit values read from the MSB registers. */
417 #define MAG3110_CTRL_REG1_OS_OSR_16 ((uint8_t) 0x00) /* - OSR = 16. */
418 #define MAG3110_CTRL_REG1_OS_OSR_32 ((uint8_t) 0x08) /* - OSR = 32. */
419 #define MAG3110_CTRL_REG1_OS_OSR_64 ((uint8_t) 0x10) /* - OSR = 64. */
420 #define MAG3110_CTRL_REG1_OS_OSR_128 ((uint8_t) 0x18) /* - OSR = 128. */
421 #define MAG3110_CTRL_REG1_DR_ODR_0 ((uint8_t) 0x00) /* - ADC Rate = 1280Hz; Output Rate = ADC/OS. */
422 #define MAG3110_CTRL_REG1_DR_ODR_1 ((uint8_t) 0x20) /* - ADC Rate = 640Hz; Output Rate = ADC/OS. */
423 #define MAG3110_CTRL_REG1_DR_ODR_2 ((uint8_t) 0x40) /* - ADC Rate = 320Hz; Output Rate = ADC/OS. */
424 #define MAG3110_CTRL_REG1_DR_ODR_3 ((uint8_t) 0x60) /* - ADC Rate = 160Hz; Output Rate = ADC/OS. */
425 #define MAG3110_CTRL_REG1_DR_ODR_4 ((uint8_t) 0x80) /* - ADC Rate = 80Hz; Output Rate = ADC/OS. */
426 #define MAG3110_CTRL_REG1_DR_ODR_5 ((uint8_t) 0xa0) /* - ADC Rate = 80Hz; Output Rate = ADC/OS. */
427 #define MAG3110_CTRL_REG1_DR_ODR_6 ((uint8_t) 0xc0) /* - ADC Rate = 80Hz; Output Rate = ADC/OS. */
428 #define MAG3110_CTRL_REG1_DR_ODR_7 ((uint8_t) 0xe0) /* - ADC Rate = 80Hz; Output Rate = ADC/OS. */
429 /*------------------------------*/
430 
431 
432 
433 
434 /*--------------------------------
435 ** Register: CTRL_REG2
436 ** Enum: MAG3110_CTRL_REG2
437 ** --
438 ** Offset : 0x11 - Control Register 2: Correction, Reset.
439 ** ------------------------------*/
440 typedef union {
441  struct {
442  uint8_t _reserved_ : 4;
443  uint8_t mag_rst : 1; /* - Magnetic Sensor Reset (One-Shot) Bit. */
444 
445  uint8_t raw : 1; /* - Data output correction Bit. */
446 
447  uint8_t _reserved_1 : 1;
448  uint8_t auto_msrt_en : 1; /* - Automatic Magnetic Sensor Reset Bit. */
449 
450  } b;
451  uint8_t w;
453 
454 
455 /*
456 ** CTRL_REG2 - Bit field mask definitions
457 */
458 #define MAG3110_CTRL_REG2_MAG_RST_MASK ((uint8_t) 0x10)
459 #define MAG3110_CTRL_REG2_MAG_RST_SHIFT ((uint8_t) 4)
460 
461 #define MAG3110_CTRL_REG2_RAW_MASK ((uint8_t) 0x20)
462 #define MAG3110_CTRL_REG2_RAW_SHIFT ((uint8_t) 5)
463 
464 #define MAG3110_CTRL_REG2_AUTO_MSRT_EN_MASK ((uint8_t) 0x80)
465 #define MAG3110_CTRL_REG2_AUTO_MSRT_EN_SHIFT ((uint8_t) 7)
466 
467 
468 /*
469 ** CTRL_REG2 - Bit field value definitions
470 */
471 #define MAG3110_CTRL_REG2_MAG_RST_EN ((uint8_t) 0x10) /* - Reset cycle initiate or Reset cycle busy/active. */
472 #define MAG3110_CTRL_REG2_RAW_NORMAL ((uint8_t) 0x00) /* - The data values are corrected by the user offset */
473  /* register values. */
474 #define MAG3110_CTRL_REG2_RAW_RAW ((uint8_t) 0x20) /* - The data values are not corrected by the user */
475  /* offset register values. */
476 #define MAG3110_CTRL_REG2_AUTO_MSRT_EN_DIS ((uint8_t) 0x00) /* - Automatic magnetic sensor resets disabled. */
477 #define MAG3110_CTRL_REG2_AUTO_MSRT_EN_EN ((uint8_t) 0x80) /* - Automatic magnetic sensor resets enabled. */
478 /*------------------------------*/
479 
480 
481 
482 #endif /* MAG3110_H_ */
uint8_t _reserved_
Definition: mag3110.h:297
uint8_t MAG3110_OUT_Z_MSB_t
Definition: mag3110.h:184
uint8_t MAG3110_OUT_Y_LSB_t
Definition: mag3110.h:175
uint8_t _reserved_1
Definition: mag3110.h:447
uint8_t off_x_lsb
Definition: mag3110.h:261
uint8_t auto_msrt_en
Definition: mag3110.h:448
uint8_t off_z_lsb
Definition: mag3110.h:335
uint8_t MAG3110_DIE_TEMP_t
Definition: mag3110.h:360
uint8_t MAG3110_WHO_AM_I_t
Definition: mag3110.h:204
uint8_t MAG3110_OUT_Z_LSB_t
Definition: mag3110.h:194
uint8_t MAG3110_OFF_X_MSB_t
Definition: mag3110.h:248
uint8_t MAG3110_OUT_X_MSB_t
Definition: mag3110.h:148
uint8_t MAG3110_OFF_Z_MSB_t
Definition: mag3110.h:322
uint8_t MAG3110_OUT_Y_MSB_t
Definition: mag3110.h:166
uint8_t MAG3110_OUT_X_LSB_t
Definition: mag3110.h:157
uint8_t sysmod
Definition: mag3110.h:217
uint8_t off_y_lsb
Definition: mag3110.h:298
uint8_t _reserved_
Definition: mag3110.h:260
uint8_t _reserved_
Definition: mag3110.h:334
uint8_t _reserved_
Definition: mag3110.h:442
uint8_t MAG3110_OFF_Y_MSB_t
Definition: mag3110.h:285