ZHCAF96 April   2025 MSPM0G3506 , MSPM0G3507 , MSPM0G3518 , MSPM0G3519

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 MCAN 特性
  5. 2MCAN 模块的 Sysconfig 配置
    1. 2.1 MCAN 时钟频率
    2. 2.2 MCAN 基本配置
      1. 2.2.1 发送器延迟补偿 (TDC)
      2. 2.2.2 位时序参数
      3. 2.2.3 消息 RAM 配置
        1. 2.2.3.1 标准和扩展 ID 滤波器配置
          1. 2.2.3.1.1 如何添加更多滤波器
        2. 2.2.3.2 TX MSG RAM
        3. 2.2.3.3 RX MSG RAM
    3. 2.3 高级配置
    4. 2.4 保留配置
    5. 2.5 中断
    6. 2.6 引脚配置和 PinMux
  6. 3演示项目说明
    1. 3.1 TX 缓冲模式
    2. 3.2 TX FIFO 模式
    3. 3.3 RX 缓冲模式
    4. 3.4 RX FIFO 模式
  7. 4解决/避免 CAN 通信问题的调试和设计提示
    1. 4.1 所需的最少节点数
    2. 4.2 为何需要收发器
    3. 4.3 总线关闭状态
    4. 4.4 在低功耗模式下使用 MCAN
    5. 4.5 调试检查清单
      1. 4.5.1 编程问题
      2. 4.5.2 物理层问题
      3. 4.5.3 硬件调试提示
  8. 5总结
  9. 6参考资料

在低功耗模式下使用 MCAN

用户需要将 MCU 置于低功耗模式,以满足应用要求。然而,在低功耗模式下禁用 MCAN。作为权变措施,用户可以在进入低功耗模式之前将 MCAN RX 引脚配置为输入引脚。在该引脚上启用边沿失败中断。当在 MCAN RX 引脚上接收到一条消息时,MCU 由边沿失败中断唤醒。然后,将 MCAN RX 引脚重新配置为 MCAN 功能并重新配置 MCAN 模块。MCAN 以这种方式恢复正常功能。

注: 第一条 MCAN 消息用作 MCU 的唤醒信号。对该唤醒功能使用测试消息。

下方显示了示例代码。

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();
}