SH-Tiny テクニック
割り込みはマイコンでは必須の機能といっていいでしょう。
ものすごく大雑把に説明すると、
割り込みハンドラは、HEWによって自動生成されたintprg.cというファイルに用意されています。
※更新が滞っているため、先にサンプルだけ置いておきます。動作未検証。
割り込みはマイコンでは必須の機能といっていいでしょう。
ものすごく大雑把に説明すると、
割り込みの設定をする → タイマなどの周辺モジュールが割り込みフラグを立てる → 対応した割り込みハンドラが呼び出されるという流れになります。
割り込みハンドラは、HEWによって自動生成されたintprg.cというファイルに用意されています。
※更新が滞っているため、先にサンプルだけ置いておきます。動作未検証。
- (プロジェクト名).c
#include <machine.h> #include "iodefine.h" volatile unsigned int timecount = 0; //時間のカウント //タイマー割り込みハンドラからこの関数を呼び出し、処理を行う void timer_call(void){ CMT0.CMCSR.BIT.CMF &= 0; //割り込みフラグのクリア timecount++; //時間のカウントをインクリメント } //タイマー割り込みを利用してウェイト void timer_wait(unsigned int ms){ unsigned int startcount; volatile int i; startcount = timecount; while(timecount - startcount < ms){ for(i=0;i<50;i++) ; } } void main(void) { CPG.FRQCR.WORD = 0x16db; // Iφ=PLL/2,Bφ=PLL/4,Pφ=PLL/4,MPφ=PLL/4 // Iφ=48MHz,Bφ=24MHz,Pφ=24MHz,MPφ=24MHz STB.CR4.BIT._CMT = 0; //CMT モジュールスタンバイ解除 PFC.PECRL1.BIT.PE1MD=0x00; //IO端子に設定 PFC.PEIORL.BIT.B0 = 1; //出力端子に設定 INTC.IPRJ.BIT._CMT0 = 0x0F; // 割り込み優先度設定 set_imask(0); //全体の割り込み許可 CMT0.CMCSR.BIT.CMIE = 1; //CMTの割り込み許可 CMT0.CMCSR.BIT.CKS = 0; //φ/8 = 3MHz CMT0.CMCOR = 3000; //1ms周期で割り込み CMT.CMSTR.BIT.STR0 = 1; //CMTカウントスタート //1秒周期でLED点滅 while(1){ timer_wait(500); //500ミリ秒待機 PE.DRL.BIT.B0 ^= 1; //出力を反転 } }
- intprg.c
#include <machine.h> #include "vect.h" void timer_call(); //この関数宣言を追加 ..... void INT_CMT0_CMI0(void){ timer_call(); }
最新コメント