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.

[参考译文] AM2434:从 SDK V9.02 迁移到 V11 后、PRU 到 R5F 中断停止工作

Guru**** 2553260 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1540750/am2434-pru-to-r5f-interrupts-stopped-working-after-migrating-from-sdk-v9-02-to-v11

器件型号:AM2434
主题:SysConfig 中讨论的其他器件

工具/软件:

您好、

我刚刚将多核 R5F 和 PRU 工程从 ind_comms_sdk_am243x_09_02_00_15 迁移到 ind_comms_sdk_am243x_11_00_00_08 。 我这样做是为了消除旧 SDK 和 SysConfig 中的一些令人讨厌的变通办法、并通常保持最新。

我现在使用的是 CCS 12.8.2、 ti-cgt-armllvm_4.0.3.LTS 和 SysConfig_1.24.1。 (以前为 Clang 3.2.2)

代码更改绝对最少(例如,将 CONFIG_I2C_NUM_Instances 重命名为 CONFIG_I2C_HLD_NUM_Instance)   

PRU 通过标准 SysConfig PRU 配置和胶合函数调用(例如 PRUICSS_registerIrqHandler 和 PRUICSS_intcInit)在 R5F 上生成中断  。 系统会检查所有 API 调用是否成功。

但是、R5F 内核不再接收中断(我确认 PRU 正在执行 (PRU asm:LDI   R31.b0、0x20)。 如果没有此功能、应用程序就无法运行。

我比较了 SDK PRU 驱动程序代码、看到的变化可以忽略不计。

我一直盯着这几天 — 没有什么我做的改变。 如何进行调试?

提前感谢您的任何帮助或建议、Steve

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

    可以在工作和非工作情况下比较 INTC 配置? 系统事件类型的任何更改 — 边沿/脉冲?

    检查 MPU 设置、您是否还在 SysConfig 中使用内存配置器?

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

    您好 Pratheesh、

    INTC 配置是相同的(icss0_INTC_initdata 由 SysConfig 生成)。

    /*
     *  ICSSG0_INTC
     */
    PRUICSS_IntcInitData icss0_intc_initdata =
    {
        {
            ICSS_INTC_EVENT_16,
            0xFF
        },
        {
            {
                ICSS_INTC_EVENT_16,
                ICSS_INTC_CHANNEL_2,
                SYS_EVT_POLARITY_HIGH,
                SYS_EVT_TYPE_PULSE,
            },
            {0xFF, 0xFF, 0xFF, 0xFF}
        },
        {
            {
                ICSS_INTC_CHANNEL_2,
                ICSS_INTC_HOST_INTR_2
            },
            {0xFF, 0xFF}
        },
        (
            ICSS_INTC_HOST_INTR_2_HOSTEN_MASK
        )
    };

        const uint32_t PruEvtoutNum = 0;  // PRU_ICSSG0_PR1_HOST_INTR_PEND_0
        const uint32_t R5fIntrNum = CSLR_R5FSS0_CORE0_INTR_PRU_ICSSG0_PR1_HOST_INTR_PEND_0 + PruEvtoutNum; // Interrupt number of R5F
        const uint8_t WaitEnable = 0; // Flag specifying whether application can wait on this interrupt using PRUICSS_waitEvent() function. 1 for enable, 0 for disable
    
        // register our Interrupt Handler
        status = PRUICSS_registerIrqHandler(g_PruIcss0Handle,
                                            PruEvtoutNum,   /*  pruEvtoutNum PRU_ICSSG0_PR1_HOST_INTR_PEND_0 = 0, .... PRU_ICSSG0_PR1_HOST_INTR_PEND_7 = 7 */
                                            R5fIntrNum,     /*  r5fIntrNum   corresponding r5f input interrupt line */
                                            1,              /*  eventNum(Do not care)*/
                                            WaitEnable,     /*  wait_enable  */
                                            &onNewDataFromPRU_ISR);
        assert(SystemP_SUCCESS == status, "Could not register PRU interrupt handler.");
    
        // Interrupt-Channel-host mapping
        status = PRUICSS_intcInit(g_PruIcss0Handle, &icss0_intc_initdata);
        assert(SystemP_SUCCESS == status, "Could not set up Interrupt-Channel-host mapping.");
    

    我们没有使用存储器配置器 — 我们通过 cmd 文件控制存储器 — 此处没有更改。

    接下来是检查 INTC 寄存器、但今天不会。

    还有其他建议吗?

    谢谢、Steve

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

    我刚刚意识到 、这个特定的 R5f 内核上也没有产生 IPC 中断 — 似乎所有中断都在内核 (0-1) 上被禁用/无法正常工作。

    SDK/Compiler/SysConfig 中的哪些更改可能会导致这种情况发生? 此内核上的代码稳定了一段时间。

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

    您好 Steve、

    如果 IPC 中断未路由到 R5F 内核 0 或 R5F 内核 1、我会看到两个可能的原因:
    1. PRU 内核侧:请确认 PRU 内核侧的所有功能是否正常运行。  
    2. R5F 内核上的中断注册:
    我注意到了 PRUICSS_registerIrqHandler () 函数用于在 R5F 内核上注册中断。 如果此函数失败、预计会触发 DebugP_ASSERT、但似乎没有发生、因此、该函数可能返回成功。

    要继续、您能否确认:
    •PRU 固件是否正确执行并按预期生成中断?
    •PRUICSS_registerIrqHandler() 是否返回成功?

    这将有助于缩小问题出在 PRU 侧还是 R5F 中断配置中。

    此致、

    Anil.

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

    我认为资源分配变化也可能是一个因素 — 您是否也更新了 SBL?

    (99+) AM6442:中断路由器资源分配更改失败 — 处理器论坛-处理器 — TI E2E 支持论坛

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

    您好 Anil、

    我可以确认正在执行 PRU 代码(通过 LDI 指令任一侧的 GPO 上的逻辑分析仪)、并且状态值都报告成功。

    Steve

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

    Holel Pratheesh、

    目前、目标配置为使用 XDS200 探针进行调试。  我们有自己的自定义引导加载程序、但现在没有使用。

    Steve

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

    找到它:

    我在工作/非工作项目上做了比较。

    SysConfig 1.24.1 中有一个名为 DPL_CFG 的对象、在 1.21.0 中不存在。

    这样做的目的似乎是 允许作者控制是否将 HwiP_enable() 添加到 DPL_int() 函数中。 SysConfig 1.21.0 总是做到这一点而无需事先询问。

    在从 SDK V9 升级到 V11 期间、 DPL_CFG 是这样的 不会  因此自动创建 打破构建

    请不要 在 SysConfig 迁移期间在没有提示的情况下关闭关键代码生成(如 HwiP_enable ())。 花费了我很多时间。

    谢谢、Steve