1 /* 2 * Copyright (C) 2015-2020 Alibaba Group Holding Limited 3 */ 4 #ifndef __HAL_GPIO_H__ 5 #define __HAL_GPIO_H__ 6 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 11 #include "plat_types.h" 12 #include "hal_iomux.h" 13 14 enum HAL_GPIO_DIR_T { 15 HAL_GPIO_DIR_IN = 0, 16 HAL_GPIO_DIR_OUT = 1, 17 }; 18 19 enum HAL_GPIO_IRQ_TYPE_T { 20 HAL_GPIO_IRQ_TYPE_LEVEL_SENSITIVE = 0, 21 HAL_GPIO_IRQ_TYPE_EDGE_SENSITIVE, 22 }; 23 24 enum HAL_GPIO_IRQ_POLARITY_T { 25 HAL_GPIO_IRQ_POLARITY_LOW_FALLING = 0, 26 HAL_GPIO_IRQ_POLARITY_HIGH_RISING, 27 }; 28 29 typedef void (* HAL_GPIO_PIN_IRQ_HANDLER)(enum HAL_GPIO_PIN_T pin); 30 31 struct HAL_GPIO_IRQ_CFG_T { 32 uint8_t irq_enable:1; 33 uint8_t irq_debounce:1; 34 enum HAL_GPIO_IRQ_TYPE_T irq_type; 35 enum HAL_GPIO_IRQ_POLARITY_T irq_polarity; 36 HAL_GPIO_PIN_IRQ_HANDLER irq_handler; 37 }; 38 39 enum HAL_GPIO_DIR_T hal_gpio_pin_get_dir(enum HAL_GPIO_PIN_T pin); 40 void hal_gpio_pin_set_dir(enum HAL_GPIO_PIN_T pin, enum HAL_GPIO_DIR_T dir, uint8_t val_for_out); 41 void hal_gpio_pin_set(enum HAL_GPIO_PIN_T pin); 42 void hal_gpio_pin_clr(enum HAL_GPIO_PIN_T pin); 43 uint8_t hal_gpio_pin_get_val(enum HAL_GPIO_PIN_T pin); 44 uint8_t hal_gpio_setup_irq(enum HAL_GPIO_PIN_T pin, const struct HAL_GPIO_IRQ_CFG_T *cfg); 45 46 #ifdef __cplusplus 47 } 48 #endif 49 50 #endif 51