This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1310:将参数传递给 GPIO 中断(索引之外)

Guru**** 2484615 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1195214/cc1310-passing-parameters-to-gpio-interrupts-other-than-the-index

器件型号:CC1310

您好!

是否可以将任意参数传递给 GPIO ISR、而不是 GPIO 的默认索引?  

我希望执行的操作与 SPI 传输完成回调中的操作基本相同、在该回调中、您可以通过 SPI_Transaction 结构传递任意参数

  void   *arg;      /*!<要传递给回调函数的参数*/  

除了调用引脚的索引之外、我没有找到任何与 GPIO ISR 类似的东西。 这是不可能的、并且您必须对要在 ISR 内部访问的任何变量进行硬编码、还是我错过了什么?  

大家好  

最大

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Max:

    这确实是不可能的。

    如文档所述、GPIO 驱动程序的行为与其他驱动程序略有不同、看起来这是其中的一个差异。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、谢谢。

    您是否知道解决这一问题的方法是否巧妙? (无需重写整个 GPIO ISR 回调处理)  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Max:

    事实上、我最终找到了一种方法来做您描述的事情。

    可以使用 GPIO_setUserArggGPIO_getUserArgg 方法。 下面是一个简短的示例:

    volatile uint32_t GpioArgument1 = 0x12345678;
    volatile uint32_t GpioArgument2 = 0x55555555;
    
    /*
     *  ======== gpioButtonFxn0 ========
     *  Callback function for the GPIO interrupt on CONFIG_GPIO_BUTTON_0.
     *
     *  Note: GPIO interrupts are cleared prior to invoking callbacks.
     */
    void gpioButtonFxn0(uint_least8_t index)
    {
        volatile uint32_t number = (volatile uint32_t)GPIO_getUserArg(CONFIG_GPIO_BUTTON_0);
        /* Toggle an LED */
        GPIO_toggle(CONFIG_GPIO_LED_0);
    }
    
    /*
     *  ======== gpioButtonFxn1 ========
     *  Callback function for the GPIO interrupt on CONFIG_GPIO_BUTTON_1.
     *  This may not be used for all boards.
     *
     *  Note: GPIO interrupts are cleared prior to invoking callbacks.
     */
    void gpioButtonFxn1(uint_least8_t index)
    {
        volatile uint32_t number = (volatile uint32_t)GPIO_getUserArg(CONFIG_GPIO_BUTTON_1);
    
        /* Toggle an LED */
        GPIO_toggle(CONFIG_GPIO_LED_1);
    }
    
    
    //Somewhere in the code
    GPIO_setUserArg(CONFIG_GPIO_BUTTON_0, (void *)GpioArgument1);
    GPIO_setUserArg(CONFIG_GPIO_BUTTON_1, (void *)GpioArgument2);

    但愿这有所帮助。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是的、非常完美、这正是我想要的。  

    我的 GPIO.h 和 GPIOCC26XX.h/c 没有该函数。

    但我发现我仍在使用4.20.XX SDK。 我猜此功能是在5.XX 版本的某个位置添加的。 当前正在更新。  

    再次感谢、这对我帮助很大。

    您好!

    最大