こんにちは、
私はS32K344 WBの「s32k3_wb_can」プロジェクトのコードを自分のプロジェクトに移植しています。CAN0のTXピンとRXピンはWBの設計と同じです(CAN0_RX:PTA6、CAN0_TX:PTA7)。CAN0はCANクラシックモードで動作しますが、CANBoxはCAN信号を検出できません。
「s32k3_wb_can」プロジェクトのデバッグを試みたところ、「CAN0_ISRCallback」関数が一度も呼び出されていないことがわかりました。s32k144のデモコードを確認したところ、「CAN0_Callback_Func」関数が「CAN_InstallEventCallback(&can_pal0_instance,&CAN0_Callback_Func,(void*)0);」で呼び出されてインストールされているようですが、S32K344の「s32k3_wb_can」プロジェクトにはそのようなインストール手順がないようです。
私はS32K344 WBボードを持っていないため、WBの実際の動作状況を確認できません。「s32k3_wb_can」プロジェクトでcan0を実行させる方法を知りたいです。
添付ファイルは私のプロジェクトファイル「s32k3_wb_can.zip」です。プロジェクトのサイズを小さくするために、「Debug_FLASH」サブフォルダを削除します。私のCANは8ピンCANチップのサンプルで、STBはデフォルトでローレベルなので、CAN0_RX/CAN0_TXのみを操作します。何が問題なのか確認するのを手伝ってください。ありがとう。
こんにちは、 @Jimmybai さん。
CAN0はCANクラシックモードで動作しますが、CANBoxはCAN信号を検出できません。
これはどういう意味でしょうか?もう少し詳しく説明していただけますか?CAN Classicは動作しているのに、CAN FDは動作していないということでしょうか?あるいは、CAN Classicの機能を確認するにはどうすればよいでしょうか。
「s32k3_wb_can」プロジェクトのデバッグを試みたところ、「CAN0_ISRCallback」関数が一度も呼び出されていないことがわかりました。s32k144のデモコードを確認したところ、「CAN0_Callback_Func」関数が呼び出され、インストールされているようです。
FlexCANのIRQとハンドラを有効にするには、以下のAPIを使用できます。
IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn);
IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR);
しかし、これは既に実行中のIntCtrlドライバの初期化によって有効になっているはずです。
retCode = IntCtrl_Ip_Init(&IntCtrlConfig_0);
retCode = IntCtrl_Ip_ConfigIrqRouting(&intRouteConfig);
コールバックのインストールは、FlexCANの初期化処理内で、宣言したコールバックに対して行われます。
コールバックがトリガーされないもう一つの理由は、有効なRxフレームが受信されていないことです。オシロスコープを使ってCANバスの波形を観測してみましたか?
wb_canのサンプルをテストする代わりに、RTDパッケージに含まれているFlexCAN_Ip_Example_S32K344を使ってみましたか?
あるいは、コミュニティで共有されている例をいくつか挙げると次のようになります。
よろしくお願いします、
ジュリアン
ちなみに、サンプルプロジェクトはS32K344 WBのサンプルフォルダ---S32K344_Whiteboard_Example(LLD)_RTM_1.0.0から取得しました。