お客様企業*: HERO MOTOCORP - 正規化
プロジェクト名*: 該当なし
お客様お問い合わせ*(氏名とメールアドレス): Aryan Kumar [email protected]
SWパッケージ情報*: S32K3_S32M27x リアルタイム・ドライバ ASR R21-11
HW* (ボード/チップセット/プラットフォーム): S32K3XX (S32K344)
SWバージョン*:バージョン6.0.0
チームの皆様、
MCAL でスタンバイ終了後のウェイクアップ ソースを知りたいというお客様がいます。プロセスと使用する API について説明している別の投稿を見ました。基本的に、Dan は (この投稿:解決済み: S32K3 MCAL RTD5.0.0 での WISR に関する質問 - NXP コミュニティ) 、Icu_Init() が Platform_Init() の前に呼び出されるとフラグがクリアされる、つまりコールバックでウェイクアップ ソースをチェックすることは RTD の制限のように見えると述べています。
また、Icu_GetInputState() は、Icu_Init() によって初期化する必要があるグローバル変数を使用します。つまり、お客様は WISR フラグをチェックするために Wkpu_Ip_GetInputState() 関数を呼び出すことしかできません。
SO、私が正しく理解していれば、ウェイクアップ ソースを読み取る方法は 3 つあります。
1. スタンバイ終了後にプラットフォームを有効にすると、MCU は WKPU_IRQn にジャンプし、WKPU チャネルを処理します。コールバックが必要な場合、お客様は Wkpu 構造を割り当てることで回避策を実装できます。
Wkpu_Ip_u32ChState[0].chInit = TRUE;
Wkpu_Ip_u32ChState[0].notificationEnable = TRUE;
Wkpu_Ip_u32ChState[0].WkpuChannelNotification = IcuSignalNotification_Wkpu;
これは期待どおりに動作します。
2.スタンバイ終了後にWkpu_Ip_GetInputState()を呼び出します。Icu_GetInputState()はIcu_Init()の前に呼び出すことはできませんが、Icuの初期化によってWISRフラグがクリアされます。ただし、関数に入る際に、要求されたチャネルのWISRビットとIREERビットの両方が有効になっている場合、WISRはクリアされません。
私の理解が正しければ、これらは Icu_Init() の呼び出し時にクリアされる、ということでいいのでしょうか?
3. WISR/WISR_64 レジスタを直接読み取ります。
これら 3 つの方法では、ベアメタルまたは IP レイヤーのいずれかが使用されます。質問が2つあります。
これをテストするために使用したプロジェクトを添付しました。WKPU[42]が設定されています。SWはS32DS v3.6.4 + RTD 6.0.0です。
よろしくお願いします、
ジュリアン
こんにちは@DanNguyenDuy 、
迅速な対応をありがとう、ダン!お客様にお知らせ致します。
よろしくお願いします、
ジュリアン
こんにちは@Julián_AragónM 、
1. AUTOSAR 要件に従います。Icu モジュールは、MCAL レイヤーでウェイクアップ ソースを直接チェックできる機能を提供しません。Icu はウェイクアップ ソース情報を EcuM モジュールに転送し、このモジュールはウェイクアップ ソースをチェックします。RTD ドライバでは、EcuM はスタブ モジュールです。
「 ECU ステート マネージャー AUTOSAR CP R21-11 の仕様」に従います。
2. Icu 構成で、ユーザーが「IcuWkpuStandbyWakeSupport」を有効にすると、Icu_Init() は WISR フラグをクリアしません。
プロジェクトで、Wkpu_Ip レイヤーのウェイクアップ ソースを確認するには、以下のコードを参照します。
Icu_Init() 関数の前に Platform_Init(NULL_PTR); を呼び出すと、何らかの理由で WISR フラグが消去されることがわかりました。SO、この関数を Icu_Init() 関数の後に呼び出しました。
よろしくお願いいたします。
ダン