sleep命令
H8で省電力モードの制御を初めてやっている。
レジスタをスリープモードになるよう設定してsleep();
で寝るけど、
そこから起っきするところがまずうまくいかない。
アプリケーションノートちゃんと読んだら、
起きるときもsleep();なのね 笑
スタートはそんなところからorz
現在までの流れは
- 省電力をサブスリープで実現を断念←基板にサブクロックがついてなす。
- 省電力をスタンバイで実現を断念←基板に接続してる機器の電源制御が落ちちゃう。
- てことでスリープモードで行く方向で。。
省電力時は
do{ sleep(); counter--; }while(counter != 0x00) /* ...SYSSCRの設定 */ sleep();
という感じでちょいちょい様子を監視できる仕組みにするのが一般的だ。
ちなみにスタンバイモードのときはどうするんだろ
これはまた確認しよ
で、アプリケーションノート読んでてサブアクティブとスリープの違いがいまいち分からない。
人に説明しろって言われても出来ないー
てことで調べてみる
アクティブ
- 通常動作。
サブアクティブ
- システムクロックの発振を止めて、サブクロックでCPUを動作させるのがサブアクティブモード。
- CPUとサブクロックで動作可能な一部の周辺機能のみ動作する。
- 要はサブクロックで動くアクティブモードだね(まんま)
スリープ
- スリープはCPUが停止し、割り込み待ち状態に。
- 要は周辺機器オンリー動作モード(クロック設定可)だね
- クロックの設定は出来るけど、せいぜいφosc/64程度なので、サブスリープよりは電力食っちゃうよモードだね
- スリープはCPUが停止し、割り込み待ち状態に。
- サブクロックで動作可能な一部の周辺機能のみ動作する。
- 要はサブクロックで動く周辺機器オンリー動作モードだね
スタンバイ
- スタンバイはCPUに加え、内蔵周辺機能も停止。外部からの割り込み要求で復旧することができる。
- 本当の就寝モードだね
ウォッチモード
- ウォッチドッグタイマを用いた時計機能を実現するためのモード
- ウォッチドッグタイマが割り込み要求を発生すると以前のプログラム実行モードに復旧。
- システムの暴走などによりカウンタの値が書き換えられずオーバーフローするとLSI内部をリセットする。
- 暴走防止の番犬さんだね
モジュールストップモード(モジュールスタンバイ)
- 周辺機能のみ個別に停止できるモードで、モジュール毎に停止することができる。
- 周辺機能へのクロックの供給を停止することで消費電力を抑えることができる。
- 周辺機能を利用するためにはモジュールストップビットを0にクリアしなければならない。
- 初期状態はモジュールストップ状態。
- 使わないものの就寝設定だね
今日はここまで!
ねむすぎ