Convert code to use u{8,16,32,64}_t and s{8,16,32,64}_t instead of C99
integer types.
Jira: ZEP-2051
Change-Id: I08c682bfc0b80dfa88de859e90a011bcd2db2762
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
102 lines
2.4 KiB
C
102 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file main.c - DesignWare AIO/Comparator demo on Arduino 101
|
|
*
|
|
* This is used to demo the DesignWare AIO/Comparator. The voltage input
|
|
* pin is analog in A0 on circuit board, which maps to AIN[10] on chip.
|
|
*
|
|
* The comparison is using the internal 3.3V as reference voltage,
|
|
* so it needs a higher voltage to trigger comparator.
|
|
*
|
|
* To test:
|
|
* 1. Connect the A0 pin to ground via a resistor. Any larger than
|
|
* 1k Ohm would be fine. This is to avoid floating pin.
|
|
* 2. Turn on the device.
|
|
* 3. Wait for device to boot, until "app started" line appeared.
|
|
* 4. Connect a voltage source higher than 3.3V (the 5V line would work).
|
|
* The line "*** A0, AIN[10] triggered rising." should appear.
|
|
* 5. Remove the voltage source.
|
|
* The line "*** A0, AIN[10] triggered falling." should appear.
|
|
*/
|
|
|
|
#include <zephyr.h>
|
|
#include <zephyr/types.h>
|
|
#include <stdio.h>
|
|
#include <device.h>
|
|
#include <aio_comparator.h>
|
|
|
|
/* specify delay between greetings (in ms) */
|
|
#define SLEEPTIME 5000
|
|
|
|
struct cb_data_t {
|
|
u8_t ain_idx;
|
|
enum aio_cmp_ref ref;
|
|
enum aio_cmp_polarity pol;
|
|
char name[50];
|
|
};
|
|
|
|
static struct cb_data_t cb_data = {
|
|
.ain_idx = 10,
|
|
.ref = AIO_CMP_REF_A,
|
|
.pol = AIO_CMP_POL_RISE,
|
|
.name = "A0, AIN[10]",
|
|
};
|
|
|
|
static void cb(void *param)
|
|
{
|
|
struct device *aio_cmp_dev;
|
|
struct cb_data_t *p = (struct cb_data_t *)param;
|
|
|
|
aio_cmp_dev = device_get_binding(CONFIG_AIO_COMPARATOR_0_NAME);
|
|
|
|
printf("*** %s triggered %s.\n", p->name,
|
|
(p->pol == AIO_CMP_POL_RISE) ? "rising" : "falling");
|
|
|
|
if (p->pol == AIO_CMP_POL_RISE) {
|
|
p->pol = AIO_CMP_POL_FALL;
|
|
} else {
|
|
p->pol = AIO_CMP_POL_RISE;
|
|
}
|
|
|
|
aio_cmp_configure(aio_cmp_dev, p->ain_idx, p->pol, p->ref, cb, p);
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
struct device *aio_cmp_dev;
|
|
int i, ret;
|
|
int cnt = 0;
|
|
|
|
aio_cmp_dev = device_get_binding(CONFIG_AIO_COMPARATOR_0_NAME);
|
|
if (!aio_cmp_dev) {
|
|
printf("AIO device driver not found\n");
|
|
return;
|
|
}
|
|
|
|
printf("===== app started ========\n");
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
/* REF_A is to use AREF for reference */
|
|
ret = aio_cmp_configure(aio_cmp_dev, cb_data.ain_idx,
|
|
cb_data.pol, cb_data.ref,
|
|
cb, &cb_data);
|
|
if (ret) {
|
|
printf("ERROR registering callback for %s (%d)\n",
|
|
cb_data.name, ret);
|
|
}
|
|
}
|
|
|
|
while (1) {
|
|
printf("... waiting for event! (%d)\n", ++cnt);
|
|
|
|
/* wait a while */
|
|
k_sleep(SLEEPTIME);
|
|
}
|
|
}
|
|
|