2011-12-18 9 views
0

iMX27の低消費電力モードについて言及するときは、リファレンスマニュアルに矛盾があります。私は、これらの低消費電力モードに正しく入るようにCPUとクロックを設定するdoze()とsleep()の2つの機能を持っていますが、マニュアルの例は機能していないようです。私はLinuxのカーネルコードを調べましたが、それは助けとなりましたが、誰かがこれらの機能のためのコード(アームアセンブリが最も良い)を既に持っているかどうかここで尋ねると思いました。iMX27(ARM926)にDOZEモードとSLEEPモードを入力するにはどうすればよいですか?

DOZE: Dozeモードは、ARM9がMCUにバッファクロック供給がオフされた後、割り込み命令を待つを実行することとして定義されます。次のようにモードをDoze状態にシステムを設定するための操作の 配列は:

  1. はDozeモードからのウェイクアップのための所望の割り込みを有効にします。
  2. ウォッチドッグタイマ割り込みをディセーブルします。
  3. 割込み待ち命令を実行します。

SLEEP

スリープモードは、すべてのDPLLクロック出力が無効になっているときのように定義されます。システムがMPLLおよびSPLLをオフにするには、一連の操作および基準が満たされていなければなりません。スリープモードシーケンスは、CSCRレジスタのMPENビットがクリアされてMPLLがディセーブルされると開始されます。このアクションは自動的にSPLLもオフにします。 システムをスリープモードにする順序は次のとおりです。

  1. バスアクセスからAHB周辺機器を無効にします。
  2. システムウェイクアップに使用する割り込みを有効にします。
  3. ウォッチドッグタイマ割り込みをディセーブルします。
  4. シャットダウンカウントダウンのために必要な値をSD_CNT(CSCRレジスタ)に設定します。
  5. MPENビット(CSCRレジスタ)をクリアしてMPLLをディスエーブルにします。
  6. 割込み待ち命令を実行します。

おかげ

+0

例のコードが機能しない(おそらく)か、タイマーなどのシステム内の何かが割り込みを生成してすぐに起きるようになっていますか?ウェイクアップを起こしたくない割り込みや周辺機器を無効にする必要があるかもしれません。 – Clifford

答えて

1

本当にDozeモードに入るまであまりありません(Cで(ASMでこのコードを囲む);):

 " MCR p15, 0, r1, c7, c0, 4 \n" 

はあなたのためのトリックを行います。まず、必要な割り込みをすべて設定する必要があります。

は、スリープモードの場合は、ここで#+ 268435456はCSCRレジスタのアドレスであるいくつかのアセンブリ

  " MOV R0,#+268435456 \n" 
     " ORR R0,R0,#0x27000 \n" 
     " LDR r1, [r0, #0x0] \n" 
     " ORR r1, r1, #0x01000000 \n" 
     " STR r1, [r0, #0x0] \n" 
     " BIC r1, r1, #0x00000001 \n" 
     " STR r1, [r0, #0x0] \n" 
     " MCR p15, 0, r1, c7, c0, 4 \n" 

です。このコードは、SD_CNTを1に設定し、MPLLを無効にして、WFIに入ります。繰り返しますが、最初に割り込みを設定し、すべての周辺機器を無効にする必要があります。

関連する問題