こんにちは,小坂です。 At 22:02 02/12/13 +0900, wathavyさん wrote: > >H8の割り込みにおいては、割り込み処理に入ったら、即座に割り込み条件 > >のクリアが、暗黙の了解だったりして。 >hamayanさん、これですよね? > ><−根拠無し。 >どころか、経験上はこれ。。。 > >#確か、これ、類似のことをやってはまった記憶が。。。。 wathavyさん,hamayanさん 確かにこれが安全なプログラミングです。 すみません,前の文章がわかりにくくて。 割り込みの中身でお話します。H8ハードウェアマニュアルとあわせてお読みください。 シングルタイマ割り込みの場合 (1)タイマ割り込みの場合,コンペアマッチでIMFAが0→1になります。この値で割り込み要求が発生します。 (2)通常はCCRのIはクリアされているので割り込みを受け付けます。 (3)割り込みを受け付けると,PCとCCRをスタックに退避し,CCRのIをセットし(割り込み禁止),割り込みベクタテーブルを参照して割り込みルーチンに飛んでゆきます。 ここでスタックに退避されたCCRのIはクリア状態です。 (4)割り込みルーチンの処理をします。最初に必要なレジスタの退避をすると思います。IMFAを0にするまでは,割り込み要求は出っ放しになっていますが,CCRのIがセット状態(割り込み禁止)なので,再び割り込み処理がはじまることはありません。 (5)割り込みルーチンのどこかで(経験上は即座にIMFAをクリア)IMFAをクリアします。この時以降,割り込み要求は存在しないことになります。 (6)割り込みルーチンから戻るところで,退避したレジスタの復帰を行ないます。また退避したCCRの復帰も行なうため,CCRのIはクリア状態に戻り,次の割り込みを受け付ける準備が出来ます。 シングルタイマ割り込みの場合で割り込みルーチン中でCCRのIをクリアした時(その1) (CCRのIをクリアしてからIMFAをクリアの手順) これは手順が逆です。 (1)タイマ割り込みの場合,コンペアマッチでIMFAが0→1になります。この値で割り込み要求が発生します。 (2)通常はCCRのIはクリアされているので割り込みを受け付けます (3)割り込みを受け付けると,PCとCCRをスタックに退避し,CCRのIをセットし(割り込み禁止),割り込みベクタテーブルを参照して割り込みルーチンに飛んでゆきます。 ここでスタックに退避されたCCRのIはクリア状態です。 (4)割り込みルーチンの処理をします。最初に必要なレジスタの退避をすると思います。IMFAを0にするまでは,割り込み要求は出っ放しになっていますが,CCRのIがセット状態(割り込み禁止)なので,再び割り込み処理がはじまることはありません。 (5)ここでCCRのIをクリアすると,その次の瞬間,IMFA=1の割り込み(自分自身の割り込み)要求を受け付けます。そして(3)と同じ動作になります。 その後,(3)(4)(5)を繰り返して,無限割り込み受け付けになり,H8は暴走状態になります。割り込みルーチン中のIMFAをクリアするところまでたどりつけません。 シングルタイマ割り込みの場合で割り込みルーチン中でCCRのIをクリアした時(その2) (IMFAをクリアしてからCCRのIをクリアの手順) この手順が正解です。 (1)タイマ割り込みの場合,コンペアマッチでIMFAが0→1になります。この値で割り込み要求が発生します。 (2)通常はCCRのIはクリアされているので割り込みを受け付けます (3)割り込みを受け付けると,PCとCCRをスタックに退避し,CCRのIをセットし(割り込み禁止),割り込みベクタテーブルを参照して割り込みルーチンに飛んでゆきます。 ここでスタックに退避されたCCRのIはクリア状態です。 (4)割り込みルーチンの処理をします。最初に必要なレジスタの退避をすると思います。IMFAを0にするまでは,割り込み要求は出っ放しになっていますが,CCRのIがセット状態(割り込み禁止)なので,再び割り込み処理がはじまることはありません。 (5)IMFAをクリアします。この時以降,割り込み要求は存在しないことになります。 (6)ここでCCRのIをクリアすると,新たな割り込みを受け付けることができるようになります。しかし,すでにIMFA=0なのでCCRのIのクリア直後に自分自身の割り込み要求を受け付けることはありません。 (7)割り込みルーチンから戻るところで,退避したレジスタの復帰を行ないます。また退避したCCRの復帰が行なわれますが行なわれても,CCRのIはクリア状態になっています。 すなわち(6)以降,次の割り込みを受け付ける準備が出来ていることになります。 この件は,私も勉強になりましたので,このメールの内容を元にして,私のところの学生向け学習Webサイトに載せさせていただきます。 **************************************************** 〒193 0997 八王子市椚田町1220-2 東京工業高等専門学校 情報工学科 小坂敏文 phone0426-68-5199 Fax68-5098