mirror of
https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_RTL8710BX_ALIOS_SDK.git
synced 2025-03-19 11:12:55 +00:00
154 lines
5.3 KiB
C
Executable file
154 lines
5.3 KiB
C
Executable file
/*
|
|
* Copyright (C) 2015-2017 Alibaba Group Holding Limited
|
|
*/
|
|
|
|
#ifndef HAL_GPIO_H
|
|
#define HAL_GPIO_H
|
|
|
|
/*
|
|
* Pin configuration
|
|
*/
|
|
typedef enum {
|
|
ANALOG_MODE, /* Used as a function pin, input and output analog */
|
|
IRQ_MODE, /* Used to trigger interrupt */
|
|
INPUT_PULL_UP, /* Input with an internal pull-up resistor - use with devices
|
|
that actively drive the signal low - e.g. button connected to ground */
|
|
INPUT_PULL_DOWN, /* Input with an internal pull-down resistor - use with devices
|
|
that actively drive the signal high - e.g. button connected to a power rail */
|
|
INPUT_HIGH_IMPEDANCE, /* Input - must always be driven, either actively or by an external pullup resistor */
|
|
OUTPUT_PUSH_PULL, /* Output actively driven high and actively driven low -
|
|
must not be connected to other active outputs - e.g. LED output */
|
|
OUTPUT_OPEN_DRAIN_NO_PULL, /* Output actively driven low but is high-impedance when set high -
|
|
can be connected to other open-drain/open-collector outputs.
|
|
Needs an external pull-up resistor */
|
|
OUTPUT_OPEN_DRAIN_PULL_UP, /* Output actively driven low and is pulled high
|
|
with an internal resistor when set high -
|
|
can be connected to other open-drain/open-collector outputs. */
|
|
} gpio_config_t;
|
|
|
|
/*
|
|
* GPIO dev struct
|
|
*/
|
|
typedef struct {
|
|
uint8_t port; /* gpio port */
|
|
gpio_config_t config; /* gpio config */
|
|
void *priv; /* priv data */
|
|
} gpio_dev_t;
|
|
|
|
/*
|
|
* GPIO interrupt trigger
|
|
*/
|
|
typedef enum {
|
|
IRQ_TRIGGER_RISING_EDGE = 0x1, /* Interrupt triggered at input signal's rising edge */
|
|
IRQ_TRIGGER_FALLING_EDGE = 0x2, /* Interrupt triggered at input signal's falling edge */
|
|
IRQ_TRIGGER_BOTH_EDGES = IRQ_TRIGGER_RISING_EDGE | IRQ_TRIGGER_FALLING_EDGE,
|
|
} gpio_irq_trigger_t;
|
|
|
|
/*
|
|
* GPIO interrupt callback handler
|
|
*/
|
|
typedef void (*gpio_irq_handler_t)(void *arg);
|
|
|
|
/**
|
|
* Initialises a GPIO pin
|
|
*
|
|
* @note Prepares a GPIO pin for use.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be initialised
|
|
* @param[in] configuration A structure containing the required gpio configuration
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_init(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Sets an output GPIO pin high
|
|
*
|
|
* @note Using this function on a gpio pin which is set to input mode is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be set high
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_output_high(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Sets an output GPIO pin low
|
|
*
|
|
* @note Using this function on a gpio pin which is set to input mode is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be set low
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_output_low(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Trigger an output GPIO pin's output. Using this function on a
|
|
* gpio pin which is set to input mode is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be set low
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_output_toggle(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Get the state of an input GPIO pin. Using this function on a
|
|
* gpio pin which is set to output mode will return an undefined value.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be read
|
|
* @param[in] value gpio value
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_input_get(gpio_dev_t *gpio, uint32_t *value);
|
|
|
|
/**
|
|
* Enables an interrupt trigger for an input GPIO pin.
|
|
* Using this function on a gpio pin which is set to
|
|
* output mode is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which will provide the interrupt trigger
|
|
* @param[in] trigger the type of trigger (rising/falling edge)
|
|
* @param[in] handler a function pointer to the interrupt handler
|
|
* @param[in] arg an argument that will be passed to the interrupt handler
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_enable_irq(gpio_dev_t *gpio, gpio_irq_trigger_t trigger,
|
|
gpio_irq_handler_t handler, void *arg);
|
|
|
|
/**
|
|
* Disables an interrupt trigger for an input GPIO pin.
|
|
* Using this function on a gpio pin which has not been set up
|
|
* using @ref hal_gpio_input_irq_enable is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which provided the interrupt trigger
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_disable_irq(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Disables an interrupt trigger for an input GPIO pin.
|
|
* Using this function on a gpio pin which has not been set up
|
|
* using @ref hal_gpio_input_irq_enable is undefined.
|
|
*
|
|
* @param[in] gpio the gpio pin which provided the interrupt trigger
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_clear_irq(gpio_dev_t *gpio);
|
|
|
|
/**
|
|
* Set a GPIO pin in default state.
|
|
*
|
|
* @param[in] gpio the gpio pin which should be deinitialised
|
|
*
|
|
* @return 0 : on success, EIO : if an error occurred with any step
|
|
*/
|
|
int32_t hal_gpio_finalize(gpio_dev_t *gpio);
|
|
|
|
#endif /* HAL_GPIO_H */
|
|
|