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.

[参考译文] TDA4VM:RTOS-SDK:PDK GPIO 示例无法使用连接到主域 GPIO 的按钮

Guru**** 2468610 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1420182/tda4vm-rtos-sdk-pdk-gpio-example-is-not-working-with-button-connected-to-main-domain-gpio

器件型号:TDA4VM

工具与软件:

大家好!

我有一块 J721e_EVM 板。 我正在使用"ti-processor-sdk-rtos-j721e-evm-09_02_00_05"。 我尝试触发来自外部源(如按钮)的 GPIO 中断。 我将使用 mc2_1内核以及 PDK 的 GPIO 示例:main_led_blink.c 我已经成功地从 WKUP 域 GPIO 触发了中断、但使用主域时、中断无效。 在我的示例中、我尝试使用 GPIO0_71。 我可以成功地将此引脚用作输出、但到目前为止不能用作中断输入。 下面是我的代码的相关部分:

pinmux_data:

/* MyGPIO0 -> GPIO0_71 -> AA28 */
    {
        PIN_PRG0_PRU1_GPO8, PIN_MODE(7) | \
        ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION))
    },


gpio_board.c:
/* GPIO Driver board specific pin configuration structure */ 
GPIO_PinConfig gpioPinConfigs[] =
{
    GPIO_DEVICE_CONFIG(1, 71)               |  GPIO_CFG_IN_INT_RISING | GPIO_CFG_INPUT,
};

/* GPIO Driver call back functions */
GPIO_CallbackFxn gpioCallbackFunctions[] =
{
    NULL
};

/* GPIO Driver configuration structure */
GPIO_v0_Config GPIO_v0_config =
{
    gpioPinConfigs,         
    gpioCallbackFunctions,
    sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),
    sizeof(gpioCallbackFunctions) / sizeof(GPIO_CallbackFxn),
    0x8U


main_led_blink.c
volatile uint32_t main_gpio_intr_triggered = 0;

static void Board_initGPIO(void)
{
    Board_initCfg boardCfg;
    GPIO_v0_HwAttrs gpio_cfg;

    boardCfg = BOARD_INIT_PINMUX_CONFIG |
        BOARD_INIT_MODULE_CLOCK |
        BOARD_INIT_UART_STDIO;
    Board_init(boardCfg);

    GPIO_socGetInitCfg(1, &gpio_cfg);
    gpio_cfg.baseAddr = CSL_GPIO0_BASE;
    (gpio_cfg.intCfg[71]).intcMuxNum = INVALID_INTC_MUX_NUM;
    (gpio_cfg.intCfg[71]).intcMuxInEvent = 0;
    (gpio_cfg.intCfg[71]).intcMuxOutEvent = 0;
    GPIO_socSetInitCfg(1, &gpio_cfg);
}

void AppMainGpioCallbackFxn(void)
{
    main_gpio_intr_triggered = 1;
    GPIO_clearInt(0);
}

#if defined (RTOS_ENV)
void gpio_test(void* arg0, void* arg1)
{
#else
int main()
{   
    Board_initGPIO();
#endif
    // GPIO initialization
    GPIO_init();
    
    // Set the callback function
    GPIO_setCallback(0, AppMainGpioCallbackFxn);

    // Enable GPIO interrupt on the specific gpio pin
    GPIO_enableInt(0); 
    GPIO_clearInt(0);
  
    GPIO_log("\n -------------LED blink application------------- \n");
    UART_printStatus("\n Awaiting interrupt occurrence ...\n");
    AppDelay(DELAY_VALUE);
   
    while (main_gpio_intr_triggered == 0U);
    UART_printStatus("\n Button has been pushed, and the interrupt has been captured!! \n");
    
    while(1)
    {
        AppDelay(DELAY_VALUE);
    }
}



您能帮我解决什么问题吗?
感谢你的帮助

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

    我尝试过其他主域 GPIO、但结果相同。

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

    您好!

    为了进行确认、您可以为 WKUP_GPIO 和将中断配置为输出的主 GPIO 生成中断、但不能为配置为输入的主 GPIO 生成中断?  

    输入和输出配置是否适用于 WKUP_GPIO?

    如何将 GPIO0_71连接到按钮来触发中断?

    谢谢!

    Neehar

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

    是的、我可以在 WKUP_GPIO 和 MAIN_GPIO 中生成输出、但我只能在 WKUP_GPIO 中生成中断、而不是在 MAIN_GPIO 中生成中断。 我使用4k7欧姆作为下拉电阻器(不按下按钮时、引脚为0V、按下时、其为3.3V)。 我已经使用万用表检查了几次连接。

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

    您好!

    [报价 userid="603084" url="~/support/processors-group/processors/f/processors-forum/1420182/tda4vm-rtos-sdk-pdk-gpio-example-is-not-working-with-button-connected-to-main-domain-gpio/5442469 #5442469"]我可以在 WKUP_GPIO 以及 MAIN_GPIO[/QUOT]中生成输出

    这是否意味着输出中断?

    能否为 GPIO0_71提供 PADCONFIG 寄存器的内容?

    谢谢!

    Neehar

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

    我已经尝试了输出中断:连接了一个我从软件切换的 LED。
    结果:LED 闪烁、但未发生中断。

    我还尝试了输入中断:连接了一个带有下拉电阻器的按钮(正如我所写的)。
    结果:没有中断发生。

    有趣的是、通过调试器、我可以看到中断在 GPIOMUX_INTRTR0寄存器中发生、但它以某种方式没有进入我的 MCU2_1内核。 可能中断路由器连接错误。

    这是 padconfig (我知道 PRG0_PRU1_GPO8在 PADCONFIG72上表示):


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

    您好!

    结果:LED 指示灯闪烁但未发生中断。

    你是否配置了回调函数 、以及是否使用 LED 进行了触发?

    您是否测试了 PDK 上的原始 main_led_blink.c 示例? 您是否能够在 WKUP 和 MAIN 域中触发中断?

    [报价 userid="603084" url="~/support/processors-group/processors/f/processors-forum/1420182/tda4vm-rtos-sdk-pdk-gpio-example-is-not-working-with-button-connected-to-main-domain-gpio/5447784 #5447784"]有趣的是、使用 bedugger、我看到中断在 GPIOMUX_INTRTRTR0寄存器中发生、但无法从某种程度上到达 MCU2_1内核。 可能中断路由器连接错误。

    寄存器数据看起来正确。 您能否为 GPIOMUX_INTRTR0寄存器和 GPIO 寄存器(例如 GPIO_INTSTAT45、GPIO_OUT_DATA45、GPIO_DIR45和 GPIO_IN_DATA45)提供寄存器转储?

    谢谢!

    Neehar

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

    是的、我已经像在原始示例中一样在该情况下配置了回调函数、但它并不起作用。

    以下是您需要的寄存器(我当时正在按下按钮、因此引脚71为高电平):



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

    您好!

    您是否测试了来自 PDK 的原始 GPIO LED 闪烁示例? 这些测试是否通过?

    谢谢!

    Neehar

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

    原始示例使用引脚 GPIO1_6输出中断。 它使用 CSL_GPIO1_BASE。 但我想将 GPIO0_71与 CSL_GPIO0_BASE 一起使用、但找不到缺失的区别。

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

    您好!

    感谢您提供这些信息。 寄存器转储看起来正确。

    我将进一步探讨这一点、然后回复给您。

    谢谢!

    Neehar

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

    即使 GPIOMUX_INTRTR0寄存器看起来是正确的吗?

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

    您好!

    即使 GPIOMUX_INTRTR0寄存器看上去正确?

    我无法判断、因为在您发送的寄存器转储中该寄存器是空的。 您是否知道使用 GPIO 多路复用器路由器的哪个输出?

    谢谢!

    Neehar

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

    根据数据表、它会在 GPIOMUX_INTRTR0_OUTP[31:16]上某处显示、如果我理解正确、但不知道确切的位置。 在 CCS 调试中从哪里可以找到此寄存器?

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

    您好!

    您在数据表上的哪里看到了这种情况? 我似乎不能找到它。

    当我们说到  GPIOMUX_INTRTRTR0_OUTP[31:16]时、它不是指寄存器。 相反、这意味着在来自 GPIOMUX 中断路由器的64个输出中断中、 GPIOMUX_INTRTR0_OUTP_16至 GPIOMUX_INTRTR0_OUTP_31 路由到 R5内核。  请以 WKUP_GPIOMUX_INTRTR0的示意图为例:

    谢谢!

    Neehar

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

    那么、我应该检查哪个寄存器或下一步是什么? 您对 GPIO0_71无法正常工作有什么建议吗?

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

    您好!

    您是否已在其他内核上进行构建和运行测试? 设置为 MCU1_0?

    谢谢!

    Neehar

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

    是的、我也尝试了 mcu1_0和 MCU2_0、得到了相同的结果。

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

    您好!

    您能否测试 GPIO_socConfigIntrPath API 返回值是否通过?

    谢谢!

    Neehar

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

    我在调试器中看到它是"-1"、这不是很好。

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

    通过一些进一步的调试,它看起来像"Sciclient_rmIrqFindRoute ()"返回"-1"后 search_detph = 3。

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

    您好!

    感谢您提供这些信息、我将在明天继续深入探讨。

    谢谢!

    Neehar

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

    您好!

    当传递给 Sciclient_rmIrqSet ()时,您能为 rmIrqReq struct 参数提供值吗?

    谢谢!

    Neehar  

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

    我在一个假期,很抱歉响应晚了。

    我进一步调试了问题。 我想我已经很接近解决方案了。 我认为当我调用"Sciclient_rmIrqFindRoute ()"时,关键参数是"d_IRQ"。 我已复制原始调用中的参数(我从调试中获得的参数)。 您可以在我的代码中看到它们。



    我已经使用"for"循环尝试了所有可能的"d_IRQ"值、我观察了该函数无错误返回的位置。 有4个选项返回没有(-1):188,189,190和191。 原始值为192。

    我想知道192来自哪里。 我发现这些值在"GPIO_socConfigIntrPath()"函数中确定。



    函数"GPIO_socGetIrqRange ()"将值188提供给"IRQ_RANGE_START"。 然后、"dst_host_irq"从"dst_host_irq = IRQ_RANGE_START + bankNum = 188 + 4"获取值192、因为 bankNum 是(int) 71/16 = 4。

    该值指向"rmIrqREQ.DST_HOST_IRQ"、后者指向"Sciclient_rmIrqSet ()"函数。 该函数调用我检查过的"Sciclient_rmIrqFindRoute()"函数。

    正如您在我的代码(第613行)中看到的、我已经用正确的值硬编码"dst_host_irq":188。 有了这个中断、就能够很好地工作。 我按下按钮、就会发生中断。 所以我认为 sciclient 有一些结构错误。 您能确认吗? 否则,你能帮我什么是我在这里误解?

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

    你有什么想法可能会出什么问题吗?

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

    您好!

    很抱歉耽误你的时间、我现在正在研究这个。

    谢谢!

    Neehar

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

    你那有新消息吗? 您可以重现问题吗?

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

    您好!  

    我们指派的专家目前不在办公室。 请预计响应会有延迟。

    谢谢!
    Sarabesh S.

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

    感谢您提供的信息。 我希望他是好的!

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

    您好!

    自上次发布以来是否有任何更新? 当前状态是否是  GPIO_socConfigIntrPath () sciclient API 中 dst_host_IRQ 值出现的问题?

    谢谢!

    Neehar

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

    是的、这是最新的更新。 我不能再深入了、因为 SCI 服务器通过整路由器汇编中断路径的方式有点复杂。

    您可以在10月29日的消息中看到我的最新调试体验。 这里有您之前要求的参数、我把它们应用到了基于调试器的测试代码中。 我可以验证宏和文档中的大多数值、但"dst_host_irq"是一个我不确定它是如何获得值192的值。 这就是我开始使用 for 周期尝试其他值的原因。 这可能不是导致该问题的参数。

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

    您好!

    您是否对默认 Boardcfg 进行了任何更改 /drv/sciclient soc /V1/sciclient_defaultBoardcfg.c

    如果不是、src 和 DEST IRQ 索引将遵循此处给出的默认 SCiclient board cfg

    谢谢!

    Neehar

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

    您好!

    我没有更改该文件。 您是否检查了您的环境并复制了我的配置? 在您的情况下,哪些参数被传递给 Sciclient_rmIrqSet()? 如果一切都很好,我们能找到不匹配的确切点吗?

    谢谢!

    Zsombor

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

    尊敬的 Zsombor:

    [报价 userid="574070" url="~/support/processors-group/processors/f/processors-forum/1420182/tda4vm-rtos-sdk-pdk-gpio-example-is-not-working-with-button-connected-to-main-domain-gpio/5631511 #5631511"]

    您是否对默认 Boardcfg 进行了任何更改 /drv/sciclient soc /V1/sciclient_defaultBoardcfg.c

    [报价]

    很抱歉、我不推荐、您能否检查您是否对此处找到的默认 rm Boardcfg 进行了任何更改: DRV/sciclient/V1/sciclient_defaultBoardcfg_rm.c soc ? 如果是、会发生什么变化?

    我尚未进行测试以重现您的错误、但是到目前为止、我没有任何 Sciclient API 问题。

    谢谢!

    Neehar

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

    Neehar、您好!
    我也没有更改该文件。