Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
188
sdk/hal/gpio.c
Normal file
188
sdk/hal/gpio.c
Normal file
@@ -0,0 +1,188 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file sdk/hal/gpio.h
|
||||
* @author HUGE-IC Application Team
|
||||
* @version V1.0.0
|
||||
* @date 2022-01-11
|
||||
* @brief This file contains all the GPIO HAL functions.
|
||||
* @copyright Copyright (c) 2016-2022 HUGE-IC
|
||||
******************************************************************************
|
||||
* @attention
|
||||
* None
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "typesdef.h"
|
||||
#include "errno.h"
|
||||
#include "list.h"
|
||||
#include "dev.h"
|
||||
#include "hal/gpio.h"
|
||||
|
||||
/** @defgroup Docxygenid_GPIO_Driver GPIO Driver
|
||||
* @brief Mainly the driver part of the GPIO module
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/** @defgroup Docxygenid_GPIO_function GPIO function
|
||||
* @ingroup Docxygenid_GPIO_Driver
|
||||
* @brief GPIO Initialization And Configuration function
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set the gpio pin mode.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @param mode : Configure gpio_pin_mode, reference @ref gpio_pin_mode.
|
||||
* @param level : Configure gpio_pull_level, reference @ref gpio_private_pull_level.
|
||||
* @return
|
||||
* - RET_OK : GPIO set mode successfully.
|
||||
* - RET_ERR : GPIO set mode unsuccessfully.
|
||||
*/
|
||||
int32 gpio_set_mode(uint32 pin, enum gpio_pin_mode mode, enum gpio_pull_level level)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->mode) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->mode(gpio, pin, mode, level);
|
||||
}
|
||||
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the gpio pin direction.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @param direction : Configure gpio pin direction, reference @ref gpio_pin_direction.
|
||||
* @return
|
||||
* - RET_OK : GPIO set direction successfully.
|
||||
* - RET_ERR : GPIO set direction unsuccessfully.
|
||||
*/
|
||||
int32 gpio_set_dir(uint32 pin, enum gpio_pin_direction direction)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->dir) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->dir(gpio, pin, direction);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set the gpio pin value.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @param direction : Configure gpio pin value, it can be 0 / 1.
|
||||
* @return
|
||||
* - RET_OK : GPIO pin set value successfully.
|
||||
* - RET_ERR : GPIO pin set value unsuccessfully.
|
||||
*/
|
||||
int32 gpio_set_val(uint32 pin, uint32 value)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->set) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->set(gpio, pin, value);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the gpio pin value.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @return
|
||||
* - value : GPIO pin value, it can be 0 / 1.
|
||||
* - RET_ERR : Get gpio pin value unsuccessfully.
|
||||
*/
|
||||
int32 gpio_get_val(uint32 pin)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->get) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->get(gpio, pin);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Request the gpio pin interrupt.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @handler : Interrupt handle, executed after the interrupt is generated.
|
||||
* @data : Parameters for interrupt handler.
|
||||
* @evt : Interrupt type, reference @ref gpio_irq_event.
|
||||
* @return
|
||||
* - RET_OK : GPIO request pin interrupt successfully.
|
||||
* - RET_ERR : GPIO request pin interrupt unsuccessfully.
|
||||
*/
|
||||
int32 gpio_request_pin_irq(uint32 pin, gpio_irq_hdl handler, uint32 data, enum gpio_irq_event evt)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->request_pin_irq) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->request_pin_irq(gpio, pin, handler, data, evt);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Release the gpio pin interrupt.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @evt : Interrupt type, reference @ref gpio_irq_event.
|
||||
* @return
|
||||
* - RET_OK : GPIO release pin interrupt successfully.
|
||||
* - RET_ERR : GPIO release pin interrupt unsuccessfully.
|
||||
*/
|
||||
int32 gpio_release_pin_irq(uint32 pin, enum gpio_irq_event evt)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->release_pin_irq) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->release_pin_irq(gpio, pin, evt);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Configure the GPIO module by ioctl_cmd.
|
||||
* @param pin : which pin to set.\n
|
||||
* This parameter can be Px_y where x can be (A..C) and y can be (0..15)\n
|
||||
* But the value of the y only be (0..5) when x is C.
|
||||
* @cmd : Commands to configure the GPIO module, reference @ref gpio_ioctl_cmd.
|
||||
* @param1 : Parameter 1, according to the command.
|
||||
* @param2 : Parameter 2, according to the command.
|
||||
* @return
|
||||
* - RET_OK : GPIO module configure successfully.
|
||||
* - RET_ERR : GPIO module configure unsuccessfully.
|
||||
*/
|
||||
int32 gpio_ioctl(uint32 pin, uint32 cmd, uint32 param1, uint32 param2)
|
||||
{
|
||||
struct gpio_device *gpio = gpio_get(pin);
|
||||
if (gpio && ((const struct gpio_hal_ops *)gpio->dev.ops)->ioctl) {
|
||||
return ((const struct gpio_hal_ops *)gpio->dev.ops)->ioctl(gpio, pin, cmd, param1, param2);
|
||||
}
|
||||
return RET_ERR;
|
||||
}
|
||||
|
||||
|
||||
/** @} Docxygenid_GPIO_functions*/
|
||||
/** @} Docxygenid_GPIO_Driver*/
|
||||
|
||||
|
||||
|
||||
/*************************** (C) COPYRIGHT 2016-2022 HUGE-IC ***** END OF FILE *****/
|
||||
Reference in New Issue
Block a user