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.

[参考译文] DRA829J:MCU2_0 上的 RTI WWD 赢得't TRIGGER

Guru**** 2689775 points

Other Parts Discussed in Thread: DRA829J

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1598726/dra829j-rti-wwd-on-mcu2_0-won-t-trigger

器件型号: DRA829J

大家好、我正在尝试设置 R5 内核 MCU2_0 RTI WWD、但这些设置似乎没有任何效果。 无论配置如何、我永远不会获得复位或中断。 以下是我使用的代码、基于 PDK 的 RTI_APP_dwwd_v1.c 示例:

static void initWatchdog(void)
{
    rtiInterruptConfig();

    /* Set RTI clock source */
    HW_WR_FIELD32(CSL_CTRL_MMR0_CFG0_BASE + CSL_MAIN_CTRL_MMR_CFG0_WWD28_CLKSEL,
                                CSL_MAIN_CTRL_MMR_CFG0_WWD28_CLKSEL_CLK_SEL,
                                0x3u);

    uint32_t status;
    RTIDwwdGetStatus(CSL_RTI28_CFG_BASE, &status);
    RTIDwwdClearStatus(CSL_RTI28_CFG_BASE, status);

    int32_t result = RTIDwwdWindowConfig(CSL_RTI28_CFG_BASE,
                                         RTI_RTIDWWDRXNCTRL_DWWDRXN_INTERRUPT,
                                         10000u * 32u,
                                         RTI_RTIDWWDSIZECTRL_DWWDSIZE_100_PERCENT);
    ASSERT(CSL_PASS == result);

    result = RTIDwwdCounterEnable(CSL_RTI28_CFG_BASE);
    ASSERT(CSL_PASS == result);
}

static void rtiInterruptConfig(void)
{
    OsalRegisterIntrParams_t intParams;

    Osal_RegisterInterrupt_initParams(&intParams);

    intParams.corepacConfig.arg = (uintptr_t)NULL;
    intParams.corepacConfig.priority = 1u;
    intParams.corepacConfig.corepacEventNum = 0u;    /**< Not used */
    intParams.corepacConfig.isrRoutine = &rtiWwdIsr;
    intParams.corepacConfig.intVecNum = CSLR_R5FSS0_CORE0_INTR_RTI28_INTR_WWD_0;

    HwiP_Handle hHwiHandle;
    OsalInterruptRetCode_e osalRetVal = Osal_RegisterInterrupt(&intParams, &hHwiHandle);
    seASSERT(OSAL_INT_SUCCESS == osalRetVal);
}

我在 配置 RTI 之前调用 Board_unlockMMR()。
我还尝试将 wwdt 响应设置为 RTI_RTIDWWDRXNCTRL_DWWDRXN_RESET、但也没有更改。
RTI WWD 设置中是否缺少某些内容?

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

    您好、

    当前设置似乎正在使用 RTI28、它启用主域 RTI 模块、而不是 MCU RTI 模块。  在 J721E 上: MCU 使用 MCU RTI1、MPU 使用主 RTI0。

    若要为 R5 MCU2_0 内核设置 RTI 看门狗、RTI 基地址应为 MCU_RTI1 (CSL_MCU_RTI1_CFG_BASE) 而非 RTI28。 J721E 的默认 CSL RTI 示例启用主域 RTI0 模块。 我更新了示例、将 MCU_RTI1 用于 R5 MCU2_0 内核、通过这项更改、成功触发中断。   已附加更新的 RTI_app_dwwd_v1.c 文件以供您参考。

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/11_01_00_04/exports/docs/pdk_jacinto_11_01_00_17/docs/userguide/jacinto/modules/csl/csl_rti_example.html#csl-rti-example 

    e2e.ti.com/.../rti_5F00_app_5F00_dwwd_5F00_v1.zip

    此致、

    Karthik

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

    这似乎无法解决问题。  

    我 按照建议在对 CSL_MCU_RTI1_CFG_BASE 的所有调用中设置了 rtiModule 、还调整了时钟选择和中断以匹配 MCU_RTI1、但我仍然看不到 RTI 中断和复位(如果使用了 RTI_RTIDWWDRXNCTRL_DWWDRXN_INTERRUPT) 。

    我在这里感到困惑、因为在技术参考手册中、它说明了以下内容:

    • RTI28 专用于主域 (R5FSS0_CORE0) 中的第一个 R5F CPU 内核

    MCU2_0 不是主域中的第一个 R5F CPU 内核吗? 这就是我对核心组织的理解:

    MCU1_0 => MCU 域中的第一个内核
    MCU1_1 => MCU 域中的第二个内核
    MCU2_0 => MAIN 域中的第一个内核
    MCU2_1 => MAIN 域中的第二个内核
    MCU3_0 => MAIN 域中的第三个内核
    MCU3_1 => MAIN 域中的第四个内核

    如果我在 MCU2_0 上运行代码、听起来我应该使用 RTI28。

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

    尊敬的 Anderson:
    对我先前的答复中的混淆表示歉意。 我错误地将问题解释为与 RTI0 相关、而 RTI28 实际上是 TRM 中提到的 MCU2_0 内核的正确 RTI 实例。
    J721E 中的默认 CSL RTI DWWD 示例使用 mpu1_0 和 mcu1_0 内核进行测试。 我更新了同一个示例、将 RTI28 用于 R5 MCU2_0 内核、通过此更改、成功触发中断。 我随附了更新的 RTI_app_dwwd_v1.c 和 rti_app_dwwd.h 文件以供您参考。 希望这有助于解决您的问题。

    e2e.ti.com/.../Enable_5F00_RTI_5F00_For_5F00_MCU2_5F00_0_5F00_Core.zip

    此致、

    Karthik

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

    不用担心、感谢更新。 然而,您发送的示例与我最初发布的代码几乎没有区别。 实际上只有时钟 RTI SET 函数不同、但我用相同的结果尝试了两个版本、仍然看不到触发器。 一个重要问题:我们是否需要在 Linux 设备树中显式启用 RTI28?   我可以看到、默认情况下不启用该功能。

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

    尊敬的 Anderson:

    一个重要问题:我们是否需要在 Linux 设备树中显式启用 RTI28?   默认情况下、它未在我可以看到的内容中启用

    您能否确认是否将 RTOS SDK 或 Linux SDK 用于该测试?

    此致、

    Karthik

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

    在 MCU2_0 上运行的 RTOS SDK (FreeRTOS)。

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

    尊敬的 Anderson:

    我最后成功触发了中断、在 J721E 上测试 CSL RTI DWWD 示例时、我不会遇到任何问题。 您能否分享您的 RTI_app_dwwd_v1.c 和 rti_app_dwwd.h 文件? 我想对其进行验证、以帮助确定问题的可能根本原因。

    此致、

    Karthik

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

    我不是直接使用  RTI_APP_dwwd_v1.c 示例。 我根据这个示例编写了自己的代码、所以我将在此处上传它。 我们的 main() 调用  BOARD_INIT () 此函数尝试初始化看门狗、就像示例中看到的一样。 请注意、该代码不在 J721E-EVM 上运行、而是在 DRA829J SoC 上运行的定制电路板上运行。

    有关代码的重要信息:

    • 省略了专有零件。
    • OS_start() 缺少、因为我们在其他位置处理 RTOS 调度程序初始化。

    e2e.ti.com/.../4667.rti_5F00_wwd.c

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

    尊敬的 Anderson:

    您的配置似乎正确。 请在调试模式下编译应用、并通过 CCS 设置断点、以便准确识别代码停止执行的位置。

    此致、

    Karthik