お騒がせしております。 みなさんこんにちは。 貴重なアドバイスを沢山頂きまし てありがとうございます。 ひやした さんのアドバイスに従って、プログラムを修正しましたら問題が解決致し ました。オシロで確認したところ、5msecの割り込み中に0.1msecの割り込みが入った 所は処理時間がその分長くなっておりました。 良く分かりませんが、一度割り込みを受け付けると同じレベルの割り込みは正しく受 け入れないような感じでしょうか? 3レベルとはプライオリティレベル0,レベル 1、NMIの事なのでしょうか? 因みに、プログラムは下記の通りでした。 #define EI1 asm("andc.b #0xbf,ccr") main() { ... SYSCR.BIT.UE=0; /* use user bit for mask */ INTC.IPRA.BIT.B2=1; /* set ITU0 priority level 1 */ EI; ... } void int_imia0(void) /* 0.1msec interrupt */ { ... /* current control program. */ ... ITU0.TSR.BIT.IMFA=0; } void int_imia1(void) /* 5msec interrupt */ { EI1; ... /* velocity control program. */ ... ITU1.TSR.BIT.IMFA=0; } on 02.12.12 10:34 AM, Hirashita at iced@xxxxxxxxxxxxxxx wrote: > ひやしたです。 > >> 0.1msecのITU0コンペアマッチ割り込み(優先)と 5msecのITU1コンペアマッチ割 >> り込みを使って制御プログラムを開発していますが、ITU1の割り込みの途中でEIを行 >> うとプログラムがおかしな動き?になってしまいます。 >> EIを入れなければ正しく動くのですが、ITU1の割り込み終了までITU0の割り込み処 >> 理が待たされてしまい、制御が上手く行えないのです。 > > 参考になるかどうかわかりませんが、以前IRQ割り込みの処理が長くかかるときに > SCIの取りこぼしがあり、そのときに書いたコードです。 > 最終的にはITRONを導入してクリアしたので、もしかしたら > 検証に問題があったかもしれないのですが、この時点では確か動いていたはず。 > 但しプロセッサは3067、開発環境はイエローソフトです。 > > ハードウェアの初期化云々をやるルーチンで > −−−−−−−−−−−−−−−−−−−−−−−−− > // この時点ではCCRのIビットはセット、UIは不定 > #asm ORC.B #H'C0, CCR ; 全割り込み禁止 > SYSCR &= ~0x08; // UIビットをマスクビットとして使用 > INTC.IER |= 0x10; // IRQ4を許可 > INTC.IPRB = 0x0E; // SCI0,1,2 の割り込み優先順位を上げる > #asm ANDC.B #H'3F, CCR ; 全割り込み許可 > −−−−−−−−−−−−−−−−−−−−−−−−−− > > てなことをやりまして、 > > /************************************************************************* > IRQ4割り込み > **************************************************************************/ > void interrupt irq4() > { > INTC.ISR &= ~0x10; > #asm ANDC.B #H'BF, CCR ;レベル1割り込みを許可 > nagai_syori(); //長い処理 > } > > とにかく、H8の多重割り込みの解説を何度も読み返した記憶があります・・・。 >