お世話になっております。
saと申します。
RX63N内蔵のCANモジュールを使用して標準IDと拡張IDの両方を受信できるようにしたいと考えております。
元々標準IDで送受信を行っていたプログラムを改造して拡張IDのCAN通信ができるように変更しました。
FIFOメールボックスモードを使用します。
マスクなど受信するCAN IDの条件はなしにしようとしています。
変更した点は下記の4点です。
①CAN1.CTLR.BIT.IDFM = 2に変更してミックスモードにする
②CAN1.FIDCR1.BIT.IDE = 1に変更して拡張ID受信対応へ
③マスクの条件はSIDもEIDもなしに設定
CAN1.MKR[7].BIT.SID = 0x000; // マスクビット設定CAN1.MKR[7].BIT.EID = 0x00000; // マスクビット設定
④アクセプタンス判別信号を1にするため、すべてのビットをoに設定
//FIDCR1 拡張IDCAN1.FIDCR1.BIT.SID = 0x000;CAN1.FIDCR1.BIT.EID = 0x00000;
この設定で標準IDの受信はできていますが、拡張IDの受信はできていません。
上記の設定で間違っている箇所や他に変更が必要な箇所がありましたら、ご教授頂きたいです。
また、足りていない情報がありましたら追記しますので教えて頂きたいです。
下記にCAN通信のレジスタ設定を抜粋致しました。
mCAN1初期化処理
// 制御レジスタ設定 CAN1.CTLR.BIT.BOM = 0; // バスオフ復帰モードノーマル(ISO11898-1準拠) CAN1.CTLR.BIT.MBM = 1; // FIFOメールボックスモード有効 CAN1.CTLR.BIT.IDFM = 2; // ミックスモード CAN1.CTLR.BIT.MLM = 0; // オーバライトモード CAN1.CTLR.BIT.TPM = 0; // ID有線送信モード CAN1.CTLR.BIT.TSPS = 3; // 8ビットタイムごと
// FIFO受信ID比較レジスタ設定 CAN1.FIDCR0.BIT.IDE = 0; // 標準ID 選択 CAN1.FIDCR0.BIT.RTR = 0; // データフレーム選択 CAN1.FIDCR1.BIT.IDE = 1; // 拡張ID 選択 CAN1.FIDCR1.BIT.RTR = 0; // データフレーム選択
CAN1通信開始処理
//FIDCR0は標準ID CAN1.FIDCR0.BIT.SID = 0x000; CAN1.FIDCR0.BIT.EID = 0x00000; //FIDCR1 拡張ID CAN1.FIDCR1.BIT.SID = 0x000; CAN1.FIDCR1.BIT.EID = 0x00000; //マスクはなし CAN1.MKR[6].BIT.SID = 0x000; // マスクビット設定 CAN1.MKR[6].BIT.EID = 0x00000; // マスクビット設定 CAN1.MKR[7].BIT.SID = 0x000; // マスクビット設定 CAN1.MKR[7].BIT.EID = 0x00000; // マスクビット設定
saさん NAKAといいます。下記の投稿が参考になりますでしょうか?RX621 拡張IDでのCAN通信 - 002: 初心者向けフォーラム - beginners - Renesas Community
NAKAさん
ご回答ありがとうございました。
スリープの解除など試してみたのですが、変わらず拡張IDの受信はできていません。
原因としてレジスタ設定で間違った理解をしている箇所があるのではないかと考えております。
「FIFO 受信 ID 比較レジスタ FIDCR」はマスクレジスタと同じ値を指定した場合、受信できるCAN IDの制限をなしとする認識なのですがこれは正しい認識でしょうか。
マスクレジスタと同じように0x0000の値を設定しています。
saさん NAKAです。RXではFIFOモードを使ったことがないのでわかりませんが、下記でFIFOで使うメールボックスのIDEビットを設定する必要がありませんか?何年もRX触ってないので、チラッとマニュアル見ただけです(^_^;)
記