85 lines
2.2 KiB
C
85 lines
2.2 KiB
C
/*
|
|
* Copyright (c) 2019 Derek Hageman <hageman@inthat.cloud>
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
|
|
#ifndef ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_SAM0_EIC_H_
|
|
#define ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_SAM0_EIC_H_
|
|
|
|
#include <zephyr/types.h>
|
|
|
|
/* callback for EIC interrupt */
|
|
typedef void (*sam0_eic_callback_t)(u32_t pins, void *data);
|
|
|
|
/**
|
|
* @brief EIC trigger condition
|
|
*/
|
|
enum sam0_eic_trigger {
|
|
/* Rising edge */
|
|
SAM0_EIC_RISING,
|
|
/* Falling edge */
|
|
SAM0_EIC_FALLING,
|
|
/* Both edges */
|
|
SAM0_EIC_BOTH,
|
|
/* High level detection */
|
|
SAM0_EIC_HIGH,
|
|
/* Low level detection */
|
|
SAM0_EIC_LOW,
|
|
};
|
|
|
|
/**
|
|
* @brief Acquire an EIC interrupt for specific port and pin combination
|
|
*
|
|
* This acquires the EIC interrupt for a specific port and pin combination,
|
|
* or returns an error if the required line is not available. Only a single
|
|
* callback per port is supported and supplying a different one will
|
|
* change it for all lines on that port.
|
|
*
|
|
* @param port port index (A=0, etc)
|
|
* @param pin pin in the port
|
|
* @param trigger trigger condition
|
|
* @param cb interrupt callback
|
|
* @param data parameter to the interrupt callback
|
|
*/
|
|
int sam0_eic_acquire(int port, int pin, enum sam0_eic_trigger trigger,
|
|
bool filter, sam0_eic_callback_t cb, void *data);
|
|
|
|
/**
|
|
* @brief Release the EIC interrupt for a specific port and pin combination
|
|
*
|
|
* Release the EIC configuration for a specific port and pin combination.
|
|
* No effect if that combination does not currently hold the associated
|
|
* EIC line.
|
|
*
|
|
* @param port port index (A=0, etc)
|
|
* @param pin pin in the port
|
|
*/
|
|
int sam0_eic_release(int port, int pin);
|
|
|
|
/**
|
|
* @brief Enable the EIC interrupt for a specific port and pin combination
|
|
*
|
|
* @param port port index (A=0, etc)
|
|
* @param pin pin in the port
|
|
*/
|
|
int sam0_eic_enable_interrupt(int port, int pin);
|
|
|
|
/**
|
|
* @brief Disable the EIC interrupt for a specific port and pin combination
|
|
*
|
|
* @param port port index (A=0, etc)
|
|
* @param pin pin in the port
|
|
*/
|
|
int sam0_eic_disable_interrupt(int port, int pin);
|
|
|
|
/**
|
|
* @brief Test if there is an EIC interrupt pending for a port
|
|
*
|
|
* @param port port index (A=0, etc)
|
|
*/
|
|
u32_t sam0_eic_interrupt_pending(int por);
|
|
|
|
#endif /* ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_SAM0_EIC_H_ */
|