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.

[参考译文] RTOS:未调用 GPIO 回调

Guru**** 2556800 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/568038/rtos-gpio-callback-not-called

工具/软件:TI-RTOS

我正在将 ti-processor-sdk-rtos-am57xx-EVM-03.01.00.06与 SYS/BIOS 6.45.01.29 GA 版本配合使用、用于 EVM AM572x 器件和 CCS v6.2。

在 Cortex M4上运行 TI RTOS。

我已将该引脚配置为输入、并且正在注册 GPIO 回调、但在外部给定触发条件时、我没有收到 GPIO 回调。
当同一引脚配置为输出且执行 GPIO 切换正常时。

我是否错过了获取中断回调的任何步骤?

GPIO6_19
#define GPIO_PIN_NUM   (0x13)// 19.
#define GPIO_PORT_NUM  (0x06)    
GPIO_PinConfig gpioPinConfigs[]={

   GPIO_DEVICE_CONFIG (GPIO_PORT_NUM、GPIO_PIN_NUM)|
   GPIO_CFG_INPUT_GPIO_CFG_IN_INT_INT_Bot_Edges



void taskFxn (UARg a0、UARg A1)

   system_printf ("enter taskFxn ()\n");
   
   /* GPIO 初始化*/
   GPIO_init();

   /*设置回调函数*/
   GPIO_setCallback (0U、AppGpioCallbackFxn);

   /*在特定 GPIO 引脚上启用 GPIO 中断*/
   GPIO_enableInt (0U);



/*
 * ==== 回调函数====
 *
void AppGpioCallbackFxn (void)

   count++;
   System_printf ("AppGpioCallbackFxn %d\n",count);
   //GPI_intr 触发= 1;


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您使用的是什么 AM57x EVM? GPIO 驱动程序文件夹中已有 ARM/DSP/M4 LED 闪烁示例、它使用 GPIO 回调。 您是否尝试过这些示例中的任何一个? 是否调用了 Board_init()? 如果配置为 GPIO_CFG_IN_INT_INT_RISING、是否适合您? 如何触发中断? 如下所示: GPIOTriggerPinInt (gpioBaseAddr、0、gpioPin)?

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

    尊敬的 Eric:

     我正在使用 EVM AM572x 评估板。  

    是的、我已经介绍了 Cortex M4的 LED 闪烁示例。  在示例中、LED 闪烁正在发生、但未调用所使用的回调。

    是的,我调用了 Board_init()。

    我也尝试过 GPIO_CFG_IN_INT_INT_RISING、但回调仍然没有被调用

    来触发中断。 我尝试了以下操作。

       将 GPIO6_11配置为输出并切换此 GPIO、然后将其与我已配置为输入的 GPIO6_19短接。

       从外部源触发中断。

      我还使用了 GPIOTriggerPinInt (CSL_IPU_GPIO6_regs、0、0x13);

    在任何一种情况下、都不调用回调。  请告诉我还有什么可以做的?

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

    LED 闪烁示例基于 GPIO 中断回调。 如果您说它在闪烁、但没有回调、我不理解。

    例如,我尝试在 AppGpioCallbackFxn()运行相同的中断点并设置中断点,每次调用该函数后切换 LED。 中断在 LED0上生成、在 LED0上回调、GPIO 切换在 LED1上。 这些 LED 在 GPIO_evmAM572x_board 中定义:

    #define GPIO_USER0_LED_PIN_NUM (0x08)
    #define GPIO_USER0_LED_PORT_NUM (0x07)
    #if 已定义(_TI_ARM_V7M4__)
    #define GPIO_User1_LED_PIN_NUM (0x10) 针对 M4*/的/* IRQ 映射 GPIO 1-2组
    #define GPIO_User1_LED_PORT_NUM (0x01) 针对 M4*/的/* IRQ 映射 GPIO 1-2组
    其他
    #define GPIO_User1_LED_PIN_NUM (0x09)
    #define GPIO_User1_LED_PORT_NUM (0x07)
    #endif

    /* GPIO 驱动器板特定引脚配置结构*/
    GPIO_PinConfig gpioPinConfigs[]={
    /*启用中断的输入引脚:AM57X_IDK_GRN_LED */
    #if 已定义(_TI_ARM_V7M4__)
    GPIO_DEVICE_CONFIG (GPIO_User1_LED_PORT_NUM、GPIO_User1_LED_PIN_NUM)|
    GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、
    其他
    GPIO_DEVICE_CONFIG (GPIO_USER0_LED_PORT_NUM、GPIO_USER0_LED_PIN_NUM)|
    GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、
    #endif

    /*输出引脚:AM57X_IDK_Yel_LED */
    GPIO_DEVICE_CONFIG (GPIO_USER0_LED_PORT_NUM、GPIO_USER0_LED_PIN_NUM)|
    GPIO_CFG_OUTPUT
    };

    该中断由 GPIOTriggerPinInt (gpioBaseAddr、0、gpioPin)触发;

    既然您使用的是 GP EVM、那么为什么要使用不同的 GPIO6_11/_19? 如果您希望使用 GPIO 切换其他内容(而不是 LED)、则需要按照我们切换 LED 的方式进行切换。

    此外、在 PINMUX 设置中:

    AB4上的/* GPIO6 - GPIO6_11 *
    {0x1778、0x60000、{0x0、0、0}、 {0x0、0、0}、{0x0、0、 0}}、

    E17上的/* GPIO6 - GPIO6_18 *
    {0x1698、0x4000E、{0x0、0}、 {0x0、0、0}、{0x0、0、 0}}、

    B26上的/* GPIO6 - GPIO6_19 - GPIO6 */
    {0x169C、0x4000E、{0x0、0、0}、 {0x0、0、0}、{0x0、0、 0}}、

    /* GPIO7 - A25上的 GPIO7_7 - GPIO7 (LED、PM 信号)*/
    {0x17A4、0x4000E、{0x0、0}、 {0x0、0、0}、{0x0、0、 0}}、

    F16上的/* GPIO7 - GPIO7_8 - GPIO7 (LED、PM 信号)*
    {0x17A8、0x4000E、{0x0、0}、 {0x0、0、0}、{0x0、0、 0}}、

    GPIO6_11的设置与6_19/7_7/7_8不同、您可能需要将0x60000更改为0x4000E、然后重新构建电路板库并重试。

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

    我的意思是,如果我在 GPIOTriggerPinInt ()的位置执行 GPIO_Toggle (),则 LED 闪烁正在进行。

    但是如果我不更改示例中的任何内容 并保持 GPIOTriggerPinInt();因为 AppGpioCallbackFxn()没有被调用。

     我还有一个问题:

    在示例中、我看到引脚配置数组的两个索引 都配置为同一引脚 GPIO_USER0。 索引0作为输入、索引1作为输出。

    这将如何工作?

    /* GPIO 驱动器板特定引脚配置结构*/
    GPIO_PinConfig gpioPinConfigs[]={
       /*启用中断的输入引脚:*/
       GPIO_DEVICE_CONFIG (GPIO_USER0_LED_PORT_NUM、GPIO_USER0_LED_PIN_NUM)|
       GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、

       /*输出引脚:
       GPIO_DEVICE_CONFIG (GPIO_USER0_LED_PORT_NUM、GPIO_USER0_LED_PIN_NUM)|
       GPIO_CFG_OUTPUT
    };

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

    尊敬的 Vinay:

    我也被卡在同一个点上。 无法理解这些线。  

    GPIO_PinConfig gpioPinConfigs[]={
    /*启用中断的输入引脚:AM57X_IDK_GRN_LED */
    GPIO_DEVICE_CONFIG ((GPIO_USERD2_LED_PORT_NUM + 1)、GPIO_USERD2_LED_PIN_NUM)|
    GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、

    /*输出引脚:AM57X_IDK_Yel_LED */
    GPIO_DEVICE_CONFIG ((GPIO_USER0_LED_PORT_NUM + 1)、GPIO_USER0_LED_PIN_NUM)|
    GPIO_CFG_OUTPUT

    };

    我的问题是我们为什么同时将"GPIO_USER0_LED_PORT_NUM"配置为输入和输出...... ?