前回に続き、PWMの設定を行います。
今回はPWMで使用する割り込み関数の設定と各種設定プログラムの関数化を行います。
PWM設定は爪車様の
SH7125でPWMサーボの制御を参考にしております。
割り込み動作の有効化
初期状態では割り込みを受け付けないように設定されているので、割り込みを有効化しておきます。
resetprg.cの36行目付近
#define SR_Init 0x000000
F0
を
#define SR_Init 0x000000
00
へ変更します。
割り込み関数の設定
前回の設定でMTU20のOVF割り込みが機能するようになりました。
割り込み動作自体は機能するのですが、割り込み動作が発生した時に
何を実行するかはまだ何も設定していません。
そこで、割り込み動作が発生した時に何を実行するかを設定していきます。
割り込み関数の実行について解説
SH7125では設定を行った
割り込み条件を満たしたときに、その割り込み条件に対して
特定の場所に記載された関数が実行されるように設定されています。
ハードウェアマニュアルの
割り込み例外処理ベクタテーブルの項によると
MTU20のOVF要因による割り込みTCIV_0は
ベクタ番号92にて実行されます。
これに相当する設定がSH7125のプロジェクトを作成した際に自動生成されている
vecttbl.cに記載されています。
MTU20のOVF割り込みが発生すると92番目の
INT_MTU2_0_TCIV0が実行されます。
この関数はvect.hで宣言され、実体は
intprg.cに記載されています。
で、intprg.cで
INT_MTU2_0_TCIV0を検索すると関数の実体が見つかりますが、
// 92 MTU2_0 TCIV0void
INT_MTU2_0_TCIV0(void){
/* sleep(); */}
となっており、関数の中身は
コメントしかないので結局
何も実行されません。
そこで、関数
INT_MTU2_0_TCIV0の中に
実行したい内容を記述しておけば目的の動作となります。
しかし、intprg.cに各割り込みにて
実行したい内容を片っ端から書いていくと、
行数が増えに増えて非常に読みづらくなります。
そこで、
実行したい内容をまとめて記述した関数を作成し、INT_MTU2_0_TCIV0の中にはその
1つの関数を実行するという1行だけ記述します。
これでintprg.cの中身は最小限に抑えられます。また、実行したい内容を割り込みの初期化処理等を記載した場所に並べて書くことができます。