182 lines
4.1 KiB
C
182 lines
4.1 KiB
C
/**
|
|
* @file wm_gpio.h
|
|
*
|
|
* @brief GPIO Driver Module
|
|
*
|
|
* @author dave
|
|
*
|
|
* Copyright (c) 2014 Winner Microelectronics Co., Ltd.
|
|
*/
|
|
#ifndef WM_GPIO_H
|
|
#define WM_GPIO_H
|
|
|
|
#include "wm_type_def.h"
|
|
#include "wm_io.h"
|
|
|
|
/** gpio interrupte callback function */
|
|
typedef void (*tls_gpio_irq_callback)(void *arg);
|
|
|
|
/** Indicating gpio direction */
|
|
enum tls_gpio_dir {
|
|
WM_GPIO_DIR_OUTPUT, /**< output */
|
|
WM_GPIO_DIR_INPUT /**< input */
|
|
};
|
|
|
|
/** Indicating gpio attribute */
|
|
enum tls_gpio_attr {
|
|
WM_GPIO_ATTR_FLOATING, /**< floating status */
|
|
WM_GPIO_ATTR_PULLHIGH, /**< pull high */
|
|
WM_GPIO_ATTR_PULLLOW /**< pull low */
|
|
};
|
|
|
|
/** Indicating gpio interrupt trigger type */
|
|
enum tls_gpio_irq_trig {
|
|
WM_GPIO_IRQ_TRIG_RISING_EDGE, /**< rising edge arises the interrupt */
|
|
WM_GPIO_IRQ_TRIG_FALLING_EDGE, /**< falling edge arises the interrupt */
|
|
WM_GPIO_IRQ_TRIG_DOUBLE_EDGE, /**< both rising edge and falling edge arise the interrupt */
|
|
WM_GPIO_IRQ_TRIG_HIGH_LEVEL, /**< high power level arises the interrupt */
|
|
WM_GPIO_IRQ_TRIG_LOW_LEVEL /**< low power level arises the interrupt */
|
|
};
|
|
|
|
/**
|
|
* @defgroup Driver_APIs Driver APIs
|
|
* @brief Driver APIs
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup Driver_APIs
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @defgroup GPIO_Driver_APIs GPIO Driver APIs
|
|
* @brief GPIO driver APIs
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup GPIO_Driver_APIs
|
|
* @{
|
|
*/
|
|
|
|
|
|
/**
|
|
* @brief This function is used to config gpio function
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
* @param[in] dir gpio direction
|
|
* @param[in] attr gpio attribute
|
|
*
|
|
* @return None
|
|
*
|
|
* @note None
|
|
*/
|
|
void tls_gpio_cfg(enum tls_io_name gpio_pin, enum tls_gpio_dir dir, enum tls_gpio_attr attr);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to read gpio status
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
*
|
|
* @retval 0 power level is low
|
|
* @retval 1 power level is high
|
|
*
|
|
* @note None
|
|
*/
|
|
u8 tls_gpio_read(enum tls_io_name gpio_pin);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to modify gpio status
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
* @param[in] value power level
|
|
* 0: low power level
|
|
* 1: high power level
|
|
*
|
|
* @return None
|
|
*
|
|
* @note None
|
|
*/
|
|
void tls_gpio_write(enum tls_io_name gpio_pin, u8 value);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to config gpio interrupt
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
* @param[in] mode interrupt trigger type
|
|
*
|
|
* @return None
|
|
*
|
|
* @note None
|
|
*/
|
|
void tls_gpio_irq_enable(enum tls_io_name gpio_pin, enum tls_gpio_irq_trig mode);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to disable gpio interrupt
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
*
|
|
* @return None
|
|
*
|
|
* @note None
|
|
*/
|
|
void tls_gpio_irq_disable(enum tls_io_name gpio_pin);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to get gpio interrupt status
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
*
|
|
* @retval 0 no interrupt happened
|
|
* @retval 1 interrupt happened
|
|
*
|
|
* @note None
|
|
*/
|
|
u8 tls_get_gpio_irq_status(enum tls_io_name gpio_pin);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to clear gpio interrupt flag
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
*
|
|
* @return None
|
|
*
|
|
* @note None
|
|
*/
|
|
void tls_clr_gpio_irq_status(enum tls_io_name gpio_pin);
|
|
|
|
|
|
/**
|
|
* @brief This function is used to register gpio interrupt
|
|
*
|
|
* @param[in] gpio_pin gpio pin num
|
|
* @param[in] callback the gpio interrupt call back function
|
|
* @param[in] arg parammeter for the callback
|
|
*
|
|
* @return None
|
|
*
|
|
* @note
|
|
* gpio callback function is called in interrupt,
|
|
* so can not operate the critical data in the callback fuuction,
|
|
* recommendation to send messages to other tasks to operate it.
|
|
*/
|
|
void tls_gpio_isr_register(enum tls_io_name gpio_pin,
|
|
tls_gpio_irq_callback callback,
|
|
void *arg);
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
#endif /* end of WM_GPIO_H */
|
|
|