Hi、武です。
今RL78マイコンを勉強しています。RL78/G12で規定された時間にLEDを点灯したい。ですので時間のDelay関数が必要かなと思います。
使用環境CS+ for CA/CXです。タイマのチャンネル2を使い、インターバル時間は1msを設定しています。
r_cg_timer_user.cのコード:
uint16_t counter_timer2 = 0;
__interrupt static void r_tau0_channel2_interrupt(void){ counter_timer2 ++;}
中断ファイルc_cg_intc_user.cのコード:
extern uint16_t counter_timer2;
void delay_ms_1(uint16_t dlms){ counter_timer2 = 0; R_TAU0_Channel2_Start(); while(counter_timer2 < dlms); R_TAU0_Channel2_Stop();}
ただし、動かないです。理由はタイマが起動されでも、void delay_ms_1のWhileのcounter_timer2 が変わらない。0のままです。Loopから抜かれないです。
どう修正すれば正しいDelayができるか教えていただきたいと思います。
チョコです。
実は、紹介したサンプルコードは、多重割り込みを使用しないで、同じようなことを実現しようとしています。下に示すINTP0割り込み処理の中で、タイマ割り込みをHALTモードの解除に利用して、タイマ割り込みでの実処理部を普通の関数にしてあるので、その関数を呼び出すことで、INTP0割り込み処理の中で、タイマ割り込み処理を実現しています。
個人的には、このようなやり方(長い期間割り込み処理の中に留まる)は好きではない(と言うよりやってはいけない)のですが、このようなことを行えば(サンプルコードを参考にすれば)、武さんのやりたいことはそれほど難しくなく実現はできますよ。
それよりは、多重割り込みを使いこなす方が常道です。
以上