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.

[参考译文] PROCESSOR-SDK-J784S4:注册 GPIO ISR 时出现问题

Guru**** 2463330 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1474552/processor-sdk-j784s4-issues-with-registering-a-gpio-isr

器件型号:PROCESSOR-SDK-J784S4
主题中讨论的其他器件:TDA4VH

工具与软件:

您好、TI 专家!

我们正在尝试创建一个简单的 ISR、当特定的 GPIO (11)从1变为0时、该 ISR 将在 RTOS 环境中触发、与 test_led 示例类似。
它是基于 TDA4VH 的定制板。 我们使用的是 Processor SDK j784s4软件版本10。

相关代码如下所示:

#######################################################################################

GPIO_PinConfig gpioPinConfigs[] = {
    /* Input pin : DSI3 INTn */
//    PIN_GPIO0_11 | GPIO_CFG_IN_INT_FALLING // we tried both versions
    PIN_GPIO0_11 | GPIO_CFG_IN_INT_LOW
};

GPIO_CallbackFxn callbacks[] = {
    callbackName
};


GPIO_v0_Config GPIO_v0_config = {
    gpioPinConfigs,
    callbacks,
    sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),
    1,
    0
};

...

volatile uint32_t gpio_uss_intr_triggered = 0;

static void callbackName(void)
{
    gpio_uss_intr_triggered = 1;
}

...

GPIO_v0_HwAttrs gpio_cfg;
GPIO_socGetInitCfg(0, &gpio_cfg);
gpio_cfg.baseAddr = CSL_GPIO0_BASE;
(gpio_cfg.intCfg[11]).intcMuxNum = -1;
(gpio_cfg.intCfg[11]).intcMuxInEvent = -1;
(gpio_cfg.intCfg[11]).intcMuxOutEvent = -1;
GPIO_socSetInitCfg(0, &gpio_cfg);

GPIO_init();
App_ConsolePrintf("Registering ISR\n");
GPIO_setCallback(1, callbackName);
GPIO_enableInt(0);

...

//GPIO is triggered, we read it
GPIO_11_INTn = GPIOPinRead_v0(CSL_GPIO0_BASE, 11);

while (gpio_uss_intr_triggered == 0U)
{
    Osal_delay(10);
}

#######################################################################################

在此之后、代码会永远卡住。  您能告诉我们是错过了什么还是做错了什么吗?

此致、
Stefan PIjetlovic

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

    您好、Stefan、

    由于美国假期、回复将会延迟、我会尽快回复。 感谢您的耐心等待!

    谢谢!

    Neehar

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

    您好、Stefan、

    您是否可以确保已在 gpioPinConfigs[]中正确配置了引脚、以确保正确设置 GPIO 引脚? 您可以查看 RTOS PDK 内的 gpio_board.c 中的配置。

    如果 GPIO0_11是唯一配置的引脚、则必须使用 GPIO_setCallback (0、callbackName)调用 GPIO_setCallback ()。

    当您使用 GPIO_toggle (0)而不是 GPIOPinRead ()时是否看到该问题?

    谢谢!

    Neehar

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

    Neehar、您好!

    这是配置中的一个问题。 我将在这里留下详细信息、以防其他人遇到同样的问题。

    GPIO_PinConfig gpioPinConfigs[] = {
        /* Input pin : DSI3 INTn */
        GPIO_DEVICE_CONFIG(0, 11) |
        GPIO_CFG_IN_INT_FALLING | GPIO_CFG_INPUT,
    };
    
    //////////////////////////////////////////////
    
    #define PADCONFIG (0x0011C02C)    /* PADCONFIG_11*/
    
    void AppGPIOPadConfig()
    {
        Board_init(BOARD_INIT_UNLOCK_MMR);
        *((uint32_t *)(PADCONFIG)) = 0x00060007;
    }
    
    ///////////////////////////////////////////////
    
    GPIO_v0_HwAttrs gpio_cfg;
    GPIO_socGetInitCfg(0, &gpio_cfg);
    gpio_cfg.baseAddr = CSL_GPIO0_BASE;
    (gpio_cfg.intCfg[0]).intcMuxNum = INVALID_INTC_MUX_NUM;
    (gpio_cfg.intCfg[0]).intcMuxInEvent = 0;
    (gpio_cfg.intCfg[0]).intcMuxOutEvent = 0;
    GPIO_socSetInitCfg(0, &gpio_cfg);
    
    GPIO_init();
    
    GPIO_setCallback(0, App_UssIntISRCallbackFxn);
    GPIO_enableInt(0);
    
    AppGPIOPadConfig();
    
    ///////////////////////////////////////////////
    PADCONFIG 存在问题-数据表中的值是这个问题
    0x0011C02C

    在 LED 示例中是这样
    0x0011C0C8

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

    您好、Stefan、

    我很高兴我能够帮助解决您的问题、现在就关闭 TT。

    谢谢!

    Neehar