JAJA859 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. 4CAN 通信の問題を解決 / 回避するためのデバッグと設計のヒント
    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 の使用

ユーザーは、アプリケーションの要件を満たすために、マイコンを低消費電力モードにする必要があります。ただし、MCAN モジュールは低消費電力モードではディスエーブルになっています。回避方法として、低消費電力モードに移行する前に、ユーザーは MCAN RX ピンを入力ピンとして構成できます。そのピンでエッジ障害割り込みを有効化します。MCAN の RX ピンで 1 つのメッセージが受信されると、マイコンはエッジ障害割り込みによってウェークアップされます。次に、MCAN RX ピンを MCAN 機能として再構成し、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();
}