mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
/*
|
|
* Copyright (C) 2017 Gilles DOFFE <gdoffe@gmail.com>
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @ingroup tests
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief Test for low-level QDEC drivers
|
|
*
|
|
* This test initializes all declared QDEC devices.
|
|
* It displays QDEC counters value each second.
|
|
*
|
|
* @author Gilles DOFFE <gdoffe@gmail.com>
|
|
*
|
|
* @}
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "periph/qdec.h"
|
|
#include "xtimer.h"
|
|
|
|
static void handler(void *arg)
|
|
{
|
|
qdec_t qdec = (qdec_t)(uintptr_t)arg;
|
|
printf("QDEC %u counter overflow : reset counter\n", qdec);
|
|
qdec_read_and_reset(QDEC_DEV(qdec));
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
unsigned i;
|
|
int32_t value;
|
|
puts("Welcome into Quadrature Decoder (QDEC) test program.");
|
|
puts("This program will count pulses on all available QDEC channels");
|
|
puts("Written for nucleo-f401re, you have to plug signals A and B as follow :");
|
|
puts(" QDEC0 : signal A on PA6 and signal B on PA7");
|
|
puts(" QDEC1 : signal A on PB6 and signal B on PB7");
|
|
puts("Quadrature decoding mode is set to X4 : counting on all edges on both signals");
|
|
|
|
for (i = 0; i < QDEC_NUMOF; i++) {
|
|
int32_t error = qdec_init(QDEC_DEV(i), QDEC_X4, handler, (void *)(uintptr_t)i);
|
|
if (error) {
|
|
fprintf(stderr,"Not supported mode !\n");
|
|
return error;
|
|
}
|
|
}
|
|
|
|
while (1) {
|
|
for (i = 0; i < QDEC_NUMOF; i++) {
|
|
value = qdec_read_and_reset(QDEC_DEV(i));
|
|
printf("QDEC %lu = %ld\n", (unsigned long int)i, (long int)value);
|
|
}
|
|
xtimer_sleep(1);
|
|
}
|
|
|
|
return 0;
|
|
}
|