この文書の現在のバージョンと選択したバージョンの差分を表示します。
exercise4_タイマー割り込みcmt [2015/03/01 15:18] member |
exercise4_タイマー割り込みcmt [2016/03/08 18:58] (現在) member |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | ======Exercise4 タイマー割り込み====== | ||
+ | |||
注意 | 注意 | ||
- | タイマー割り込みを実行するためにはinterrupt_handlers.cの385行目あたりを以下のように書き換えてください(HEWであればintprg.cに載っています) | + | タイマー割り込みを実行するためには**interrupt_handlers.c**の385行目あたりを以下のように書き換えてください(HEWであればintprg.cに載っています) |
<code c> | <code c> | ||
void interrupt_cmt0(void); | void interrupt_cmt0(void); | ||
- | #pragma interrupt INT_CMT_CMTO | + | #pragma interrupt INT_CMT0_CMIO |
void INT_CMT0_CMI0(void){ | void INT_CMT0_CMI0(void){ | ||
interrupt_cmt0(); | interrupt_cmt0(); | ||
ライン 11: | ライン 13: | ||
</code> | </code> | ||
- | さて、タイマー割り込みとは何でしょう。 | + | ただし、e2studioを使っている場合は、次のとおり書き換えてください。 |
+ | |||
+ | <code c> | ||
+ | void interrupt_cmt0(void); | ||
+ | void INT_CMT0_CMI0(void){ | ||
+ | interrupt_cmt0(); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | また、**reset_program.c**の21行目のSR_Initの0x000000F0を0x00000000にしましょう。 | ||
+ | |||
+ | |||
+ | さて、**タイマー割り込み**とは何でしょう。 | ||
今まで書いてきたプログラムは、上から下まで順に実行する(サブルーチンはその通り飛ぶとして)ものです。 | 今まで書いてきたプログラムは、上から下まで順に実行する(サブルーチンはその通り飛ぶとして)ものです。 | ||
ライン 27: | ライン 42: | ||
何かのアプローチがあって割り込みが入る場合もありますが | 何かのアプローチがあって割り込みが入る場合もありますが | ||
今回は、時間で割り込みをかけてみたいと思います。 | 今回は、時間で割り込みをかけてみたいと思います。 | ||
- | 1sごとに指定された割り込み文を実行する、などと言うことです。 | + | 1msごとに指定された割り込み文を実行する、などと言うことです。 |
ライン 34: | ライン 49: | ||
タイマー割り込みをつかうには、初期設定が必要です。 | タイマー割り込みをつかうには、初期設定が必要です。 | ||
- | main文の上のほうに初期設定を以下のように書きます。 | + | main文の上のほうに1msで割り込むCMTの初期設定を以下のように書きます。 |
<code c> | <code c> | ||
ライン 48: | ライン 63: | ||
CMT0.CMCSR.BIT.CMIE = 1; //割り込みイネーブル許可 | CMT0.CMCSR.BIT.CMIE = 1; //割り込みイネーブル許可 | ||
CMT0.CMCSR.BIT.CKS = 0; //1/8 | CMT0.CMCSR.BIT.CKS = 0; //1/8 | ||
- | CMT0.CMCSR.BIT.CMF = 0; //フラグを0 | + | CMT0.CMCSR.BIT.CMF = 0; //フラグをクリア |
CMT0.CMCOR = 5000; //割り込み周期 | CMT0.CMCOR = 5000; //割り込み周期 | ||
INTC.IPRJ.BIT._CMT0 = 0xf;//割り込み優先度(15) | INTC.IPRJ.BIT._CMT0 = 0xf;//割り込み優先度(15) | ||
ライン 66: | ライン 81: | ||
void interrupt_cmt0(){//割り込む関数 | void interrupt_cmt0(){//割り込む関数 | ||
- | CMT1.CMCSR.BIT.CMF = 0;//フラグ0 | + | CMT0.CMCSR.BIT.CMF = 0;//フラグクリア |
//中身 | //中身 | ||
- | |||
} | } | ||