1 /* 2 * Copyright (c) 2021 Teslabs Engineering S.L. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_ 9 10 #include <stdint.h> 11 12 #include <zephyr/sys/util_macro.h> 13 14 /** 15 * @name EXTI trigger modes. 16 * @anchor GD32_EXTI_TRIG 17 * @{ 18 */ 19 20 /** No trigger */ 21 #define GD32_EXTI_TRIG_NONE 0U 22 /** Trigger on rising edge */ 23 #define GD32_EXTI_TRIG_RISING BIT(0) 24 /** Trigger on falling edge */ 25 #define GD32_EXTI_TRIG_FALLING BIT(1) 26 /** Trigger on rising and falling edge */ 27 #define GD32_EXTI_TRIG_BOTH (GD32_EXTI_TRIG_RISING | GD32_EXTI_TRIG_FALLING) 28 29 /** @} */ 30 31 /** Callback for EXTI interrupt. */ 32 typedef void (*gd32_exti_cb_t)(uint8_t line, void *user); 33 34 /** 35 * @brief Enable EXTI interrupt for the given line. 36 * 37 * @param line EXTI line. 38 */ 39 void gd32_exti_enable(uint8_t line); 40 41 /** 42 * @brief Disable EXTI interrupt for the given line. 43 * 44 * @param line EXTI line. 45 */ 46 void gd32_exti_disable(uint8_t line); 47 48 /** 49 * @brief Configure EXTI interrupt trigger mode for the given line. 50 * 51 * @param line EXTI line. 52 * @param trigger Trigger mode (see @ref GD32_EXTI_TRIG). 53 */ 54 void gd32_exti_trigger(uint8_t line, uint8_t trigger); 55 56 /** 57 * @brief Configure EXTI interrupt callback. 58 * 59 * @param line EXTI line. 60 * @param cb Callback (NULL to disable). 61 * @param user User data (optional). 62 * 63 * @retval 0 On success. 64 * @retval -EALREADY If callback is already set and @p cb is not NULL. 65 */ 66 int gd32_exti_configure(uint8_t line, gd32_exti_cb_t cb, void *user); 67 68 #endif /* ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_ */ 69