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参考資料

RX バッファ モード

RX は、SDK の現在のデモ プロジェクトにおいて FIFO モードとして構成されています。以下のセクションでは、バッファ モードで RX を使用する方法について説明します。

static const DL_MCAN_StdMsgIDFilterElement gMCAN0StdFiltelem = {
    .sfec = 0x7,
    .sft  = 0x0,
    .sfid1 = 3,
    .sfid2 = 0x0,
};
/* Configure Standard ID filter element */
DL_MCAN_addStdMsgIDFilter(MCAN0_INST, 0U, (DL_MCAN_StdMsgIDFilterElement *) &gMCAN0StdFiltelem);

RX バッファ モードは、フィルタ素子がRx バッファにストアとして、またはデバッグ メッセージとして構成されている場合に有効化されます。まず、.sfecfeca.a.0x7 のフィルタを追加します。.sft は .sfec が 0x7 として設定されている場合は関係ありません。.sfid1 はフィルタ ID で、受信メッセージ ID はこの ID と一致しなければ受信できません。.sfid2 は、受信メッセージの格納に使用する Rx バッファを構成します。

/* New message received by Rx Buffer (Filter matched) */
if(gInterruptLineStatus & DL_MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG){
    gInterruptLine1Status |= DL_MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG;
    DL_MCAN_getNewDataStatus(MCAN0_INST, &newDataStatus);    
    
    if(newDataStatus.statusLow) {
        /* Check Rx Buffer0 status */
        if(newDataStatus.statusLow & 0x1){
            DL_MCAN_readMsgRam(MCAN0_INST, DL_MCAN_MEM_TYPE_BUF, MCAN_RX_MSG_BUFFER_INDEX, 0U, &rxMsg);
            ProcessCanRxMsg(&rxMsg);
        }
        /* Check remaining Rx Buffer */
    }
    if(newDataStatus.statusHigh) {
        ; /* 32-63, not applicable in demo */
    }
    /* Clear all new data status */
    DL_MCAN_clearNewDataStatus(MCAN0_INST, &newDataStatus);
} 

フィルタ構成と一致するメッセージを受信すると、RX メッセージは 0 ~ 63 個の RX バッファに格納されます。まず、新しいデータ ステータスを取得します。RX バッファ 0 から RX バッファ 31 に新しいメッセージが受信されると、newDataStatus.statusLow の対応するビットが 1 に設定されます。RX バッファ 32 から RX バッファ 63 に新しいメッセージが受信されると、newDataStatus.statusHigh の対応するビットが 1 に設定されます。次に、RX バッファ 0 で新しいメッセージが受信されているかどうかを確認します。新しいメッセージがある場合は、MCAN_RX_MSG_BUFFER_INDEX の値を指定して DL_MCAN_readMsgRam() を呼び出して、RX メッセージを読み出します。この場合、RX バッファ 0 のインデックス値は 0 です。最後に、メッセージを処理した後、DL_MCAN_clearNewDataStatus() を呼び出して新しいデータ ステータスをクリアします。