以前のリビジョンの文書です


注意

タイマー割り込みを実行するためには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.

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/attic/exercise4_タイマー割り込みcmt.1425185000.txt.gz · 最終更新: 2015/03/01 13:43 by member
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0