「ルネサスの本気」、SH-2Aセミナーに行ってきました。LESSON1 SH-2とSH-2Aの比較6 [RX&SH&H8]
レジスタバンクの使用方法をかるーく解説します。
レジスタバンクの使用方法の選択は、
1.レジスタバンクなんて使うか!。
2.もう全面的に使用したいです。
3.特定の割込み優先度レベルのみ使おうかな!。
の3つになるかと思いますが、1番は初期状態でそうなので、以下で解説するレジスタに対しては特に何もせずに初期化を完了させてください。
レジスタバンクを使う為に必要なレジスタは最低、IBNRレジスタ、そしてIBCRレジスタの2つです。
2番の様に1~15までの優先度全てで使用する時はIBNRレジスタのBEbitに1を代入します。
ルネサスのヘッダー流儀で記述するとこうなります。
INTC.IBNR.BIT.BE=1;
3番の様に特定の優先度で使用する場合は以下になります。例えばレベル14以上で使うなら、
INTC.IBNR.BIT.BE=3;
INTC.IBCR.BIT.E14=1;
INTC.IBCR.BIT.E15=1;
※リセット直後はIBNRもIBCRも0クリアされています。
上記の設定は割込み開始時にレジスタバンクにレジスタの内容を保存する様に設定したのですが、実は割込みから戻る時はレジスタバンクからレジスタに書き戻す命令を自分で追加せねばなりません(笑)。
アセンブラで書けば、RTEの直前にRESBANKと言うSH-2Aで追加された命令を挿入するだけです。
C言語の場合は
#pragma interrupt 割込み関数名 (resbank)
とコンパイラディレクティブを記述する事でRTEの直前にRESBANKを追加してくれます。
次回「32bit命令編」で違いシリーズは終了かな。
レジスタバンクの使用方法の選択は、
1.レジスタバンクなんて使うか!。
2.もう全面的に使用したいです。
3.特定の割込み優先度レベルのみ使おうかな!。
の3つになるかと思いますが、1番は初期状態でそうなので、以下で解説するレジスタに対しては特に何もせずに初期化を完了させてください。
レジスタバンクを使う為に必要なレジスタは最低、IBNRレジスタ、そしてIBCRレジスタの2つです。
2番の様に1~15までの優先度全てで使用する時はIBNRレジスタのBEbitに1を代入します。
ルネサスのヘッダー流儀で記述するとこうなります。
INTC.IBNR.BIT.BE=1;
3番の様に特定の優先度で使用する場合は以下になります。例えばレベル14以上で使うなら、
INTC.IBNR.BIT.BE=3;
INTC.IBCR.BIT.E14=1;
INTC.IBCR.BIT.E15=1;
※リセット直後はIBNRもIBCRも0クリアされています。
上記の設定は割込み開始時にレジスタバンクにレジスタの内容を保存する様に設定したのですが、実は割込みから戻る時はレジスタバンクからレジスタに書き戻す命令を自分で追加せねばなりません(笑)。
アセンブラで書けば、RTEの直前にRESBANKと言うSH-2Aで追加された命令を挿入するだけです。
C言語の場合は
#pragma interrupt 割込み関数名 (resbank)
とコンパイラディレクティブを記述する事でRTEの直前にRESBANKを追加してくれます。
次回「32bit命令編」で違いシリーズは終了かな。
2010-02-01 23:01
nice!(0)
コメント(0)
トラックバック(0)
コメント 0