こんにちは、NXPコミュニティの皆さん、
S32K144では、ランタイムフラッシュ消去/プログラム操作後にADC0/ADC1割り込みが停止します。
前回の質問の続きとして、S32K144におけるPDB ADCのプリトリガーシーケンスエラーから適切に復旧する方法について、いくつか説明が必要です。
以下の3つの方法を試しましたが、そのうち1つだけが正しく動作しました。
方法1(動作中):
この方法を用いると、PDB配列のエラーは発生しない。
方法2:
フラッシュメモリの消去/書き込み操作が完了した後、PDB0とPDB1を停止して再起動しました。しかし、PDBプレトリガーシーケンスエラーが発生しました。そこで、PDBモジュールを停止して再起動することで復旧を試みましたが、シーケンスエラーは解消されませんでした。
方法3:
方法3(効果なし):
フラッシュ消去/書き込み操作中、PDB0とPDB1を停止または再起動しませんでした。その代わりに、操作が完了した後、保留中のPDB ISRとADC ISRがそれぞれ1つずつトリガーされました。
PDB ISR内で、以下の方法でシーケンスエラーフラグをクリアしようと試みました。
PDB0->CH[0].S &= (uint32_t)(~PDB_S_ERR_MASK);
対応するADC割り込みサービスルーチンが実行され、ADC結果レジスタを読み取ることでCOCOフラグがクリアされた。これでさらなるプリトリガーシーケンスエラーを防ぐつもりでしたが、問題は依然として解決せず、この方法はうまくいきませんでした。
こんにちは、
PDB_S_ERRをクリアするだけでは、ADC/PDBシーケンスが既に同期していない可能性があるため、プリトリガーシーケンスエラーからの回復には通常不十分です。テスト結果に基づくと、フラッシュ処理の前にPDBを停止し、処理後に再起動することで、この問題を回避するのが最も確実な方法であると思われます。
エラー発生後に復旧を試みる場合は、PDBとADCの両方の状態が完全に再同期されていることを確認することをお勧めします。これには、PDB の無効化、保留中の PDB ステータス フラグのクリア、保留中のすべての ADC 変換結果が読み取られていることの確認 (COCO がクリアされていること)、PDB の再有効化、および再開をトリガーする前に必要に応じて構成の再読み込みが含まれる場合があります。
RMによると、プレトリガーロックは対応するCOCOフラグが設定されたとき、プリトリガーが無効化されたとき、またはPDBが無効化されたときに解除されるため、完全なPDB無効化・有効シーケンスも検討する価値があるかもしれません。
BR、ペトル