ZHCAF96 April 2025 MSPM0G3506 , MSPM0G3507 , MSPM0G3518 , MSPM0G3519
用户需要将 MCU 置于低功耗模式,以满足应用要求。然而,在低功耗模式下禁用 MCAN。作为权变措施,用户可以在进入低功耗模式之前将 MCAN RX 引脚配置为输入引脚。在该引脚上启用边沿失败中断。当在 MCAN RX 引脚上接收到一条消息时,MCU 由边沿失败中断唤醒。然后,将 MCAN RX 引脚重新配置为 MCAN 功能并重新配置 MCAN 模块。MCAN 以这种方式恢复正常功能。
下方显示了示例代码。
void MCAN_LowPowerMode(void)
{
DL_GPIO_initDigitalInputFeatures(GPIO_MCAN0_IOMUX_CAN_RX,
DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
DL_GPIO_setLowerPinsPolarity(GPIO_MCAN0_CAN_RX_PORT, DL_GPIO_PIN_13_EDGE_FALL);
DL_GPIO_clearInterruptStatus(GPIO_MCAN0_CAN_RX_PORT, GPIO_MCAN0_CAN_RX_PIN);
DL_GPIO_enableInterrupt(GPIO_MCAN0_CAN_RX_PORT, GPIO_MCAN0_CAN_RX_PIN);
DL_SYSCTL_setPowerPolicySTANDBY0();
__WFI();
DL_SYSCTL_setPowerPolicyRUN0SLEEP0();
DL_GPIO_initPeripheralInputFunction(
GPIO_MCAN0_IOMUX_CAN_RX, GPIO_MCAN0_IOMUX_CAN_RX_FUNC);
MCAN0_Restart();
}
/*MCAN restart function*/
void MCAN0_Restart(void)
{
DL_MCAN_reset(CANFD0);
delay_cycles(16);
DL_MCAN_disablePower(CANFD0);
delay_cycles(32);
DL_MCAN_enablePower(CANFD0);
// MCAN RAM need at least 50us to finish init
// 1600 CPU cycles@CPU32MHz
// 4000 CPU cycles@CPU80MHz
delay_cycles(4000);
SYSCFG_DL_MCAN0_init();
}