Previous: 10.4.3. WFI命令の実行 |
Up: 10.4. SLEEPモード |
Next: 10.5. STOPモード |
またサンプルプログラムでは、WFI命令の実行の前にターミナルにメッセージを送信していますが、その後50msほどの待ち時間を設けています。これはUSARTへの送信関数実行後すぐにWFI命令を実行してしまうと、送信が完了してしまわないうちにSLEEPモードに入るので、最後の文字が文字化けしてしまうからです。
EXTI割込みが発生するとRUNモードに復帰します。SLEEPモードではSRAMやレジスタの内容はすべて保持されています。そのためWFI命令を実行した次の行からそのままプログラムが再開します。
サンプルプログラムではEXTI割込みを利用してモードを移行させていますが、EXTIはチャタリングに敏感です。そこでボタンが押された直後は200msほど待ってから次の処理を行っています。この待ちが無いと、ボタンを1回押してSLEEPモードから復帰したつもりが、すぐにまたSLEEPモードに入ってしまうといった状態となります。一度実験してみてください。
このサンプルではSLEEPモードからEXTI割込みで復帰しましたが、兎に角割込みが発生しさせすればWFI命令から生じたSLEEPモードから復帰できます。そのためタイマで一定時間が経過したことを計測して割込みを発生させたり、シリアルポートにデータが送信されてきたことをきっかけとして割込みを発生させたりしてRUNモードに復帰させることもできます。
Previous: 10.4.3. WFI命令の実行 |
Up: 10.4. SLEEPモード |
Next: 10.5. STOPモード |