C8051F41x外部入力割込フラグのクリア

シリコンラボラトリ社のC8051F41xは、intel社の8051から派生したデバイスです。
コンパクトな8bitマイコンながら、内蔵FLASH/シリアル通信/I2C/アナログ入出力等を備えた多機能ICです。

このマイコンには各割り込みごとに、「割り込み機能設定レジスタ」「割り込み処理有効/無効フラグ」「割り込み発生フラグ」といったレジスタがあります。
しかし、外部入力割り込み(INT0/1)には「割り込み発生フラグ」に対応するレジスタがありません。割り込み処理に伴ってハードウェアで自動的にフラグがクリアされるということもあり、プログラムから見えない領域にフラグが保存されているようです。
また、割り込み処理が無効の場合も内部では割り込み発生フラグが保留されています。
そのため、有効/無効フラグを「有効」に設定した直後に、それ以前に設定されていた割り込み発生フラグによる割り込みが発生する場合があります。

割り込みが「有効」になるまでの割り込みは無視したい場合、一般的には「有効」に設定する直前に割り込み発生フラグをクリアするのですが、INT0/1にはレジスタが無いため通常の方法ではフラグがクリアできません。

この場合は「INT0/1の動作を切り替える」と割り込み発生フラグがクリアできます。

フラグをクリアする例

void enableINT0(void)
{
    IT0 = 0; /* (エッジ検出->レベル検出)INT0検出方式を変更して戻すと */
    IT0 = 1; /* (レベル検出->エッジ検出)内部のフラグがクリアされます */
    EX0 = 1; /* enable INT0 */
}

2012/10/12