AVRのPower-Downモード

今日の教訓:Power Downモードでもピン変化割り込みは有効。
アレゲな結果:PGA2320プリアンプの工夫したことは殆ど無駄骨


言い訳:
AVRは低消費電力のためにいくつかのスリープモードを持っていて、その中でも一番低消費電力になるのがすべてのクロックを止めて、非同期部分だけで動くPower Downモードをよく使ってる。
PGA2320プリアンプとかでも、オーディオ的(笑)にクロックはダメだろうと、INT0/INT1割り込みで復帰して動く→タイムアウトでスリープとやっていた。
AVRのリファレンスマニュアルには、"For INT1 and INT0, only level interrupt."と書いてあって、
レベル割り込みしかできない
→クロック止まってて微分回路が動かないから当たり前だよな
→だから微分回路を使ってるピン変化割り込みは動かないだろう
→だからINT0/INT1と差動出力A/B相を使ってローレベル割り込みだけでスリープから復帰するロジック+ピン変化割り込みは使わずにポーリングで監視
という考えで作ってた。


が、どうも今日試したところ、スリープ状態でもピン変化割り込みは効くみたいということがわかって、ドキュメントを読み直すと以下のような文を発見した。

Only an External Reset, a Watchdog System Reset, a Watchdog Interrupt, a Brown-out Reset, a 2-wire
Serial Interface address match, an external level interrupt on INT0 or INT1, or a pin change
interrupt can wake up the MCU. This sleep mode basically halts all generated clocks, allowing
operation of asynchronous modules only.

ピン変化割り込みも起こせると書いてある。


そもそも、わかってからマニュアルを見るとクロックが動いているはずのADC Noise Reductionなどの別のモードでも"For INT1 and INT0, only level interrupt."の注意書きがついているので、クロックとは関係ないところで制限がかかっている様子。


無駄なことをやっていたという反省と、これを活かせばもう少しよさげになるという希望で微妙な気分。
思い込みって怖い。