割り込みマスクレジスタといつも同じ内容を持つメモリ(以下、マスク保存用メモリ)を用意する。
割り込みマスクレジスタへの書き込みがある場合は、必ずマスク保存用メモリにも同じ内容を書き込む。
割り込みマスクレジスタを読み込むときには、マスク保存用メモリの内容を読み込むようにする。
void sysInit() { INT_SetMsk((INT_MSK_HBLK_IN | INT_MSK_VBLK_OUT), (INT_MSK_SPR | INT_MSK_DMA1)); /* "H-ブランク-IN"と"V-ブランク-OUT"をイネーブル設定 */ /* "スプライト描画終了"と"レベル0-DMA"をディセーブル設定 */ ... } void anyPrg() { Uint32 status_bit; status_bit = INT_GET_STAT(); /* ステータスの取得 */ if(INT_JudgeStat(status_bit,INT_ST_VBLK_OUT,INT_ST_VBLK_IN) == TRUE){ /* V-ブランク-OUTの割り込みが発生し、 */ /* V-ブランク-INの割り込みが未発生の時 */ ... } }
#pragma interrupt (vblkIn) /* vblkIn関数を割り込み関数とします */ void vblkIn(void) { ... }
void systemInit(void) { INT_SetFunc(INT_SCU_VBLK_IN, vblkIn); /* vblkIn割り込み関数をV-ブランク-IN割込みベク */ /* タテーブルに登録します。 */ INT_SetScuFunc(INT_SCU_VBLK_OUT, vblkOut); /* vblkOut関数をV-ブランク-OUT割り込みベクタの */ /* SCU割り込み関数に登録します。 */ ... } void vblkOut(void) { ... }