以前のリビジョンの文書です
注意
タイマー割り込みを実行するためにはinterrupt_handlers.cの385行目あたりを以下のように書き換えてください(HEWであればintprg.cに載っています)
void interrupt_cmt0(void); #pragma interrupt INT_CMT_CMTO void INT_CMT0_CMI0(void){ interrupt_cmt0(); }
さて、タイマー割り込みとは何でしょう。
今まで書いてきたプログラムは、上から下まで順に実行する(サブルーチンはその通り飛ぶとして)ものです。 これが出来ればライントレースも大分近くなります。 頑張りましょう!
例えれば、 -Aさんと話す→(話し終わる)→Bさんと話す というようなものです。とりあえずひとつづつ消化しなくてはいけません。 これが割り込みというシステムを使うと、 -Aさんと話す→Bさんが話しかけてくる→Aさんに待ってもらう→Bさんと話す→(話し終わる)→Aさんとの話の続きをする と言う感じになります。 プログラム的には、main文で「Aさんと会話」、割り込み文で「Bさんと会話」と言う感じです。 つまり、同時に色々なことをしたいときに良く使うものです。 例のように「Bさんが話しかけてくる」というような 何かのアプローチがあって割り込みが入る場合もありますが 今回は、時間で割り込みをかけてみたいと思います。 1sごとに指定された割り込み文を実行する、などと言うことです。 実際にやってみる
まず、時間を使って割り込む事をタイマー割り込みといいます。 タイマー割り込みをつかうには、初期設定が必要です。
main文の上のほうに初期設定を以下のように書きます。
void initCMT(void) //CMT割込の設定 { STB.CR4.BIT._CMT = 0;//CMTスタンバイ解除 // (1)コンペアマッチタイマスタートレジスタ(CMSTR) CMT.CMSTR.BIT.STR0=0;// ステータスレジスタ 0:カウント停止, 1:カウント開始 // (2)コンペアマッチタイマコントロール/ステータスレジスタ(CMCSR) CMT0.CMCSR.BIT.CMIE = 1; //割り込みイネーブル許可 CMT0.CMCSR.BIT.CKS = 0; //1/8 CMT0.CMCSR.BIT.CMF = 0; //フラグを0 CMT0.CMCOR = 5000; //割り込み周期 INTC.IPRJ.BIT._CMT0 = 0xe;//割り込み優先度(15) }
Coming soon.