/**************************************************************************//** * @file pan_hal_gpio.h * @version V0.0.0 * $Revision: 1 $ * $Date: 23/09/10 $ * @brief Panchip series GPIO (General Purpose Input/Output) HAL header file. * @note Copyright (C) 2023 Panchip Technology Corp. All rights reserved. *****************************************************************************/ #ifndef __PAN_HAL_GPIO_H__ #define __PAN_HAL_GPIO_H__ #include "pan_hal_def.h" /** * @brief GPIO HAL Interface * @defgroup gpio_hal_interface GPIO HAL Interface * @{ */ #define GPIO_P0_PIN_NUM 8 #define GPIO_P1_PIN_NUM 8 #define GPIO_P2_PIN_NUM 8 #define GPIO_P3_PIN_NUM 2 #define GPIO_INTEN_MASK_BASE 0x00010001UL #define GPIO_INTTYPE_MASK_BASE 0x00000001UL /* PIN ID Definitions */ typedef enum { P0_0 = 0x00, P0_1 = 0x01, P0_2 = 0x02, P0_3 = 0x03, P0_4 = 0x04, P0_5 = 0x05, P0_6 = 0x06, P0_7 = 0x07, P1_0 = 0x10, P1_1 = 0x11, P1_2 = 0x12, P1_3 = 0x13, P1_4 = 0x14, P1_5 = 0x15, P1_6 = 0x16, P1_7 = 0x17, P2_0 = 0x20, P2_1 = 0x21, P2_2 = 0x22, P2_3 = 0x23, P2_4 = 0x24, P2_5 = 0x25, P2_6 = 0x26, P2_7 = 0x27, P3_0 = 0x30, P3_1 = 0x31 } HAL_GPIO_PinId; /** * @brief MODE Constant Definitions */ typedef enum { HAL_GPIO_MODE_INPUT_DIGITAL = 0x00000, /*!< Digital Input Mode */ HAL_GPIO_MODE_INPUT_ANALOG = 0x10000, /*!< Analog Input Mode */ HAL_GPIO_MODE_OUTPUT_PUSHPULL = 0x00001, /*!< Push-pull Output Mode */ HAL_GPIO_MODE_OUTPUT_OPENDRAIN = 0x00002, /*!< Open-Drain Output Mode */ HAL_GPIO_MODE_QUASI_BIDIRECTIONAL = 0x00003 /*!< Quasi-bidirectional Mode */ } HAL_GPIO_Mode; /** * @brief MODE Constant Definitions for GPIO Pull Options. */ typedef enum { HAL_GPIO_PULL_DISABLE, /**< No pull-up or pull-down. */ HAL_GPIO_PULL_UP, /**< Enable pull-up. */ HAL_GPIO_PULL_DOWN /**< Enable pull-down. */ } HAL_GPIO_Pull; /** * @brief GPIO Bit SET and Bit RESET enumeration */ typedef enum { HAL_GPIO_LEVEL_LOW = 0, /**< Pin is in reset state. */ HAL_GPIO_LEVEL_HIGH = 1 /**< Pin is in set. */ } HAL_GPIO_Level; /** * @brief GPIO Interrupt Type Constant Definitions */ typedef enum { HAL_GPIO_INT_RISING = 0x00010000UL, /*!< Interrupt enable by Input Rising Edge */ HAL_GPIO_INT_FALLING = 0x00000001UL, /*!< Interrupt enable by Input Falling Edge */ HAL_GPIO_INT_BOTH_EDGE = 0x00010001UL, /*!< Interrupt enable by both Rising Edge and Falling Edge */ HAL_GPIO_INT_HIGH = 0x01010000UL, /*!< Interrupt enable by Level-High */ HAL_GPIO_INT_LOW = 0x01000001UL, /*!< Interrupt enable by Level-Low */ HAL_GPIO_INT_DISABLE = 0x00000000UL /*!< Interrupt disable */ } HAL_GPIO_IntMode; /** * @brief Typedef for GPIO callback function pointer. */ typedef void (*HAL_GPIO_CallbackFunc)(HAL_GPIO_IntMode intMode); /** * @brief Global array to store GPIO callback functions. * Supports up to 48 GPIO pins. */ extern HAL_GPIO_CallbackFunc HAL_GPIO_CallbackArray[GPIO_P0_PIN_NUM + GPIO_P1_PIN_NUM + GPIO_P2_PIN_NUM + GPIO_P3_PIN_NUM]; /** * @brief GPIO Init structure definition */ typedef struct { HAL_GPIO_Mode mode; /*!< Specifies the operating mode for the selected pin. This parameter can be a value of @ref HAL_GPIO_Mode */ HAL_GPIO_Pull pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pin. This parameter can be a value of @ref HAL_GPIO_Pull */ HAL_GPIO_Level level; /*!< Specifies the Initial IO output level for the selected pin. This parameter can be a value of @ref HAL_GPIO_Level */ } HAL_GPIO_InitTypeDef; /** * @struct HAL_GPIO_IntInitTypeDef * @brief GPIO interrupt configuration structure definition. */ typedef struct { HAL_GPIO_IntMode intMode; HAL_GPIO_CallbackFunc callbackFunc; FunctionalState debounce; } HAL_GPIO_IntInitTypeDef; /** * @brief Initializes a GPIO pin. * @param pinID: Identifier of the GPIO pin to be initialized. * @param initStruct: Pointer to a structure containing GPIO initialization options. * @retval None */ extern void HAL_GPIO_Init(HAL_GPIO_PinId pinID, HAL_GPIO_InitTypeDef *initStruct); /** * @brief Set output level to a GPIO pin. * @param pinID: Identifier of the GPIO pin to write to. * @param level: The IO level to write to the GPIO pin (HAL_GPIO_LEVEL_LOW or HAL_GPIO_LEVEL_HIGH). * @retval None */ extern void HAL_GPIO_WritePin(HAL_GPIO_PinId pinID, HAL_GPIO_Level level); /** * @brief Get output level of a GPIO pin. * @param pinID: Identifier of the GPIO pin to read. * @retval HAL_GPIO_Level: The IO level of the GPIO pin (HAL_GPIO_LEVEL_LOW or HAL_GPIO_LEVEL_HIGH). */ extern HAL_GPIO_Level HAL_GPIO_ReadPin(HAL_GPIO_PinId pinID); /** * @brief Toggle output level of a GPIO pin. * @param pinID: Identifier of the GPIO pin to write to. * @retval None */ extern void HAL_GPIO_TogglePin(HAL_GPIO_PinId pinID); /** * @brief Set internal pull-up or pull-down resistor path of a GPIO pin. * @param pinID: Identifier of the GPIO pin to write to. * @param pull: The Pull-up or Pull-Down activation for the selected pin. * @retval None */ extern void HAL_GPIO_SetPull(HAL_GPIO_PinId pinID, HAL_GPIO_Pull pull); /** * @brief Deinitializes a GPIO pin. * @param pinID: Identifier of the GPIO pin to be deinitialized. */ extern void HAL_GPIO_DeInit(HAL_GPIO_PinId pinID); /** * @brief Initializes a GPIO pin for interrupt handling. * @param pinID: Identifier of the GPIO pin to be initialized for interrupts. * @param intInitStruct: Pointer to a structure containing GPIO interrupt configuration. * @retval None */ extern void HAL_GPIO_InterruptInit(HAL_GPIO_PinId pinID, HAL_GPIO_IntInitTypeDef *intInitStruct); /** * @brief Set interrupt mode for a GPIO pin. * @param pinID: Identifier of the GPIO pin to write to. * @param intMode: The interrupt mode for the selected pin. * @retval None */ extern void HAL_GPIO_SetIntMode(uint32_t pinID, HAL_GPIO_IntMode intMode); /** * @brief Set interrupt debounce control for a GPIO pin. * @param pinID: Identifier of the GPIO pin to write to. * @param debounce: ENABLE or DISABLE interrupt debounce function for the selected pin. * @retval None */ extern void HAL_GPIO_SetIntDebounce(uint32_t pinID, FunctionalState debounce); /** @} */ // end of group #endif // __PAN_HAL_GPIO_H__