/* * Copyright (c) 2019 Derek Hageman * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_SAM0_EIC_H_ #define ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_SAM0_EIC_H_ #include /* callback for EIC interrupt */ typedef void (*sam0_eic_callback_t)(uint32_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 filter enable filter * @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) */ uint32_t sam0_eic_interrupt_pending(int port); #endif /* ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_SAM0_EIC_H_ */