跳转至

gpio

GPIO (General Purpose Input/Output) 提供通用引脚的输入输出控制功能,支持引脚方向配置、电平读写、中断管理与低功耗管理。

头文件清单

#include "include/driver/gpio.h"

接口清单

接口名称 功能简述
uapi_gpio_init 初始化GPIO模块
uapi_gpio_deinit 去初始化GPIO模块
uapi_gpio_set_dir 设置GPIO引脚的输入输出方向
uapi_gpio_get_dir 获取GPIO引脚的输入输出方向
uapi_gpio_set_val 设置GPIO引脚的输出电平
uapi_gpio_get_output_val 获取GPIO引脚的输出电平值
uapi_gpio_get_val 读取GPIO引脚的输入电平值
uapi_gpio_toggle 翻转GPIO引脚的输出电平状态
uapi_gpio_set_isr_mode 设置GPIO引脚的中断触发模式
uapi_gpio_register_isr_func 注册GPIO引脚的中断回调函数
uapi_gpio_unregister_isr_func 注销GPIO引脚的中断回调函数
uapi_gpio_enable_interrupt 使能GPIO引脚的中断
uapi_gpio_disable_interrupt 去使能GPIO引脚的中断
uapi_gpio_clear_interrupt 清除GPIO引脚的中断状态
uapi_gpio_suspend 挂起所有GPIO通道
uapi_gpio_resume 恢复所有GPIO通道
uapi_gpio_select_core 选择GPIO引脚归属的核心
uapi_gpio_is_inited 检查GPIO模块是否已初始化

Functions

uapi_gpio_init

void uapi_gpio_init(void)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 初始化GPIO模块,完成GPIO硬件资源的初始配置
  • 该函数应在模块内所有其他函数之前调用
  • 重复调用时内部会检查初始化状态,避免重复初始化

前置条件

  • 调用时序约束:该函数应在模块内所有其他函数之前调用
  • 依赖关系:硬件GPIO外设时钟已使能

uapi_gpio_deinit

void uapi_gpio_deinit(void)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 去初始化GPIO模块,释放GPIO硬件资源
  • 调用后GPIO模块不再可用,需重新调用uapi_gpio_init初始化
  • 重复调用时内部会检查初始化状态,避免重复去初始化

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:无其他线程正在访问GPIO模块

uapi_gpio_set_dir

errcode_t uapi_gpio_set_dir(pin_t pin, gpio_direction_t dir)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 设置指定GPIO引脚的输入输出方向
  • 配置为输入方向时用于读取外部信号,配置为输出方向时用于驱动外部电平
  • 调用过程中会执行中断锁保护,保证方向设置的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已通过pinctrl配置为GPIO功能模式

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围
dir gpio_direction_t GPIO输入输出方向 GPIO_DIRECTION_INPUT(0) / GPIO_DIRECTION_OUTPUT(1)

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 方向设置成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_get_dir

gpio_direction_t uapi_gpio_get_dir(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 获取指定GPIO引脚的输入输出方向
  • 返回值为gpio_direction_t枚举类型,标识当前引脚方向
  • GPIO未初始化时默认返回GPIO_DIRECTION_INPUT

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
GPIO_DIRECTION_INPUT(0) 输入方向 引脚配置为输入
GPIO_DIRECTION_OUTPUT(1) 输出方向 引脚配置为输出

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_set_val

errcode_t uapi_gpio_set_val(pin_t pin, gpio_level_t level)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 设置指定GPIO引脚的输出电平状态
  • 仅对已配置为输出方向的GPIO引脚有效
  • 调用过程中会执行中断锁保护,保证电平设置的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已通过uapi_gpio_set_dir配置为输出方向

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围
level gpio_level_t GPIO输出电平 GPIO_LEVEL_LOW(0) / GPIO_LEVEL_HIGH(1)

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 电平设置成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_get_output_val

gpio_level_t uapi_gpio_get_output_val(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 获取指定GPIO引脚的输出电平值
  • 读取的是输出寄存器中的值,而非实际引脚电平
  • GPIO未初始化时默认返回GPIO_LEVEL_LOW

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已配置为输出方向

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
GPIO_LEVEL_LOW(0) 低电平 输出寄存器值为低
GPIO_LEVEL_HIGH(1) 高电平 输出寄存器值为高

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_get_val

gpio_level_t uapi_gpio_get_val(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 读取指定GPIO引脚的输入电平值
  • 读取的是引脚实际输入电平
  • GPIO未初始化时默认返回GPIO_LEVEL_LOW

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已配置为输入方向

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
GPIO_LEVEL_LOW(0) 低电平 引脚输入为低电平
GPIO_LEVEL_HIGH(1) 高电平 引脚输入为高电平

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_toggle

errcode_t uapi_gpio_toggle(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 翻转指定GPIO引脚的输出电平状态,高电平翻转为低电平,低电平翻转为高电平
  • 仅对已配置为输出方向的GPIO引脚有效
  • 调用过程中会执行中断锁保护,保证翻转操作的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已通过uapi_gpio_set_dir配置为输出方向

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 翻转操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_set_isr_mode

errcode_t uapi_gpio_set_isr_mode(pin_t pin, uint32_t trigger)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 设置指定GPIO引脚的中断触发模式
  • 支持上升沿、下降沿、双边沿、低电平、高电平等触发方式
  • 调用过程中会执行中断锁保护,保证模式设置的原子性
  • 仅设置中断触发模式,不注册回调函数

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已配置为GPIO输入模式

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围
trigger uint32_t GPIO中断触发类型 GPIO_INTERRUPT_RISING_EDGE(0x00000001) / GPIO_INTERRUPT_FALLING_EDGE(0x00000002) / GPIO_INTERRUPT_LOW(0x00000004) / GPIO_INTERRUPT_HIGH(0x00000008) / GPIO_INTERRUPT_DEDGE(0x00000003)

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断模式设置成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_register_isr_func

errcode_t uapi_gpio_register_isr_func(pin_t pin, uint32_t trigger, gpio_callback_t callback)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 注册指定GPIO引脚的中断回调函数,同时设置中断触发模式
  • 当指定引脚触发中断时,系统将调用已注册的回调函数
  • 调用过程中会执行中断锁保护,保证注册操作的原子性
  • 当CONFIG_PINCTRL_SUPPORT_SLP_IE宏开启时,注册中断后会同时使能引脚的休眠输入使能

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已配置为GPIO输入模式,callback函数指针不为NULL

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围
trigger uint32_t GPIO中断触发类型 GPIO_INTERRUPT_RISING_EDGE(0x00000001) / GPIO_INTERRUPT_FALLING_EDGE(0x00000002) / GPIO_INTERRUPT_LOW(0x00000004) / GPIO_INTERRUPT_HIGH(0x00000008) / GPIO_INTERRUPT_DEDGE(0x00000003)
callback gpio_callback_t 中断回调函数指针 非NULL

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断回调注册成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_PINCTRL_SUPPORT_SLP_IE 特性宏 支持注册中断后使能引脚休眠输入特性 -
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_unregister_isr_func

errcode_t uapi_gpio_unregister_isr_func(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 注销指定GPIO引脚的中断回调函数
  • 注销后该引脚的中断不再触发回调
  • 调用过程中会执行中断锁保护,保证注销操作的原子性
  • 当CONFIG_PINCTRL_SUPPORT_SLP_IE宏开启时,注销中断后会同时去使能引脚的休眠输入使能

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已通过uapi_gpio_register_isr_func注册过中断回调

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断回调注销成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_PINCTRL_SUPPORT_SLP_IE 特性宏 支持注销中断后去使能引脚休眠输入特性 -
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_enable_interrupt

errcode_t uapi_gpio_enable_interrupt(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 使能指定GPIO引脚的中断
  • 使能后GPIO输出方向无法触发中断,仅对已配置为输入方向的GPIO引脚有效
  • 调用过程中会执行中断锁保护,保证使能操作的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已通过uapi_gpio_set_dir配置为输入方向,且已通过uapi_gpio_register_isr_func注册中断回调

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断使能成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_disable_interrupt

errcode_t uapi_gpio_disable_interrupt(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 去使能指定GPIO引脚的中断
  • 去使能后该引脚的中断不再触发
  • 调用过程中会执行中断锁保护,保证去使能操作的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚的中断已使能

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断去使能成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_clear_interrupt

errcode_t uapi_gpio_clear_interrupt(pin_t pin)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 清除指定GPIO引脚的中断状态
  • 在中断处理完成后调用,清除挂起的中断标志
  • 调用过程中会执行中断锁保护,保证清除操作的原子性

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:指定引脚已配置为输入模式且中断已使能

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 中断清除成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_DISCONTINUOUS 特性宏 支持GPIO非连续引脚映射特性 -

uapi_gpio_suspend

errcode_t uapi_gpio_suspend(uintptr_t arg)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 挂起所有GPIO通道,用于低功耗场景
  • 挂起后GPIO模块进入低功耗状态
  • arg参数当前未使用,保留扩展

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:CONFIG_GPIO_SUPPORT_LPM宏已开启

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 挂起参数 当前未使用,保留扩展

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 挂起操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_LPM 功能宏 支持GPIO低功耗挂起/恢复功能 y

uapi_gpio_resume

errcode_t uapi_gpio_resume(uintptr_t arg)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 恢复所有GPIO通道,从低功耗状态恢复
  • 恢复后GPIO模块可正常使用
  • arg参数当前未使用,保留扩展

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_suspend挂起
  • 依赖关系:CONFIG_GPIO_SUPPORT_LPM宏已开启

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 恢复参数 当前未使用,保留扩展

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 恢复操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_LPM 功能宏 支持GPIO低功耗挂起/恢复功能 y

uapi_gpio_select_core

void uapi_gpio_select_core(pin_t pin, cores_t core)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 选择指定GPIO引脚归属的核心
  • 用于多核系统中指定GPIO引脚由哪个核心控制
  • 配置后该引脚的中断由指定核心处理

前置条件

  • 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
  • 依赖关系:CONFIG_GPIO_SUPPORT_CORESEL宏已开启

入参

名称 参数类型 详细说明 约束取值范围
pin pin_t GPIO引脚编号 芯片有效pin编号范围
core cores_t 核心选择 CORES_BT_CORE(0) / CORES_HIFI_CORE(1) / CORES_APPS_CORE(2)

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_GPIO_SUPPORT_CORESEL 功能宏 支持GPIO核心选择功能 n

uapi_gpio_is_inited

bool uapi_gpio_is_inited(void)

头文件清单

#include "include/driver/gpio.h"

功能说明

  • 检查GPIO模块是否已初始化
  • 返回true表示已初始化,返回false表示未初始化
  • 用于在调用其他GPIO接口前确认模块初始化状态

返回值

  • 返回类型:bool
返回值 文字含义 触发场景
true 已初始化 GPIO模块已完成初始化
false 未初始化 GPIO模块未初始化

Type definitions

errcode_t [SDK公共基础类型]

typedef uint32_t errcode_t;

使用说明

作为GPIO模块所有返回errcode_t类型接口的返回值类型

pin_t [SDK公共基础类型]

typedef enum {
    S_EGPIO0 = 0,
    S_EGPIO1 = 1,
    ...
    S_UGPIO0 = 110,
    S_UGPIO1 = 111,
    PIN_NONE,
} pin_t;

使用说明

作为GPIO模块所有接口中pin参数的类型

cores_t [SDK公共基础类型]

typedef enum {
    CORES_BT_CORE = 0,
    CORES_PROTOCOL_CORE = 1,
    CORES_HIFI_CORE = CORES_PROTOCOL_CORE,
    CORES_APPS_CORE = 2,
    CORES_EXTERN0_CORE = 3,
    CORES_EXTERN1_CORE = 4,
    CORES_MAX_NUMBER_PHYSICAL,
    CORES_NONE = CORES_MAX_NUMBER_PHYSICAL,
    CORES_UNKNOWN = CORES_MAX_NUMBER_PHYSICAL + 1,
} cores_t;

使用说明

作为uapi_gpio_select_core接口中core参数的类型

gpio_callback_t

typedef void (*gpio_callback_t)(pin_t pin, uintptr_t param);

使用说明

作为uapi_gpio_register_isr_func接口中callback参数的类型。调用时机:GPIO引脚中断触发时,由中断处理函数调用。参数 pin:触发中断的GPIO引脚编号。参数 param:中断上下文透传的uintptr_t参数。回调返回值为void,不做返回值检查。

Enumerations

gpio_direction_t

typedef enum gpio_direction {
    GPIO_DIRECTION_INPUT,
    GPIO_DIRECTION_OUTPUT
} gpio_direction_t;
枚举成员 取值 描述
GPIO_DIRECTION_INPUT 0 GPIO输入方向
GPIO_DIRECTION_OUTPUT 1 GPIO输出方向

gpio_level_t

typedef enum gpio_level {
    GPIO_LEVEL_LOW,
    GPIO_LEVEL_HIGH
} gpio_level_t;
枚举成员 取值 描述
GPIO_LEVEL_LOW 0 GPIO低电平
GPIO_LEVEL_HIGH 1 GPIO高电平

Macros

ERRCODE_SUCC [SDK公共共享宏]

#define ERRCODE_SUCC                                        0UL

ERRCODE_FAIL [SDK公共共享宏]

#define ERRCODE_FAIL                                        0xFFFFFFFF

ERRCODE_GPIO_NOT_INIT [SDK公共共享宏]

#define ERRCODE_GPIO_NOT_INIT                               0x80001001

ERRCODE_GPIO_DIR_SET_FAIL [SDK公共共享宏]

#define ERRCODE_GPIO_DIR_SET_FAIL                           0x80001000

GPIO_INTERRUPT_RISING_EDGE

#define GPIO_INTERRUPT_RISING_EDGE                          0x00000001

GPIO_INTERRUPT_FALLING_EDGE

#define GPIO_INTERRUPT_FALLING_EDGE                         0x00000002

GPIO_INTERRUPT_LOW

#define GPIO_INTERRUPT_LOW                                  0x00000004

GPIO_INTERRUPT_HIGH

#define GPIO_INTERRUPT_HIGH                                 0x00000008

GPIO_INTERRUPT_DEDGE

#define GPIO_INTERRUPT_DEDGE                                (GPIO_INTERRUPT_RISING_EDGE | GPIO_INTERRUPT_FALLING_EDGE)