マイコン3048FでSCI割り込みとタイマ割り込みを使い、Tera Termからの入力でLEDを制御する場合、割り込みが正しく動作しないことがあります。本記事では、SCI割り込みが入らない場合の確認ポイントと設定方法について解説します。
SCI割り込みの基本設定
SCI割り込みが動作しない主な原因は、割り込み許可や受信レジスタの初期化不備です。SCI1のSCRやSMR、BRRの設定、受信フラグのクリアが正しく行われているか確認しましょう。
また、起動時に受信レジスタを空にする処理(ダミー読み取り)やRDRFフラグのクリアは、ノイズ対策として重要です。
割り込みベクタの指定と#pragma interruptの確認
マイコン3048Fでは、SCI1割り込み用に#pragma interrupt(SCI1_warikomi)を使用しています。この関数が正しい割り込みベクタにリンクされているか確認してください。割り込みベクタが正しくないと、受信割り込みは発生しません。
タイマ割り込みとの競合と優先度
ITU0タイマ割り込みを使用してLED点灯を制御している場合、割り込みの優先度やマスク設定が影響します。set_imask_ccr(0)で全割り込みを許可していますが、必要に応じてSCI1割り込みの優先度設定を見直すことで受信割り込みが確実に動作するようになります。
受信フラグとデータ読み取りの順序
SCI1の受信割り込み内では、まずRDRFフラグをチェックし、受信データを読み取り、最後にフラグをクリアする順序が重要です。フラグを先にクリアすると割り込みが再度発生せず、入力が無視されることがあります。
例:if(SCI1.SSR.BIT.RDRF){ cd = SCI1.RDR; /*処理*/ SCI1.SSR.BIT.RDRF=0; }
まとめ
マイコン3048FでSCI割り込みが入らない場合は、以下を確認すると改善します。
- SCR, SMR, BRRの初期化
- 起動時の受信レジスタクリアとフラグリセット
- #pragma interruptによる割り込みベクタ設定
- タイマ割り込みとの競合や優先度
- 受信フラグチェックとクリアの順序
これらを順に確認・修正することで、Tera Termからの入力に応じたLED制御をSCI割り込みとタイマ割り込みで安定して実現できます。


コメント