R8C(2E/2F)のタイマRCの割り込み処理では、割り込みフラグのクリアに注意が必要です。
タイマRA、タイマRBでは割り込み要因が一つしかないためIRレジスタ(sfr_r8xx.hではir_traic,ir_trbic)をクリアすれば、正しい割り込みサイクルになりますが、タイマRCは複数の割り込み要因(IMFA,IMFB,IMFC,IMFD,OVF)があるためタイマRC内の割り込み要因もクリアする必要があります。
#pragma interrupt interrupt7_trc void interrupt7_trc(void) { ir_trcic = 0; // interrupt request clear ~割り込み処理~ }
#pragma interrupt interrupt7_trc void interrupt7_trc(void) { ir_trcic = 0; // interrupt request clear imfa_trcsr = 0; // imfa request clear ~割り込み処理~ }
間違った例ではIMFAフラグがクリアされていないため、割り込み処理を終了した後すぐに割り込み処理(interrupt7_trc)が走ります。
異常に短い間隔でタイマ割り込みが走ってしまう場合は割り込みフラグのクリア忘れを再確認しましょう。
マイコンによっては割り込み要因フラグを自動的にクリアしてくれるものもあります。
詳細は利用中のマイコンのハードウェアマニュアルをご参照ください。
E.P.ラボでは組込みソフトウェアのデバッグ(不具合の調査・解決)、開発者教育を行っております。内容等につきましては右記問い合わせ先までご一報ください。