iMX27の低消費電力モードについて言及するときは、リファレンスマニュアルに矛盾があります。私は、これらの低消費電力モードに正しく入るようにCPUとクロックを設定するdoze()とsleep()の2つの機能を持っていますが、マニュアルの例は機能していないようです。私はLinuxのカーネルコードを調べましたが、それは助けとなりましたが、誰かがこれらの機能のためのコード(アームアセンブリが最も良い)を既に持っているかどうかここで尋ねると思いました。iMX27(ARM926)にDOZEモードとSLEEPモードを入力するにはどうすればよいですか?
DOZE: Dozeモードは、ARM9がMCUにバッファクロック供給がオフされた後、割り込み命令を待つを実行することとして定義されます。次のようにモードをDoze状態にシステムを設定するための操作の 配列は:
- はDozeモードからのウェイクアップのための所望の割り込みを有効にします。
- ウォッチドッグタイマ割り込みをディセーブルします。
- 割込み待ち命令を実行します。
SLEEP:
スリープモードは、すべてのDPLLクロック出力が無効になっているときのように定義されます。システムがMPLLおよびSPLLをオフにするには、一連の操作および基準が満たされていなければなりません。スリープモードシーケンスは、CSCRレジスタのMPENビットがクリアされてMPLLがディセーブルされると開始されます。このアクションは自動的にSPLLもオフにします。 システムをスリープモードにする順序は次のとおりです。
- バスアクセスからAHB周辺機器を無効にします。
- システムウェイクアップに使用する割り込みを有効にします。
- ウォッチドッグタイマ割り込みをディセーブルします。
- シャットダウンカウントダウンのために必要な値をSD_CNT(CSCRレジスタ)に設定します。
- MPENビット(CSCRレジスタ)をクリアしてMPLLをディスエーブルにします。
- 割込み待ち命令を実行します。
おかげ
例のコードが機能しない(おそらく)か、タイマーなどのシステム内の何かが割り込みを生成してすぐに起きるようになっていますか?ウェイクアップを起こしたくない割り込みや周辺機器を無効にする必要があるかもしれません。 – Clifford