zephyr/samples/subsys/tracing/src/gpio_main.c
Alexander Lay d356403664 samples: tracing: update sample app for gpio tracing
Implement a sample app to perform basic GPIO tracing.

Signed-off-by: Alexander Lay <alexanderlay@tenstorrent.com>
Signed-off-by: Yang Xu <yangxu@tenstorrent.com>
2024-12-04 14:12:58 -05:00

70 lines
1.6 KiB
C

/*
* Copyright (c) 2024 Tenstorrent AI ULC
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/logging/log.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/gpio/gpio_emul.h>
/* size of stack area used by each thread */
#define STACKSIZE (2048)
/* scheduling priority used by each thread */
#define PRIORITY 7
void test_handler(const struct device *port, struct gpio_callback *cb, gpio_port_pins_t pins)
{
printk("Interrupt detected!\n");
}
void gpio_sample(void)
{
const struct device *dev = DEVICE_DT_GET(DT_NODELABEL(gpio_emul));
if (!device_is_ready(dev)) {
printk("%s: device not ready.\n", dev->name);
return;
}
/* Configure pin 0 as output and toggle */
gpio_pin_configure(dev, 0, GPIO_OUTPUT);
gpio_pin_set(dev, 0, 1);
gpio_pin_set(dev, 0, 0);
/* Configure pin 1 as input */
gpio_pin_configure(dev, 1, GPIO_INPUT);
/* Read pin 1 */
gpio_emul_input_set(dev, 1, 1);
gpio_pin_get(dev, 1);
gpio_emul_input_set(dev, 1, 0);
gpio_pin_get(dev, 1);
/* Setup pin 1 for interrupt */
gpio_pin_interrupt_configure(dev, 1, GPIO_INT_EDGE_RISING);
static struct gpio_callback gpio_cb;
gpio_init_callback(&gpio_cb, test_handler, BIT(1));
gpio_add_callback(dev, &gpio_cb);
/* Trigger interrupt */
gpio_emul_input_set(dev, 1, 1);
/* Remove interrupt */
gpio_remove_callback(dev, &gpio_cb);
}
static void gpio_thread(void *dummy1, void *dummy2, void *dummy3)
{
ARG_UNUSED(dummy1);
ARG_UNUSED(dummy2);
ARG_UNUSED(dummy3);
gpio_sample();
}
K_THREAD_DEFINE(thread_gpio, STACKSIZE, gpio_thread, NULL, NULL, NULL, PRIORITY, 0, 0);