LibDriver ADXL362
Loading...
Searching...
No Matches
driver_adxl362_fifo_test.c
Go to the documentation of this file.
1
36
38
39static adxl362_handle_t gs_handle;
40static adxl362_frame_t gs_frame[512];
41volatile static uint8_t gs_flag = 0;
42
51{
52 if (adxl362_irq_handler(&gs_handle) != 0)
53 {
54 return 1;
55 }
56 else
57 {
58 return 0;
59 }
60}
61
67static void a_adxl362_interface_receive_callback(uint8_t type)
68{
69 switch (type)
70 {
72 {
73 adxl362_interface_debug_print("adxl362: irq seu error detect.\n");
74
75 break;
76 }
78 {
79 break;
80 }
82 {
83 adxl362_interface_debug_print("adxl362: irq inactivity.\n");
84
85 break;
86 }
88 {
89 adxl362_interface_debug_print("adxl362: irq activity.\n");
90
91 break;
92 }
94 {
95 uint8_t res;
96 uint16_t frame_len;
97
98 /* total 512 */
99 frame_len = 512;
100
101 /* read fifo */
102 res = adxl362_read_fifo(&gs_handle, gs_frame, &frame_len);
103 if (res != 0)
104 {
105 return;
106 }
107
108 /* flag happened */
109 gs_flag = 1;
110
111 /* output */
112 adxl362_interface_debug_print("adxl362: irq fifo overrun with %d.\n", frame_len);
113
114 break;
115 }
117 {
118 uint8_t res;
119 uint16_t i;
120 uint16_t frame_len;
121
122 /* total 512 */
123 frame_len = 512;
124
125 /* read fifo */
126 res = adxl362_read_fifo(&gs_handle, gs_frame, &frame_len);
127 if (res != 0)
128 {
129 return;
130 }
131
132 /* flag happened */
133 gs_flag = 1;
134
135 /* output */
136 adxl362_interface_debug_print("adxl362: irq fifo watermark with %d.\n", frame_len);
137
138 /* output */
139 for (i = 0; i < frame_len; i++)
140 {
141 if (gs_frame[i].type == ADXL362_FRAME_TYPE_X)
142 {
143 adxl362_interface_debug_print("adxl362: x axis is %0.2fg.\n", gs_frame[i].data);
144 }
145 else if (gs_frame[i].type == ADXL362_FRAME_TYPE_Y)
146 {
147 adxl362_interface_debug_print("adxl362: y axis is %0.2fg.\n", gs_frame[i].data);
148 }
149 else if (gs_frame[i].type == ADXL362_FRAME_TYPE_Z)
150 {
151 adxl362_interface_debug_print("adxl362: z axis is %0.2fg.\n", gs_frame[i].data);
152 }
153 else
154 {
155 adxl362_interface_debug_print("adxl362: temperature is %0.2fC.\n", gs_frame[i].data);
156 }
157 }
158
159 break;
160 }
162 {
163 break;
164 }
166 {
167 break;
168 }
169 default :
170 {
171 adxl362_interface_debug_print("adxl362: unknown code.\n");
172
173 break;
174 }
175 }
176}
177
186uint8_t adxl362_fifo_test(uint32_t times)
187{
188 uint8_t res;
189 uint8_t status;
190 uint32_t t;
191 adxl362_info_t info;
192
193 /* link interface function */
202 DRIVER_ADXL362_LINK_RECEIVE_CALLBACK(&gs_handle, a_adxl362_interface_receive_callback);
203
204 /* get information */
205 res = adxl362_info(&info);
206 if (res != 0)
207 {
208 adxl362_interface_debug_print("adxl362: get info failed.\n");
209
210 return 1;
211 }
212 else
213 {
214 /* print chip info */
215 adxl362_interface_debug_print("adxl362: chip is %s.\n", info.chip_name);
216 adxl362_interface_debug_print("adxl362: manufacturer is %s.\n", info.manufacturer_name);
217 adxl362_interface_debug_print("adxl362: interface is %s.\n", info.interface);
218 adxl362_interface_debug_print("adxl362: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
219 adxl362_interface_debug_print("adxl362: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
220 adxl362_interface_debug_print("adxl362: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
221 adxl362_interface_debug_print("adxl362: max current is %0.2fmA.\n", info.max_current_ma);
222 adxl362_interface_debug_print("adxl362: max temperature is %0.1fC.\n", info.temperature_max);
223 adxl362_interface_debug_print("adxl362: min temperature is %0.1fC.\n", info.temperature_min);
224 }
225
226 /* start fifo test */
227 adxl362_interface_debug_print("adxl362: start fifo test.\n");
228
229 /* init the adxl362 */
230 res = adxl362_init(&gs_handle);
231 if (res != 0)
232 {
233 adxl362_interface_debug_print("adxl362: init failed.\n");
234
235 return 1;
236 }
237
238 /* enable fifo temperature */
240 if (res != 0)
241 {
242 adxl362_interface_debug_print("adxl362: set fifo temperature failed.\n");
243 (void)adxl362_deinit(&gs_handle);
244
245 return 1;
246 }
247
248 /* fifo oldest saved mode */
250 if (res != 0)
251 {
252 adxl362_interface_debug_print("adxl362: set fifo mode failed.\n");
253 (void)adxl362_deinit(&gs_handle);
254
255 return 1;
256 }
257
258 /* set fifo sample 96 */
259 res = adxl362_set_fifo_sample(&gs_handle, 96);
260 if (res != 0)
261 {
262 adxl362_interface_debug_print("adxl362: set fifo sample failed.\n");
263 (void)adxl362_deinit(&gs_handle);
264
265 return 1;
266 }
267
268 /* set interrupt pin1 active level low */
270 if (res != 0)
271 {
272 adxl362_interface_debug_print("adxl362: set interrupt pin1 active level failed.\n");
273 (void)adxl362_deinit(&gs_handle);
274
275 return 1;
276 }
277
278 /* disable awake map */
280 if (res != 0)
281 {
282 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
283 (void)adxl362_deinit(&gs_handle);
284
285 return 1;
286 }
287
288 /* disable inact map */
290 if (res != 0)
291 {
292 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
293 (void)adxl362_deinit(&gs_handle);
294
295 return 1;
296 }
297
298 /* disable act map */
300 if (res != 0)
301 {
302 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
303 (void)adxl362_deinit(&gs_handle);
304
305 return 1;
306 }
307
308 /* enable fifo overrun map */
310 if (res != 0)
311 {
312 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
313 (void)adxl362_deinit(&gs_handle);
314
315 return 1;
316 }
317
318 /* enable fifo watermark map */
320 if (res != 0)
321 {
322 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
323 (void)adxl362_deinit(&gs_handle);
324
325 return 1;
326 }
327
328 /* disable fifo ready map */
330 if (res != 0)
331 {
332 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
333 (void)adxl362_deinit(&gs_handle);
334
335 return 1;
336 }
337
338 /* disable data ready map */
340 if (res != 0)
341 {
342 adxl362_interface_debug_print("adxl362: set interrupt pin1 map failed.\n");
343 (void)adxl362_deinit(&gs_handle);
344
345 return 1;
346 }
347
348 /* set interrupt pin2 active level low */
350 if (res != 0)
351 {
352 adxl362_interface_debug_print("adxl362: set interrupt pin2 active level failed.\n");
353 (void)adxl362_deinit(&gs_handle);
354
355 return 1;
356 }
357
358 /* disable awake map */
360 if (res != 0)
361 {
362 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
363 (void)adxl362_deinit(&gs_handle);
364
365 return 1;
366 }
367
368 /* disable inact map */
370 if (res != 0)
371 {
372 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
373 (void)adxl362_deinit(&gs_handle);
374
375 return 1;
376 }
377
378 /* disable act map */
380 if (res != 0)
381 {
382 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
383 (void)adxl362_deinit(&gs_handle);
384
385 return 1;
386 }
387
388 /* disable fifo overrun map */
390 if (res != 0)
391 {
392 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
393 (void)adxl362_deinit(&gs_handle);
394
395 return 1;
396 }
397
398 /* disable fifo watermark map */
400 if (res != 0)
401 {
402 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
403 (void)adxl362_deinit(&gs_handle);
404
405 return 1;
406 }
407
408 /* disable fifo ready map */
410 if (res != 0)
411 {
412 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
413 (void)adxl362_deinit(&gs_handle);
414
415 return 1;
416 }
417
418 /* disable data ready map */
420 if (res != 0)
421 {
422 adxl362_interface_debug_print("adxl362: set interrupt pin2 map failed.\n");
423 (void)adxl362_deinit(&gs_handle);
424
425 return 1;
426 }
427
428 /* odr 1/2 */
430 if (res != 0)
431 {
432 adxl362_interface_debug_print("adxl362: set bandwidth failed.\n");
433 (void)adxl362_deinit(&gs_handle);
434
435 return 1;
436 }
437
438 /* normal mode */
440 if (res != 0)
441 {
442 adxl362_interface_debug_print("adxl362: set noise mode failed.\n");
443 (void)adxl362_deinit(&gs_handle);
444
445 return 1;
446 }
447
448 /* disable wake up */
449 res = adxl362_set_wake_up(&gs_handle, ADXL362_BOOL_FALSE);
450 if (res != 0)
451 {
452 adxl362_interface_debug_print("adxl362: set wake up failed.\n");
453 (void)adxl362_deinit(&gs_handle);
454
455 return 1;
456 }
457
458 /* disable auto sleep */
460 if (res != 0)
461 {
462 adxl362_interface_debug_print("adxl362: set auto sleep failed.\n");
463 (void)adxl362_deinit(&gs_handle);
464
465 return 1;
466 }
467
468 /* disable interrupt pin2 as external sampling trigger */
470 if (res != 0)
471 {
472 adxl362_interface_debug_print("adxl362: set interrupt pin2 as external sampling trigger failed.\n");
473 (void)adxl362_deinit(&gs_handle);
474
475 return 1;
476 }
477
478 /* disable interrupt pin1 as external clock */
480 if (res != 0)
481 {
482 adxl362_interface_debug_print("adxl362: set interrupt pin1 as external clock failed.\n");
483 (void)adxl362_deinit(&gs_handle);
484
485 return 1;
486 }
487
488 /* set activity threshold 0x0000 */
489 res = adxl362_set_activity_threshold(&gs_handle, 0x0000);
490 if (res != 0)
491 {
492 adxl362_interface_debug_print("adxl362: set activity threshold failed.\n");
493 (void)adxl362_deinit(&gs_handle);
494
495 return 1;
496 }
497
498 /* set activity time 0x00 */
499 res = adxl362_set_activity_time(&gs_handle, 0x00);
500 if (res != 0)
501 {
502 adxl362_interface_debug_print("adxl362: set activity time failed.\n");
503 (void)adxl362_deinit(&gs_handle);
504
505 return 1;
506 }
507
508 /* set inactivity threshold 0x0000 */
509 res = adxl362_set_inactivity_threshold(&gs_handle, 0x0000);
510 if (res != 0)
511 {
512 adxl362_interface_debug_print("adxl362: set inactivity threshold failed.\n");
513 (void)adxl362_deinit(&gs_handle);
514
515 return 1;
516 }
517
518 /* set inactivity time 0x0000 */
519 res = adxl362_set_inactivity_time(&gs_handle, 0x0000);
520 if (res != 0)
521 {
522 adxl362_interface_debug_print("adxl362: set inactivity time failed.\n");
523 (void)adxl362_deinit(&gs_handle);
524
525 return 1;
526 }
527
528 /* set detect link mode */
530 if (res != 0)
531 {
532 adxl362_interface_debug_print("adxl362: set detect mode failed.\n");
533 (void)adxl362_deinit(&gs_handle);
534
535 return 1;
536 }
537
538 /* set inactivity detect trigger */
540 if (res != 0)
541 {
542 adxl362_interface_debug_print("adxl362: set inactivity detect trigger failed.\n");
543 (void)adxl362_deinit(&gs_handle);
544
545 return 1;
546 }
547
548 /* set activity detect trigger */
550 if (res != 0)
551 {
552 adxl362_interface_debug_print("adxl362: set activity detect trigger failed.\n");
553 (void)adxl362_deinit(&gs_handle);
554
555 return 1;
556 }
557
558 /* disable inactivity */
560 if (res != 0)
561 {
562 adxl362_interface_debug_print("adxl362: set inactivity failed.\n");
563 (void)adxl362_deinit(&gs_handle);
564
565 return 1;
566 }
567
568 /* disable activity */
569 res = adxl362_set_activity(&gs_handle, ADXL362_BOOL_FALSE);
570 if (res != 0)
571 {
572 adxl362_interface_debug_print("adxl362: set activity failed.\n");
573 (void)adxl362_deinit(&gs_handle);
574
575 return 1;
576 }
577
578 /* disable self test */
579 res = adxl362_set_self_test(&gs_handle, ADXL362_BOOL_FALSE);
580 if (res != 0)
581 {
582 adxl362_interface_debug_print("adxl362: set self test failed.\n");
583 (void)adxl362_deinit(&gs_handle);
584
585 return 1;
586 }
587
588 /* set 12.5Hz */
589 res = adxl362_set_odr(&gs_handle, ADXL362_ODR_12P5HZ);
590 if (res != 0)
591 {
592 adxl362_interface_debug_print("adxl362: set odr failed.\n");
593 (void)adxl362_deinit(&gs_handle);
594
595 return 1;
596 }
597
598 /* set 2g */
599 res = adxl362_set_range(&gs_handle, ADXL362_RANGE_2G);
600 if (res != 0)
601 {
602 adxl362_interface_debug_print("adxl362: set range failed.\n");
603 (void)adxl362_deinit(&gs_handle);
604
605 return 1;
606 }
607
608 /* get status */
609 res = adxl362_get_status(&gs_handle, &status);
610 if (res != 0)
611 {
612 adxl362_interface_debug_print("adxl362: get status failed.\n");
613 (void)adxl362_deinit(&gs_handle);
614
615 return 1;
616 }
617
618 /* start measurement */
620 if (res != 0)
621 {
622 adxl362_interface_debug_print("adxl362: set mode failed.\n");
623 (void)adxl362_deinit(&gs_handle);
624
625 return 1;
626 }
627
628 /* flag 0 */
629 gs_flag = 0;
630
631 /* set the times */
632 t = times;
633
634 /* loop */
635 while (t != 0)
636 {
637 /* check the flag */
638 if (gs_flag != 0)
639 {
640 /* t-- */
641 t--;
642
643 /* restart */
644 gs_flag = 0;
645 }
646 }
647
648 /* finish fifo test */
649 adxl362_interface_debug_print("adxl362: finish fifo test.\n");
650 (void)adxl362_deinit(&gs_handle);
651
652 return 0;
653}
driver adxl362 fifo test header file
uint8_t adxl362_set_range(adxl362_handle_t *handle, adxl362_range_t range)
set the measurement range
uint8_t adxl362_set_interrupt_pin2_map(adxl362_handle_t *handle, adxl362_interrupt_map_t map, adxl362_bool_t enable)
set the interrupt pin2 map
uint8_t adxl362_set_inactivity_detect_trigger(adxl362_handle_t *handle, adxl362_detect_trigger_t trigger)
set the inactivity detect trigger mode
uint8_t adxl362_set_fifo_sample(adxl362_handle_t *handle, uint16_t sample)
set the fifo sample
uint8_t adxl362_set_inactivity_time(adxl362_handle_t *handle, uint16_t tim)
set the inactivity time
struct adxl362_info_s adxl362_info_t
adxl362 information structure definition
uint8_t adxl362_set_fifo_mode(adxl362_handle_t *handle, adxl362_fifo_mode_t mode)
set the fifo mode
uint8_t adxl362_info(adxl362_info_t *info)
get chip's information
uint8_t adxl362_set_self_test(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable the self test
uint8_t adxl362_init(adxl362_handle_t *handle)
initialize the chip
uint8_t adxl362_set_detect_mode(adxl362_handle_t *handle, adxl362_detect_mode_t mode)
set the detect mode
struct adxl362_frame_s adxl362_frame_t
adxl362 frame structure definition
uint8_t adxl362_set_interrupt_pin2_active_level(adxl362_handle_t *handle, adxl362_interrupt_pin_level_t level)
set the interrupt pin2 active level
struct adxl362_handle_s adxl362_handle_t
adxl362 handle structure definition
uint8_t adxl362_set_wake_up(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable chip wake up
uint8_t adxl362_set_inactivity_threshold(adxl362_handle_t *handle, uint16_t threshold)
set the inactivity threshold
uint8_t adxl362_set_interrupt_pin1_map(adxl362_handle_t *handle, adxl362_interrupt_map_t map, adxl362_bool_t enable)
set the interrupt pin1 map
uint8_t adxl362_set_noise_mode(adxl362_handle_t *handle, adxl362_noise_mode_t mode)
set the noise mode
uint8_t adxl362_set_activity_threshold(adxl362_handle_t *handle, uint16_t threshold)
set the activity threshold
uint8_t adxl362_set_activity_time(adxl362_handle_t *handle, uint8_t tim)
set the activity time
uint8_t adxl362_read_fifo(adxl362_handle_t *handle, adxl362_frame_t *frame, uint16_t *frame_len)
read data from the fifo
uint8_t adxl362_set_interrupt_pin1_active_level(adxl362_handle_t *handle, adxl362_interrupt_pin_level_t level)
set the interrupt pin1 active level
uint8_t adxl362_set_fifo_temperature(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable saving temperature data to fifo
uint8_t adxl362_set_activity_detect_trigger(adxl362_handle_t *handle, adxl362_detect_trigger_t trigger)
set the activity detect trigger mode
uint8_t adxl362_set_interrupt_pin1_as_external_clock(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable interrupt pin1 as the external clock
uint8_t adxl362_irq_handler(adxl362_handle_t *handle)
irq handler
uint8_t adxl362_set_mode(adxl362_handle_t *handle, adxl362_mode_t mode)
set the chip mode
uint8_t adxl362_set_inactivity(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable inactivity
uint8_t adxl362_set_interrupt_pin2_as_external_sampling_trigger(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable interrupt pin2 as the external sampling trigger
uint8_t adxl362_get_status(adxl362_handle_t *handle, uint8_t *status)
get the chip status
uint8_t adxl362_set_activity(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable activity
uint8_t adxl362_set_auto_sleep(adxl362_handle_t *handle, adxl362_bool_t enable)
enable or disable auto sleep
uint8_t adxl362_set_bandwidth(adxl362_handle_t *handle, adxl362_bandwidth_t bandwidth)
set the filter bandwidth
uint8_t adxl362_deinit(adxl362_handle_t *handle)
close the chip
uint8_t adxl362_set_odr(adxl362_handle_t *handle, adxl362_odr_t odr)
set the output data rate
@ ADXL362_DETECT_MODE_LINK
@ ADXL362_FIFO_MODE_OLDEST_SAVED
@ ADXL362_BANDWIDTH_ODR_DIV_2
@ ADXL362_ODR_12P5HZ
@ ADXL362_INTERRUPT_MAP_FIFO_READY
@ ADXL362_INTERRUPT_MAP_ACT
@ ADXL362_INTERRUPT_MAP_FIFO_OVERRUN
@ ADXL362_INTERRUPT_MAP_FIFO_WATERMARK
@ ADXL362_INTERRUPT_MAP_DATA_READY
@ ADXL362_INTERRUPT_MAP_AWAKE
@ ADXL362_INTERRUPT_MAP_INACT
@ ADXL362_MODE_MEASUREMENT
@ ADXL362_STATUS_DATA_READY
@ ADXL362_STATUS_FIFO_OVERRUN
@ ADXL362_STATUS_AWAKE
@ ADXL362_STATUS_INACT
@ ADXL362_STATUS_FIFO_READY
@ ADXL362_STATUS_ERR_USER_REGS
@ ADXL362_STATUS_ACT
@ ADXL362_STATUS_FIFO_WATERMARK
@ ADXL362_NOISE_MODE_NORMAL
@ ADXL362_BOOL_FALSE
@ ADXL362_BOOL_TRUE
@ ADXL362_RANGE_2G
@ ADXL362_DETECT_TRIGGER_REFERENCED
@ ADXL362_INTERRUPT_PIN_LOW
@ ADXL362_FRAME_TYPE_Z
@ ADXL362_FRAME_TYPE_X
@ ADXL362_FRAME_TYPE_Y
uint8_t adxl362_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t adxl362_interface_spi_deinit(void)
interface spi bus deinit
uint8_t adxl362_interface_spi_init(void)
interface spi bus init
void adxl362_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t adxl362_interface_spi_write_address16(uint16_t addr, uint8_t *buf, uint16_t len)
interface spi bus write
void adxl362_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t adxl362_interface_spi_read_address16(uint16_t addr, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t adxl362_fifo_test(uint32_t times)
fifo test
uint8_t adxl362_fifo_test_irq_handler(void)
fifo test irq
uint32_t driver_version
char manufacturer_name[32]