gpio
GPIO (General Purpose Input/Output) 提供通用引脚的输入输出控制功能,支持引脚方向配置、电平读写、中断管理与低功耗管理。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| 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
头文件清单
功能说明
- 初始化GPIO模块,完成GPIO硬件资源的初始配置
- 该函数应在模块内所有其他函数之前调用
- 重复调用时内部会检查初始化状态,避免重复初始化
前置条件
- 调用时序约束:该函数应在模块内所有其他函数之前调用
- 依赖关系:硬件GPIO外设时钟已使能
uapi_gpio_deinit
头文件清单
功能说明
- 去初始化GPIO模块,释放GPIO硬件资源
- 调用后GPIO模块不再可用,需重新调用uapi_gpio_init初始化
- 重复调用时内部会检查初始化状态,避免重复去初始化
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:无其他线程正在访问GPIO模块
uapi_gpio_set_dir
头文件清单
功能说明
- 设置指定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_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 方向设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_get_dir
头文件清单
功能说明
- 获取指定GPIO引脚的输入输出方向
- 返回值为gpio_direction_t枚举类型,标识当前引脚方向
- GPIO未初始化时默认返回GPIO_DIRECTION_INPUT
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:gpio_direction_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| GPIO_DIRECTION_INPUT(0) | 输入方向 | 引脚配置为输入 |
| GPIO_DIRECTION_OUTPUT(1) | 输出方向 | 引脚配置为输出 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_set_val
头文件清单
功能说明
- 设置指定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_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 电平设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_get_output_val
头文件清单
功能说明
- 获取指定GPIO引脚的输出电平值
- 读取的是输出寄存器中的值,而非实际引脚电平
- GPIO未初始化时默认返回GPIO_LEVEL_LOW
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已配置为输出方向
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:gpio_level_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| GPIO_LEVEL_LOW(0) | 低电平 | 输出寄存器值为低 |
| GPIO_LEVEL_HIGH(1) | 高电平 | 输出寄存器值为高 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_get_val
头文件清单
功能说明
- 读取指定GPIO引脚的输入电平值
- 读取的是引脚实际输入电平
- GPIO未初始化时默认返回GPIO_LEVEL_LOW
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已配置为输入方向
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:gpio_level_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| GPIO_LEVEL_LOW(0) | 低电平 | 引脚输入为低电平 |
| GPIO_LEVEL_HIGH(1) | 高电平 | 引脚输入为高电平 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_toggle
头文件清单
功能说明
- 翻转指定GPIO引脚的输出电平状态,高电平翻转为低电平,低电平翻转为高电平
- 仅对已配置为输出方向的GPIO引脚有效
- 调用过程中会执行中断锁保护,保证翻转操作的原子性
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已通过uapi_gpio_set_dir配置为输出方向
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 翻转操作成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_set_isr_mode
头文件清单
功能说明
- 设置指定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_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断模式设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_register_isr_func
头文件清单
功能说明
- 注册指定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_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断回调注册成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PINCTRL_SUPPORT_SLP_IE | 特性宏 | 支持注册中断后使能引脚休眠输入特性 | - |
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_unregister_isr_func
头文件清单
功能说明
- 注销指定GPIO引脚的中断回调函数
- 注销后该引脚的中断不再触发回调
- 调用过程中会执行中断锁保护,保证注销操作的原子性
- 当CONFIG_PINCTRL_SUPPORT_SLP_IE宏开启时,注销中断后会同时去使能引脚的休眠输入使能
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已通过uapi_gpio_register_isr_func注册过中断回调
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断回调注销成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PINCTRL_SUPPORT_SLP_IE | 特性宏 | 支持注销中断后去使能引脚休眠输入特性 | - |
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_enable_interrupt
头文件清单
功能说明
- 使能指定GPIO引脚的中断
- 使能后GPIO输出方向无法触发中断,仅对已配置为输入方向的GPIO引脚有效
- 调用过程中会执行中断锁保护,保证使能操作的原子性
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已通过uapi_gpio_set_dir配置为输入方向,且已通过uapi_gpio_register_isr_func注册中断回调
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断使能成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_disable_interrupt
头文件清单
功能说明
- 去使能指定GPIO引脚的中断
- 去使能后该引脚的中断不再触发
- 调用过程中会执行中断锁保护,保证去使能操作的原子性
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚的中断已使能
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断去使能成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_clear_interrupt
头文件清单
功能说明
- 清除指定GPIO引脚的中断状态
- 在中断处理完成后调用,清除挂起的中断标志
- 调用过程中会执行中断锁保护,保证清除操作的原子性
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:指定引脚已配置为输入模式且中断已使能
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pin | pin_t | GPIO引脚编号 | 芯片有效pin编号范围 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 中断清除成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_DISCONTINUOUS | 特性宏 | 支持GPIO非连续引脚映射特性 | - |
uapi_gpio_suspend
头文件清单
功能说明
- 挂起所有GPIO通道,用于低功耗场景
- 挂起后GPIO模块进入低功耗状态
- arg参数当前未使用,保留扩展
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_init初始化完成
- 依赖关系:CONFIG_GPIO_SUPPORT_LPM宏已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 挂起参数 | 当前未使用,保留扩展 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 挂起操作成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_LPM | 功能宏 | 支持GPIO低功耗挂起/恢复功能 | y |
uapi_gpio_resume
头文件清单
功能说明
- 恢复所有GPIO通道,从低功耗状态恢复
- 恢复后GPIO模块可正常使用
- arg参数当前未使用,保留扩展
前置条件
- 调用时序约束:GPIO模块已通过uapi_gpio_suspend挂起
- 依赖关系:CONFIG_GPIO_SUPPORT_LPM宏已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 恢复参数 | 当前未使用,保留扩展 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 恢复操作成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_GPIO_SUPPORT_LPM | 功能宏 | 支持GPIO低功耗挂起/恢复功能 | y |
uapi_gpio_select_core
头文件清单
功能说明
- 选择指定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
头文件清单
功能说明
- 检查GPIO模块是否已初始化
- 返回true表示已初始化,返回false表示未初始化
- 用于在调用其他GPIO接口前确认模块初始化状态
返回值
- 返回类型:bool
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| true | 已初始化 | GPIO模块已完成初始化 |
| false | 未初始化 | GPIO模块未初始化 |
Type definitions
errcode_t [SDK公共基础类型]
使用说明
作为GPIO模块所有返回errcode_t类型接口的返回值类型
pin_t [SDK公共基础类型]
使用说明
作为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
使用说明
作为uapi_gpio_register_isr_func接口中callback参数的类型。调用时机:GPIO引脚中断触发时,由中断处理函数调用。参数 pin:触发中断的GPIO引脚编号。参数 param:中断上下文透传的uintptr_t参数。回调返回值为void,不做返回值检查。
Enumerations
gpio_direction_t
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| GPIO_DIRECTION_INPUT | 0 | GPIO输入方向 |
| GPIO_DIRECTION_OUTPUT | 1 | GPIO输出方向 |
gpio_level_t
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| GPIO_LEVEL_LOW | 0 | GPIO低电平 |
| GPIO_LEVEL_HIGH | 1 | GPIO高电平 |