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.

[FAQ] [参考译文] 【常见问题解答】AM62 器件:使用 MCU+SDK 时如何从 MCU 域内核访问主域 MCAN?

Guru**** 2796805 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1622907/faq-am62-devices-how-to-access-main-domain-mcan-from-mcu-domain-core-when-using-mcu-sdk

主题:AM62P 中讨论的其他器件

如何从 MCU 域内核 (MCU R5F 或 M4F) 访问主域 MCAN 实例 (MCAN0/MCAN1)?

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

    是的、MCU 域内核可以访问主域 MCAN 实例、但 MCU+SDK 开箱即用不支持这一点、必须由用户实现。 这样做时、关于中断路由和引脚多路复用配置有重要注意事项。

    主域 MCAN 中断路由到 MCU 域:

    器件 (MCU) 主域 MCAN 实例 主 MCAN 中断路由到 MCU
    AM62x (M4) 1 (MCAN0)
    AM62P (R5) 2 (MCAN0/1) 是的
    AM62A (R5) 2 (MCAN0/1) 是的
    AM62D (R5) 2 (MCAN0/1) 是的

    注意: 指定 AM62x (M4F) :主域 MCAN 中断是 未路由 M4F 内核。 您只能使用轮询模式访问主域 MCAN。

    配置步骤:

    您可以在这些器件 (mcan_loopback_interrupt/mcan_loopback_polling) 上使用可用于 MCU 内核的任何 MCAN 示例、并将其用作基底以修改和移植该示例以使用主域 MCAN 实例。 如前所述、对于 AM62x、您只能在轮询模式下进行测试。

    步骤 1:  从 syscfg 中删除示例中使用的 MCU MCAN 实例:

    步骤 2:为主域配置 Pinmux MCAN:

    在 main.c 中添加了应用代码引脚多路复用配置:

    #include <drivers/pinmux.h>
    
    static Pinmux_PerCfg_t gPinMuxMainCfg[] = {
        /* MCAN0_RX -> MCAN0_RX */
        {
            PIN_MCAN0_RX,
            ( PIN_MODE(0) | PIN_INPUT_ENABLE | PIN_PULL_DISABLE )
        },
        /* MCAN0_TX -> MCAN0_TX */
        {
            PIN_MCAN0_TX,
            ( PIN_MODE(0) | PIN_PULL_DISABLE )
        },
        {PINMUX_END, PINMUX_END}
    };

    (如果使用 MCAN1 而不是 MCAN0,则引脚多路复用配置将发生变化)

    第 3 步:在 main() 中初始化时钟并配置 Pinmux:

    int main()
     {
    
        Pinmux_config(gPinMuxMainCfg, PINMUX_DOMAIN_ID_MAIN); // Configure PinMux
    
         System_init();
         Board_init();
     
         int32_t status = SystemP_SUCCESS;
     
         status = SOC_moduleClockEnable(TISCI_DEV_MCAN0, 1);
         DebugP_assertNoLog(status == SystemP_SUCCESS);
         status = SOC_moduleSetClockFrequencyWithParent(TISCI_DEV_MCAN0,TISCI_DEV_MCAN0_MCANSS_CCLK_CLK,TISCI_DEV_MCAN0_MCANSS_CCLK_CLK_PARENT_HSDIV4_16FFT_MAIN_0_HSDIVOUT4_CLK,80000000U);
         DebugP_assertNoLog(status == SystemP_SUCCESS);
    
         /* Open drivers */
         Drivers_open();
         /* Open flash and board drivers */

    第 4 步:添加相关宏:

    您必须在 mcan_loopback_Polling.c/mcan_loopback_interrupt.c 中添加以下宏来配置基地址和中断号:

    /* MAIN domain MCAN0 base addresses */
    #define APP_MCAN0_BASE_ADDR         (CSL_MCAN0_MSGMEM_RAM_BASE)
    #define APP_MCAN0_INTR_NUM          (CSLR_MCU_R5FSS0_CORE0_CPU0_INTR_MCAN0_MCANSS_MCAN_LVL_INT_0) 

    添加这些更改后、您可以重新编译示例并进行测试。

    注意:  上面的示例适用于 AM62P 的 MCAN0 实例、可用作其他器件的参考、步骤也保持不变、但基地址APP_MCAN0_BASE_ADDR和中断号APP_MCAN0_INTR_NUM将根据您使用的 MCAN 实例而变化:
    • 对于 MCAN1、请使用CSL_MCAN1_MSGMEM_RAM_BASE和 CSLR_MCU_R5FSS0_CORE0_CPU0_INTR_MCAN1_MCANSS_MCAN_LVL_INT_0
    •  有关确切值、请参阅特定于器件的头文件