こんにちは、皆さん
現在、 PCA2131 オートモーティブ RTC をバッテリー管理システム(BMS)に統合しているところで、周期的な中断発生に不安定な問題が発生しています。
問題の説明:定義された間隔(例:X分ごと)で割り込みを発生させようとしています。根本的な問題は、その動作が非常に不安定であることだ。
場合によっては、割り込みが期待どおりに発生する。
時々 、カウンターが本来の速度の約4倍の速さで動作しているように見えることがあります。
場合によっては、割り込みが完全に無視されることがあります。
この問題はランダムに発生するため、根本原因の特定に苦慮しています。
テストと観察結果:
ハードウェア: 3~4種類の異なるRTCサンプルをテストしましたが、この異常な動作は複数のユニットで確認されています。
クロック構成:デフォルトの32.768kHzクロックに加え、16kHzおよび8kHzの構成についても評価しました。
割り込み間隔: 1分、2分、5分の間隔でテストしました。
結果:タイミングの不安定性は、これらのバリエーション全体にわたって持続する。
依頼:参考までに、回路図と取得した波形を添付しました。
添付ファイルを確認して、何が原因なのか理解する手助けをしていただけますか?この断続的なタイミング不安定性の原因となる特定のレジスタ構成、既知のエラッタ、ノイズやハードウェアの状態についてのご意見をいただけるとありがたいです。
サポートありがとうございます。
こんにちは!
以下の点を確認していただけますか?
ISR内では、必ずMSF(Control_2の7番目のビット)に0を書き込みます。データシートの7.11.5節に記載されているAND書き込みメソッド(0を書き込むとクリア、1を書き残す)を使います。
結果を教えてください。
ご指示いただいた通りに確認しました。そのため、アラームが作動した時とアラームが解除された後に、CTRL_REG_1とCTRL_REG_2のスクリーンショットを撮ります。
こんにちは、
AEN_x = 1に設定してアラームコンパレータを無効化する書き込みはコメントアウトされます。5行すべてコメントを解除してください。これらの書き込みは、次の警報を再作動させる前に実行されなければなりません。
アラームトリガーのスクリーンショットでは、生のレジスタ値 ctrl2.w= 18 (0x12 = 0001 0010 バイナリ) は正しく以下を表示します:
しかし、構造体フィールド ctrl2.b.af はデバッガで 0 と表示されます。つまり、Control_2のCビットフィールド構造体定義では、AFフィールドをビット4に正しくマッピングしていないということです。もしファームウェアのどこかがハードウェア割り込みラインRTC_ALarm_Flagやソフトウェア変数の代わりに ctrl2.b.af に分岐すると、アラームを検出できず、割り込みを見逃すことが完全に説明されます。これが割り込みの欠如症状の説明になります。
Control_2レジスタ構造体のビットフィールド定義を確認し、修正してください。afフィールドはビット位置4で宣言しなければなりません。
こんにちは、 ErikaC さん、
レビューありがとうございます。
ご要望どおり、AEN_xに関する5行のコメントを解除しました。
ビットフィールドの定義を確認しましたが、正しいです。「アラームトリガー」画像では、ctrl2.b.af ビットが正常に 1 に設定されます。「アラーム解除」画像では、0にリセットされます。ビットフィールドは期待どおりに動作しています。