Lesson4

注意

タイマー割り込みを実行するためにはintprg.cの64行目あたりを以下のように書き換えてください

      __interrupt(vect=24) void INT_IMIA0(void) {/* sleep(); */int_imia0();}

タイマー割り込みとは何でしょう。

今まで書いてきたプログラムは、上から下まで順に実行する(サブルーチンはその通り飛ぶとして)ものです。
これが出来ればライントレースも大分近くなります。
頑張りましょう!

例えれば、 -Aさんと話す→(話し終わる)→Bさんと話す
というようなものです。とりあえずひとつづつ消化しなくてはいけません。
これが割り込みというシステムを使うと、
-Aさんと話す→Bさんが話しかけてくる→Aさんに待ってもらう→Bさんと話す→(話し終わる)→Aさんとの話の続きをする
と言う感じになります。
プログラム的には、main文で「Aさんと会話」、割り込み文で「Bさんと会話」と言う感じです。

つまり、同時に色々なことをしたいときに良く使うものです。
例のように「Bさんが話しかけてくる」というような
何かのアプローチがあって割り込みが入る場合もありますが
今回は、時間で割り込みをかけてみたいと思います。
1sごとに指定された割り込み文を実行する、などと言うことです。

実際にやってみる

まず、時間を使って割り込む事をタイマー割り込みといいます。
タイマー割り込みをつかうには、「ITU0~4」の設定が必要です。
例えば、ITU0をつかうには

      ITU0.TCR.BYTE=0x23; 
      ITU0.TSR.BYTE=0x00;
      ITU0.TIER.BYTE=0x01;
      ITU0.GRA=390;

のような初期化(設定)が必要です。
それぞれの意味は赤い本のITU(タイマー割り込み)の所を見て理解してください。

とりあえず、初期化すると
GRAで指定したクロック(時間)ごとに

void int_imia0 (void) {
      ITU0.TSR.BIT.IMFA = 0;     
   //割り込みで実行したい内容
}

が自動で実行されるようになっています。
最初の一行はそういうものだと思ってください。
タイマー割り込みはコレだけです。

ココまでわかれば課題です。
1秒おきにLEDを点滅させるプログラムを作ってください。
これは、例もありますし余裕かと思います。

それができたら
0.5秒おきにLEDを点滅させるプログラムを作ってみましょう。

余裕があれば、右から順番に0.5秒おきについていく、なんてプログラムも面白いと思います。

追記 設定すべきGRAの簡単な決め方

GRA = (計りたいミリ秒)*(cpu周波数KHz)/(分周比)
分周比は1,2,4,8等の整数とします
分周比はITU0.TCR.BIT.TPSCで設定してください
詳しくは赤い本を見てください

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/pages/lesson4_タイマー割り込み.txt · 最終更新: 2013/05/12 17:45 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