こんにちは、NXPさん
私はスリープウェイクアップアプリケーションに取り組んでいます。スタンバイウェイクアップ用のウェイクアップスリープ構成を構成しました。
私の質問は、スタンバイ ウェイクアップから機能をリセットした後、ウェイクアップ ソースをどのように知ることができるかということです。
こんにちは@aryandis 、
ウェイクアップ後、WISR/WISR_64 レジスタを読み取って、ウェイクアップの原因となったソースを特定CAN。スタンバイ終了後も値はそのまま保持されるため、スタンバイ RAM に保存したり、高速スタンバイ終了を使用したりする必要はありません。
Mcu_GetResetReason() は、前回のリセットがスタンバイ終了だったか、その他のリセット (HW、SW、WDG など) だったかを返しますが、ウェイクアップ ソース用の API はありません。
レジスタを読み取る場合は、メイン ルーチンがレジスタを保存する前にクリアしないようにし、立ち下がりエッジを使用する場合はパッド保持を有効にする必要があることに注意してください (このコミュニティ投稿を参照してください: Solved: WISR_64 no correct after wakeup from fast standby mode on S32K312 - NXPコミュニティ )。
コミュニティからの低電力の例をCAN参照できます。
MCAL レイヤーは、ウェイクアップ ソースを報告する EcuM モジュールも提供しますが、RTD パッケージは EcuM のスタブ ファイルのみを提供します。これらは参照用として使用することを目的としており、アプリケーションのニーズに応じて変更/置換できます。
よろしくお願いします、
ジュリアン
私は Autosar スタックを使用しているため、ウェイクアップ ソース ID が必要です。
機能リセット後にスタンバイ ドメインに保存するために WISR/WISR_64 値を構成するにはどうすればよいですか?
CANどのように設定すればよいか教えていただけますか。
こんにちは@aryandis 、
はい、これはWkpu_Ip_GetInputState() を呼び出し、対応する WKPU チャネルが設定されている場合は TRUE を返し、フラグをクリアします。
ウェイクアップ (スタンバイ終了) 後、NVIC レジスタはデフォルトにリセットされます (すべてのペリフェラル割り込みが無効になります) が、WKPU レジスタの値と以前の状態は保持されます。したがって、ウェイクアップ後にプラットフォーム関数を呼び出してウェイクアップの割り込みを有効にすると(WKPU_IRQn に NVIC_ ISER を構成する)、プログラムはウェイクアップ割り込み関数にジャンプし、どのウェイクアップ ソースが発生したかを判別できます。
ウェイクアップ後の実行モードでウェイクアップの割り込みを有効にするプラットフォーム関数を呼び出さない場合は、Wkpu_Ip_GetInputState() 関数を呼び出してウェイクアップ ソースを判別できます。
ウェイクアップ後に直接レジスタを読み取るCAN。
よろしくお願いします、
ジュリアン
はい、質問が1つあります。
EcuMモジュールを有効にし、EcuM_CheckWakeup()内でIcu_Checkwakeup()を呼び出しました。しかし、ICUウェイクアップイベント情報が発生してもEcuM_CheckWakeup()をトリガーできないという問題があります。(チャネル状態がRUNNINGであるため、EcuM_CheckWakeup()を呼び出すことができないためです。)
EcuM_CheckWakeup() をどのようにトリガーすればよいですか?
ISR と同じウェイクアップ ピンを作成して、EcuM_CheckWakeup()->Icu_CheckWakeup() を呼び出してビット ステータスを WAKEUP_STATE に設定し、EcuM_SerWakeupEvent() を呼び出すことはできますか?
ISR として CAN 場合、どうすれば CAN できますか?
こんにちは@aryandis 、
申し訳ありませんが、おっしゃる通りです。Icu_Init() 関数を呼び出すと、プラットフォーム 関数を呼び出す前に割り込みフラグがクリアされ、現在のモードが ICU_NORMAL_MODE に変更されます。SO、それ以前に Icu_Init() を呼び出すことはできません。これはドライバの制限のようです。社内チームにフィードバックをお願いします。
また、Icu_GetInputState() 関数内では、Icu_Init() 関数によって初期化する必要があるグローバル変数を使用します。このような状況では、Wkpu_Ip_GetInputState() 関数を呼び出して WISR または WISR_64 のステータスを確認してクリアするか、直接読み取ることができると思います。
よろしくお願いします、
ジュリアン
同じ問題をデバッグしたところ、ウォーム リセットのスタンバイ ウェイクアップ後の Icu_Init の開始時に ICU_NORMAL_MODE が設定されているため、ICU_CurrentMode が原因で EcuM_Checkwakeup が呼び出されなかったことがわかりました。
ウェイクアップ後に EcuM_Cehckwakeup が呼び出されるSOするにはどうすればいいですか?
こんにちは、Julian_AragonM さん。スタンバイウェイクアップ後に Icu_Init() で現在のモードを ICU_NORMAL_MODE に変更することに関して、チームに一度連絡していただけますか。これを回避するにはどうすればよいですか?
ウェイクアップ ソースは動作しており、ウェイクアップ後に Icu_ReportEvent が来ますが、Icu_CuurentMode 変数が原因で、Icu_Init() から ICU_NORMAL_MODE に初期化され、EcuM_CheckWakeup が呼び出されません。
EcuM_CheckWakeup は Icu_ReportwakeupAndOverFlow ICU ドライバから呼び出されています。
Icu_ReportwakeupAndOverFlow には、変数 Icu_CuurentMode から ICU_MODE_SLEEP マクロまでの条件チェックがあります。
こんにちは、 @aryandis さん。
Icu NORMAL モードでは、ウェイクアップ ソースの処理が妨げられることはありません。Icu が EcuM チェック ウェイクアップを妨げているコード部分を共有していただけますか?ICU モードに関係なく、Icu_CheckWakeup() が呼び出されることは CAN です。
社内チームからも返答がありました。
1.ご存知のとおり、Icu モジュールは、MCAL レイヤーでウェイクアップ ソースを直接チェックできる機能を提供していません。Icu はウェイクアップ ソース情報を EcuM モジュールに転送し、このモジュールはウェイクアップ ソースをチェックします。RTD ドライバでは、EcuM はスタブ モジュールであり、参照として使用することを目的としており、アプリケーションのニーズに応じて変更/置換できます。
ECU 状態マネージャの仕様は次のとおりです。
2. Icu 構成で、ユーザーが「IcuWkpuStandbyWakeSupport」を有効にすると、Icu_Init() は WISR フラグをクリアしません。
プロジェクトで、Wkpu_Ip レイヤーのウェイクアップ ソースを確認するには、以下のコードを参照します。
Icu_Init() 関数の前に Platform_Init(NULL_PTR); を呼び出すと、何らかの理由で WISR フラグが消去されることがわかりました。SO、この関数を Icu_Init() 関数の後に呼び出しました。
よろしくお願いします、
ジュリアン
はい、正解です。そして、 Icu_CheckWakeup () は、マッピングした EcuM_CheckWakeup から呼び出されます。また、EcuM_CheckWakeup は、RTD の Icu_ReportWakeupAndOverflow API から呼び出され、SLEEP_MODE をチェックする条件を持ちます。SLEEP_MODE なしで EcuM_CheckWakeup がどのようにトリガーされるか。
それとも、ISR から EcuM_Checkwakeup を呼び出す必要がありますか?
これはRTD 3.0.0のスナップショットです
こんにちは@aryandis 、
Icu_CheckWakeup () は、ウェイクアップ後に (通常は EcuM によって) 呼び出され、ICU がソースを検証し、それが有効かどうかを EcuM に通知できるようにするためのパブリック AUTOSAR ICU API です。ドライバがSLEEPモードにあるかどうかには依存しません。
こんにちは@aryandis 、
私の見解では、選択肢は 2 つあります。
1.スタンバイ終了後、EcuM ステート マシンが RUN に移行する前に、 EcuM_Checkwakeup () を呼び出します。これにより、スタンバイ中にウェイクアップ ソースが処理されます。ウェイクアップ ソースが有効な場合、ECU は RUN 状態に戻ります。
これは、ECU 状態マネージャの仕様に記載されています。
2. ISR コンテキストを介してこれを呼び出すと、ウェイクアップ ソースが直ちに処理されます。
よろしくお願いします、
ジュリアン