低電力実行モードでRAMからcコードを実行しています(したがって、割り込みは処理されません)。このモードは、コード シーケンスによって有効になります。
- RAMにジャンプ
- SIM
- 内部フラッシュと電源レギュレータをオフにし、低速クロック ソース (LSE) に切り替えます。
- WFEモード(低電力待機モード)でいくつかの作業を行います
- 電源レギュレーターとフラッシュをオンにし、クロックソースを復元します
- リム
- ジャンプしてフラッシュ
したがって、正誤表に記載されている WFE 命令は問題ありません。この構成に問題があり、低電力待機モードで CPU ロックが永久に発生する可能性があります。
while nbit(TIM1_SR1,CC3IF) asm("wfe");
つまり、次のように分解されます。
000035 720252B602 BTJT TIM1_SR1, #1, 0xB6
00003A 728F WFE
タイマーからのイベントには確率的な性質があり、このコードは WFE 命令が実行された後に発生することを保証しません。
- BTJT 命令は 2 サイクルで実行され、長さは 5 です。
- 「フェッチ」状態が数サイクルで実行を一時停止するため、RAM から実行されるコードは連続していない可能性があります
私はマニュアル PM0044 を使用しており、26 ページにはかなりのテーブルが含まれています。
コードの実行が 3 サイクルで停止するケースが 2 つあります。したがって、非同期ウェイクアップ イベントが BTJT 命令と WFE 命令の間で発生しないかどうかはわかりません。
厳密な論理シーケンス (チェック条件 > wfe > ウェイクアップ イベント) を確保する方法はありますか?