2203724_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2203724_ja-JP

2203724_ja-JP

S32k144: FlexCAN、メールボックスIDの更新

こんにちは、


私は s32k144、特に FlexCAN ドライバに取り組んでいます。コントローラーを初期化しました。すべて正常に動作しています。ここで、実行時に 2 つのメールボックスの CAN ID を更新する必要があります。1 つ目は、受付のメールボックスです。問題ありません。2番目は、送信中のメールボックスで、IDを変更することは不可能であり、初期IDが引き続き使用されます。手伝ってもらえますか ?

これは私の再初期化コードの抜粋です

CAN_CHAN->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: クロックを選択する前にモジュールを無効にする */
CAN_CHAN->MCR |= CAN_MCR_FRZ_MASK; /* MDIS=1: クロックを選択する前にモジュールを無効にする */
CAN_CHAN->MCR |= CAN_MCR_HALT_MASK; /* MDIS=1: クロックを選択する前にモジュールを無効にする */
CAN_CHAN->CTRL1 &= ~CAN_CTRL1_CLKSRC_MASK; /* CLKsrc=0: クロックソース = 発振器 (8 MHz) */
CAN_CHAN->MCR &= ~CAN_MCR_MDIS_MASK; /* MDIS=0; モジュール構成を有効にします。(FRZ、HALTを設定)*/
while (!((CAN_CHAN->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT)) {}

CAN_CHAN->RAMn[16] = 0x00000000;
CAN_CHAN->RAMn[17] = 新しいID;

CAN_CHAN->MCR &= 0x007FFFFF;
((CAN_CHAN->MCR && CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT) の間 {}
/* 良い方法: FRZACK がクリアされるまで待つ (フリーズモードではない) */
while ((CAN_CHAN->MCR && CAN_MCR_NOTRDY_MASK) >> CAN_MCR_NOTRDY_SHIFT) {}
/* 良い方法: NOTRDY がクリアされるまで待つ (モジュールの準備完了) */

Re: S32k144: FlexCAN, mailbox ID update

こんにちは@Julien_GIMAさん

新しい ID を構成する前に、メールボックスはアクティブでしたか?TX MB がアクティブ化されている場合 (CODE が DATA に設定されている場合)、ID フィールドはロックされます。

クックブックでは、TX MB を構成するときに CODE が非アクティブであると想定しています。

Snag_59b8c0.png

アクティブな場合は送信を中止し、MB を INACTIVE に設定し、ID を更新して、TX のコードを再設定することができます。

よろしくお願いします、
ジュリアン

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 11:16 PM
更新者: