You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CC1310的GPIO中断中传递自定义参数?(TI SDK环境)

在TI CC1310 GPIO中断中传递自定义参数的实现方案

无需修改SDK的通用方案

由于TI SDK v4.20.XX中GPIO_CallbackFxn的定义仅传入引脚index(无自定义参数入口),无法像SPI那样通过SPI_Transaction.arg直接传递参数,但可以通过引脚索引与参数的映射表来实现,完全不需要修改SDK源码:

  1. 定义绑定引脚与自定义参数的结构体
#include <ti/drivers/GPIO.h>
#include <ti/drivers/SPI.h>

// 自定义参数结构体,可根据需求扩展字段
typedef struct {
    SPI_Handle spiHandle;
    // 可添加其他需要传递的参数,如状态标志、外设句柄等
} GPIO_CallbackArgs;

// 静态全局映射表,按GPIO引脚index作为索引
static GPIO_CallbackArgs gpioArgsMap[GPIO_COUNT];
  1. 初始化时关联引脚与参数
    在GPIO中断初始化代码中,将需要传递的SPI句柄(或其他参数)存入映射表对应索引的位置,再注册中断回调:
// 示例:绑定GPIO_PIN_2与SPI句柄mySpiHandle
gpioArgsMap[GPIO_PIN_2].spiHandle = mySpiHandle;

// 注册GPIO中断回调
GPIO_setCallback(GPIO_PIN_2, gpioInterruptCallback);
GPIO_enableInt(GPIO_PIN_2);
  1. 在中断回调中获取参数
    在GPIO中断回调函数内,通过传入的index从映射表中取出对应的自定义参数:
void gpioInterruptCallback(uint_least8_t index) {
    SPI_Handle targetSpiHandle = gpioArgsMap[index].spiHandle;
    
    // 此处可使用targetSpiHandle执行SPI操作,如启动传输、处理数据等
    // SPI_transfer(targetSpiHandle, &transaction);
}

可选优化(升级SDK后的方案)

如果可以升级到TI SDK v5.x及以上版本,部分GPIO驱动的GPIO_HwAttrsV2结构体新增了callbackArg字段,允许直接在初始化时传入自定义参数,无需额外维护映射表。例如:

// 初始化GPIO属性时指定回调参数
GPIO_HwAttrsV2 gpioAttrs = {
    .pinConfig = GPIO_CFG_INPUT | GPIO_CFG_INTR_FALLING,
    .callbackArg = mySpiHandle, // 直接传入SPI句柄
};

GPIO_Handle gpioHandle = GPIO_open(GPIO_PIN_2, &gpioAttrs);
GPIO_setCallback(gpioHandle, gpioInterruptCallbackV2);

此时回调函数的定义也会对应调整(需使用支持参数的回调类型):

void gpioInterruptCallbackV2(GPIO_Handle handle, void *callbackArg) {
    SPI_Handle spiHandle = (SPI_Handle)callbackArg;
    // 使用spiHandle进行操作
}

不过该特性在SDK v4.20.XX中并不存在,因此映射表方案是当前版本下最可靠的实现方式。


内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:35:40