(toppers-users 1893) Re: H8/3048Fでの割り込みハンドラ利用手順に関する質問です.

ABE Tsukasa abe @ jo.tomakomai-ct.ac.jp
2005年 2月 7日 (月) 14:31:05 JST


湧田様

H8 依存部担当
苫小牧高専、情報工学科の阿部です。

かなり出遅れてしまいました。申し訳ありません。

>そうですよね.
>マニュアルを読むとそのように書いてあるのですが,net上などのサンプルプログラム等では,IMFAクリアのみを行って
いる場合ばかり見かけま
>す.
>とりえあえず以下のように変更してみました.
>/*======== ITU2   */
> .globl _imia2_handler_disable_int
>_imia2_handler_disable_int:
> mov.b @0xFF7B, r01 /*ITU2用IMFAフラグのダミーリード*/
> mov.l #0xFF7B, er0 /*ITU2用IMFAフラグのクリア*/
> bclr #0, @er0
> rts    /*サブルーチンからのリターン*/
>/*--------*/
>ですが,
>
>jspカーネル純正のシステムタイマーであるITU0の割り込み出口処理でも,
>/*========
> *  タイマ -- Compare Match フラグをクリアーする。
> */
> .globl _timer_handler_disable_int
>_timer_handler_disable_int:
>
> mov.l #SYSTEM_TIMER_IFR, er0
> bclr #SYSTEM_TIMER_IF_BIT, @er0
> rts
>/*--------*/
>のようにしてあるので,IMFAクリアの前のIMFAのリードは不要な気がするのですが,H8/3048のハードウェアマニュアル
“10.5.2 ステータスフラグ
>のクリアタイミング”にあるような,
>「ステータスフラグはCPUが1の状態をリードした後0をライトするとクリアされます.」
>という記述はユーザーとしてどう読めばよいのでしょうね.
>
>コンペアマッチ動作の中でIMFAをリードしているということなのでしょうか.

まず、この点は、IMFA をリードしているのではなく、
IFR(ただし、3048F では TSR0)のアドレスを er0 に設定しいます。
次に、レジスタ間接アドレス指定で、IF_BIT(IMFA)をクリアーしています。

--
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937