AVR スリープモード時のタイマ2の仕様

ピン変化割り込みのあたりから鬼門のAVRのスリープモード。
タイマ2はほかの周辺機器とスリープ時のクロック制御が独立していて、ほかの周辺機器が停止しているときでも動作および割り込み生成ができる。
非同期クロックを使用している場合は、Power-Saveモードでメインクロックが止まっていても、動作し続けるとのことだが、ATMEGA328のデータシートのTable 9-1によると、Power-Saveモードで、"Oscillators"の"Timer Oscillator Enabled"には"If Timer/Counter2 is running in asynchronous mode."という注意書きが付いていて発振器を動かし続けるには非同期モードで動かす必要があると読める、しかし、"Wake-up Sources"の"Timer2"には注意書きが付いて無くて、同期モードでも非同期モードでも動き続けると読める。


これについて、Section 9.6 Power-save Modeを読んだところ、

The Timer/Counter2 can be clocked both synchronously and asynchronously in Power-save mode.
If Timer/Counter2 is not using the asynchronous clock, the Timer/Counter Oscillator is stopped during sleep.
If Timer/Counter2 is not using the synchronous clock, the clock source is stopped during sleep.
Note that even if the synchronous clock is running in Power-save, this clock is only available for Timer/Counter2.

えーと、

  • 非同期の時→非同期クロックがTimer2を駆動、メインのクロックは停止し、供給されない
  • 同期の時→メインのクロックが停止せずTimer2を駆動するが、それ以外のブロックには供給されない。

ってことでいいのかな…?


いまいちすっきりしないが、たぶんいいんだろうと思う。


IDLE時にコアだけIDLEモードで停止+操作していないときに、Power-Downモードで完全停止の2段階を考えていたが、RC発振器のクロック使用時のPower-Saveモードから復帰は6クロックで出来るので、IDLEタスクでSLEEPしてCPUコアだけ止める代わりに、Power-SaveモードでRTC以外止めて、Tick割り込みで復帰という方法でもいいような気がしてきた。