Other Parts Discussed in Thread: AM62P
如何从 MCU 域内核 (MCU R5F 或 M4F) 访问主域 MCAN 实例 (MCAN0/MCAN1)?
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.
Other Parts Discussed in Thread: AM62P
如何从 MCU 域内核 (MCU R5F 或 M4F) 访问主域 MCAN 实例 (MCAN0/MCAN1)?
是的、MCU 域内核可以访问主域 MCAN 实例、但 MCU+SDK 开箱即用不支持这一点、必须由用户实现。 这样做时、关于中断路由和引脚多路复用配置有重要注意事项。
| 器件 (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、您只能在轮询模式下进行测试。

在 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,则引脚多路复用配置将发生变化)
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 */
您必须在 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)
添加这些更改后、您可以重新编译示例并进行测试。
APP_MCAN0_BASE_ADDR和中断号APP_MCAN0_INTR_NUM将根据您使用的 MCAN 实例而变化:
CSL_MCAN1_MSGMEM_RAM_BASE和 CSLR_MCU_R5FSS0_CORE0_CPU0_INTR_MCAN1_MCANSS_MCAN_LVL_INT_0