LibDriver BMM150
Loading...
Searching...
No Matches
driver_bmm150_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static bmm150_handle_t gs_handle;
40static volatile uint8_t gs_flag;
41
47static void a_receive_callback(uint8_t type)
48{
49 switch (type)
50 {
52 {
53 break;
54 }
56 {
57 break;
58 }
60 {
61 bmm150_interface_debug_print("bmm150: irq high threshold z.\n");
62 gs_flag = 1;
63
64 break;
65 }
67 {
68 bmm150_interface_debug_print("bmm150: irq high threshold y.\n");
69 gs_flag = 1;
70
71 break;
72 }
74 {
75 bmm150_interface_debug_print("bmm150: irq high threshold x.\n");
76 gs_flag = 1;
77
78 break;
79 }
81 {
82 bmm150_interface_debug_print("bmm150: irq low threshold z.\n");
83 gs_flag = 1;
84
85 break;
86 }
88 {
89 bmm150_interface_debug_print("bmm150: irq low threshold y.\n");
90 gs_flag = 1;
91
92 break;
93 }
95 {
96 bmm150_interface_debug_print("bmm150: irq low threshold x.\n");
97 gs_flag = 1;
98
99 break;
100 }
101 default :
102 {
103 bmm150_interface_debug_print("bmm150: unknown code.\n");
104
105 break;
106 }
107 }
108}
109
118{
119 if (bmm150_irq_handler(&gs_handle) != 0)
120 {
121 return 1;
122 }
123
124 return 0;
125}
126
140 float low_threshold_ut, float high_threshold_ut, uint32_t times)
141{
142 uint8_t res;
143 int8_t reg;
144 uint32_t i;
145 bmm150_bool_t enable;
146 bmm150_info_t info;
147
148 /* link interface function */
160 DRIVER_BMM150_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
161
162 /* get information */
163 res = bmm150_info(&info);
164 if (res != 0)
165 {
166 bmm150_interface_debug_print("bmm150: get info failed.\n");
167
168 return 1;
169 }
170 else
171 {
172 /* print chip info */
173 bmm150_interface_debug_print("bmm150: chip is %s.\n", info.chip_name);
174 bmm150_interface_debug_print("bmm150: manufacturer is %s.\n", info.manufacturer_name);
175 bmm150_interface_debug_print("bmm150: interface is %s.\n", info.interface);
176 bmm150_interface_debug_print("bmm150: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
177 bmm150_interface_debug_print("bmm150: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
178 bmm150_interface_debug_print("bmm150: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
179 bmm150_interface_debug_print("bmm150: max current is %0.2fmA.\n", info.max_current_ma);
180 bmm150_interface_debug_print("bmm150: max temperature is %0.1fC.\n", info.temperature_max);
181 bmm150_interface_debug_print("bmm150: min temperature is %0.1fC.\n", info.temperature_min);
182 }
183
184 /* start interrupt test */
185 bmm150_interface_debug_print("bmm150: start interrupt test.\n");
186
187 /* set the interface */
188 res = bmm150_set_interface(&gs_handle, interface);
189 if (res != 0)
190 {
191 bmm150_interface_debug_print("bmm150: set interface failed.\n");
192
193 return 1;
194 }
195
196 /* set the address pin */
197 res = bmm150_set_addr_pin(&gs_handle, addr_pin);
198 if (res != 0)
199 {
200 bmm150_interface_debug_print("bmm150: set addr pin failed.\n");
201
202 return 1;
203 }
204
205 /* init bmm150 */
206 res = bmm150_init(&gs_handle);
207 if (res != 0)
208 {
209 bmm150_interface_debug_print("bmm150: init failed.\n");
210
211 return 1;
212 }
213
214 /* power on */
215 res = bmm150_set_power_on(&gs_handle, BMM150_BOOL_TRUE);
216 if (res != 0)
217 {
218 bmm150_interface_debug_print("bmm150: set power on failed.\n");
219 (void)bmm150_deinit(&gs_handle);
220
221 return 1;
222 }
223
224 /* set advanced self test normal mode */
226 if (res != 0)
227 {
228 bmm150_interface_debug_print("bmm150: set advanced self test failed.\n");
229 (void)bmm150_deinit(&gs_handle);
230
231 return 1;
232 }
233
234 /* disable self test */
235 res = bmm150_set_self_test(&gs_handle, BMM150_BOOL_FALSE);
236 if (res != 0)
237 {
238 bmm150_interface_debug_print("bmm150: set self test failed.\n");
239 (void)bmm150_deinit(&gs_handle);
240
241 return 1;
242 }
243
244 /* disable data overrun */
246 if (res != 0)
247 {
248 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
249 (void)bmm150_deinit(&gs_handle);
250
251 return 1;
252 }
253
254 /* disable overflow */
256 if (res != 0)
257 {
258 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
259 (void)bmm150_deinit(&gs_handle);
260
261 return 1;
262 }
263
264 /* enable high threshold z */
266 if (res != 0)
267 {
268 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
269 (void)bmm150_deinit(&gs_handle);
270
271 return 1;
272 }
273
274 /* enable high threshold y */
276 if (res != 0)
277 {
278 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
279 (void)bmm150_deinit(&gs_handle);
280
281 return 1;
282 }
283
284 /* enable high threshold x */
286 if (res != 0)
287 {
288 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
289 (void)bmm150_deinit(&gs_handle);
290
291 return 1;
292 }
293
294 /* enable low threshold z */
296 if (res != 0)
297 {
298 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
299 (void)bmm150_deinit(&gs_handle);
300
301 return 1;
302 }
303
304 /* enable low threshold y */
306 if (res != 0)
307 {
308 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
309 (void)bmm150_deinit(&gs_handle);
310
311 return 1;
312 }
313
314 /* enable low threshold x */
316 if (res != 0)
317 {
318 bmm150_interface_debug_print("bmm150: set interrupt failed.\n");
319 (void)bmm150_deinit(&gs_handle);
320
321 return 1;
322 }
323
324 /* enable data ready pin */
326 if (res != 0)
327 {
328 bmm150_interface_debug_print("bmm150: set data ready pin failed.\n");
329 (void)bmm150_deinit(&gs_handle);
330
331 return 1;
332 }
333
334 /* enable interrupt pin */
336 if (res != 0)
337 {
338 bmm150_interface_debug_print("bmm150: set interrupt pin failed.\n");
339 (void)bmm150_deinit(&gs_handle);
340
341 return 1;
342 }
343
344 /* set data ready pin polarity low */
346 if (res != 0)
347 {
348 bmm150_interface_debug_print("bmm150: set data ready pin polarity failed.\n");
349 (void)bmm150_deinit(&gs_handle);
350
351 return 1;
352 }
353
354 /* enable interrupt latch */
356 if (res != 0)
357 {
358 bmm150_interface_debug_print("bmm150: set interrupt latch failed.\n");
359 (void)bmm150_deinit(&gs_handle);
360
361 return 1;
362 }
363
364 /* set interrupt pin polarity low */
366 if (res != 0)
367 {
368 bmm150_interface_debug_print("bmm150: set interrupt pin polarity failed.\n");
369 (void)bmm150_deinit(&gs_handle);
370
371 return 1;
372 }
373
374 /* convert low threshold */
375 res = bmm150_interrupt_threshold_convert_to_register(&gs_handle, low_threshold_ut, &reg);
376 if (res != 0)
377 {
378 bmm150_interface_debug_print("bmm150: interrupt threshold convert to register failed.\n");
379 (void)bmm150_deinit(&gs_handle);
380
381 return 1;
382 }
383
384 /* set low threshold */
385 res = bmm150_set_low_threshold(&gs_handle, reg);
386 if (res != 0)
387 {
388 bmm150_interface_debug_print("bmm150: set low threshold failed.\n");
389 (void)bmm150_deinit(&gs_handle);
390
391 return 1;
392 }
393
394 /* convert high threshold */
395 res = bmm150_interrupt_threshold_convert_to_register(&gs_handle, high_threshold_ut, &reg);
396 if (res != 0)
397 {
398 bmm150_interface_debug_print("bmm150: interrupt threshold convert to register failed.\n");
399 (void)bmm150_deinit(&gs_handle);
400
401 return 1;
402 }
403
404 /* set high threshold */
405 res = bmm150_set_high_threshold(&gs_handle, reg);
406 if (res != 0)
407 {
408 bmm150_interface_debug_print("bmm150: set high threshold failed.\n");
409 (void)bmm150_deinit(&gs_handle);
410
411 return 1;
412 }
413
414 /* enable channel z */
415 res = bmm150_set_channel_z(&gs_handle, BMM150_BOOL_TRUE);
416 if (res != 0)
417 {
418 bmm150_interface_debug_print("bmm150: set channel z failed.\n");
419 (void)bmm150_deinit(&gs_handle);
420
421 return 1;
422 }
423
424 /* enable channel y */
425 res = bmm150_set_channel_y(&gs_handle, BMM150_BOOL_TRUE);
426 if (res != 0)
427 {
428 bmm150_interface_debug_print("bmm150: set channel y failed.\n");
429 (void)bmm150_deinit(&gs_handle);
430
431 return 1;
432 }
433
434 /* enable channel x */
435 res = bmm150_set_channel_x(&gs_handle, BMM150_BOOL_TRUE);
436 if (res != 0)
437 {
438 bmm150_interface_debug_print("bmm150: set channel x failed.\n");
439 (void)bmm150_deinit(&gs_handle);
440
441 return 1;
442 }
443
444 /* set repxy number */
445 res = bmm150_set_repxy_number(&gs_handle, 9);
446 if (res != 0)
447 {
448 bmm150_interface_debug_print("bmm150: set repxy number failed.\n");
449 (void)bmm150_deinit(&gs_handle);
450
451 return 1;
452 }
453
454 /* set repz number */
455 res = bmm150_set_repz_number(&gs_handle, 15);
456 if (res != 0)
457 {
458 bmm150_interface_debug_print("bmm150: set repz number failed.\n");
459 (void)bmm150_deinit(&gs_handle);
460
461 return 1;
462 }
463
464 /* set data rate 2hz */
466 if (res != 0)
467 {
468 bmm150_interface_debug_print("bmm150: set data rate failed.\n");
469 (void)bmm150_deinit(&gs_handle);
470
471 return 1;
472 }
473
474 /* set normal mode */
475 res = bmm150_set_mode(&gs_handle, BMM150_MODE_NORMAL);
476 if (res != 0)
477 {
478 bmm150_interface_debug_print("bmm150: set mode failed.\n");
479 (void)bmm150_deinit(&gs_handle);
480
481 return 1;
482 }
483
484 /* clear interrupt status */
486 if (res != 0)
487 {
488 bmm150_interface_debug_print("bmm150: get interrupt status failed.\n");
489 (void)bmm150_deinit(&gs_handle);
490
491 return 1;
492 }
493
494 gs_flag = 0;
495 for (i = 0; i < times; i++)
496 {
497 int16_t raw[3];
498 float ut[3];
499
500 /* delay 1000ms */
502
503 if (gs_flag != 0)
504 {
505 bmm150_interface_debug_print("bmm150: find interrupt.\n");
506
507 gs_flag = 0;
508 }
509
510 /* read data */
511 res = bmm150_read(&gs_handle, raw, ut);
512 if (res != 0)
513 {
514 bmm150_interface_debug_print("bmm150: read failed.\n");
515 (void)bmm150_deinit(&gs_handle);
516
517 return 1;
518 }
519
520 /* output */
521 bmm150_interface_debug_print("bmm150: x is %0.2fuT.\n", ut[0]);
522 bmm150_interface_debug_print("bmm150: y is %0.2fuT.\n", ut[1]);
523 bmm150_interface_debug_print("bmm150: z is %0.2fuT.\n", ut[2]);
524 }
525
526 /* finish interrupt test */
527 bmm150_interface_debug_print("bmm150: finish interrupt test.\n");
528 (void)bmm150_deinit(&gs_handle);
529
530 return 0;
531}
driver bmm150 interrupt test header file
uint8_t bmm150_deinit(bmm150_handle_t *handle)
close the chip
uint8_t bmm150_init(bmm150_handle_t *handle)
initialize the chip
uint8_t bmm150_set_data_ready_pin(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable data ready pin
uint8_t bmm150_set_repz_number(bmm150_handle_t *handle, uint8_t number)
set repz number
uint8_t bmm150_set_interrupt_pin(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable interrupt pin
uint8_t bmm150_set_addr_pin(bmm150_handle_t *handle, bmm150_address_t addr_pin)
set the iic address pin
uint8_t bmm150_set_advanced_self_test(bmm150_handle_t *handle, bmm150_advanced_self_test_t test)
set advanced self test
uint8_t bmm150_set_data_ready_pin_polarity(bmm150_handle_t *handle, bmm150_data_ready_pin_polarity_t polarity)
set data ready pin polarity
uint8_t bmm150_set_interrupt_pin_polarity(bmm150_handle_t *handle, bmm150_interrupt_pin_polarity_t polarity)
set interrupt pin polarity
uint8_t bmm150_set_interface(bmm150_handle_t *handle, bmm150_interface_t interface)
set the chip interface
bmm150_interface_t
bmm150 interface enumeration definition
uint8_t bmm150_set_high_threshold(bmm150_handle_t *handle, int8_t threshold)
set high threshold
uint8_t bmm150_irq_handler(bmm150_handle_t *handle)
irq handler
uint8_t bmm150_set_channel_y(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable channel y
bmm150_bool_t
bmm150 bool enumeration definition
uint8_t bmm150_info(bmm150_info_t *info)
get chip's information
uint8_t bmm150_set_mode(bmm150_handle_t *handle, bmm150_mode_t mode)
set mode
uint8_t bmm150_set_power_on(bmm150_handle_t *handle, bmm150_bool_t enable)
set power on
uint8_t bmm150_set_low_threshold(bmm150_handle_t *handle, int8_t threshold)
set low threshold
uint8_t bmm150_get_interrupt_status(bmm150_handle_t *handle, bmm150_interrupt_status_t status, bmm150_bool_t *enable)
get interrupt status
struct bmm150_handle_s bmm150_handle_t
bmm150 handle structure definition
uint8_t bmm150_set_self_test(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable self test
uint8_t bmm150_set_interrupt_latch(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable interrupt latch
uint8_t bmm150_read(bmm150_handle_t *handle, int16_t raw[3], float ut[3])
read data
uint8_t bmm150_set_channel_z(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable channel z
uint8_t bmm150_set_repxy_number(bmm150_handle_t *handle, uint8_t number)
set repxy number
struct bmm150_info_s bmm150_info_t
bmm150 information structure definition
bmm150_address_t
bmm150 address enumeration definition
uint8_t bmm150_set_interrupt(bmm150_handle_t *handle, bmm150_interrupt_status_t status, bmm150_bool_t enable)
enable or disable interrupt
uint8_t bmm150_interrupt_threshold_convert_to_register(bmm150_handle_t *handle, float ut, int8_t *reg)
convert the interrupt threshold to the register raw data
uint8_t bmm150_set_data_rate(bmm150_handle_t *handle, bmm150_data_rate_t rate)
set data rate
uint8_t bmm150_set_channel_x(bmm150_handle_t *handle, bmm150_bool_t enable)
enable or disable channel x
@ BMM150_DATA_RATE_2HZ
@ BMM150_INTERRUPT_STATUS_HIGH_THRESHOLD_Z
@ BMM150_INTERRUPT_STATUS_LOW_THRESHOLD_Y
@ BMM150_INTERRUPT_STATUS_OVERFLOW
@ BMM150_INTERRUPT_STATUS_HIGH_THRESHOLD_Y
@ BMM150_INTERRUPT_STATUS_DATA_OVERRUN
@ BMM150_INTERRUPT_STATUS_LOW_THRESHOLD_X
@ BMM150_INTERRUPT_STATUS_HIGH_THRESHOLD_X
@ BMM150_INTERRUPT_STATUS_LOW_THRESHOLD_Z
@ BMM150_BOOL_FALSE
@ BMM150_BOOL_TRUE
@ BMM150_ADVANCED_SELF_TEST_NORMAL
@ BMM150_INTERRUPT_PIN_POLARITY_LOW
@ BMM150_MODE_NORMAL
@ BMM150_DATA_READY_PIN_POLARITY_LOW
uint8_t bmm150_interface_spi_init(void)
interface spi bus init
uint8_t bmm150_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t bmm150_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t bmm150_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t bmm150_interface_iic_init(void)
interface iic bus init
uint8_t bmm150_interface_spi_deinit(void)
interface spi bus deinit
uint8_t bmm150_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t bmm150_interface_iic_deinit(void)
interface iic bus deinit
void bmm150_interface_debug_print(const char *const fmt,...)
interface print format data
void bmm150_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t bmm150_interrupt_test(bmm150_interface_t interface, bmm150_address_t addr_pin, float low_threshold_ut, float high_threshold_ut, uint32_t times)
interrupt test
uint8_t bmm150_interrupt_test_irq_handler(void)
interrupt test irq
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]