[H8-ML(4718)] Re: [H8-ML(4710)] ■解決、でもなぜ?■入力Hiの時間の測定
From: "Takao Furumori" <takao.furumori@xxxxxxxxxxxxxxxx>
Date: 2004年04月30日(金)09時28分03秒
フルーです。
> ソフト的になにか不十分なのでしょうか?
割り込み許可しているのに
void    INT_IMIB0(void)
{ /*sleep*/}
とコーディングしていると、もしINT_IMIB0割り込みがノイズ等で
発生した場合には、上記のコードが呼び出されますが、
割り込みフラグをクリアーしていないので、永遠に呼び続けられます。
メインルーチンが回らなくなってしまいます。
もし、GRB割り込みを許可したいなら、

void    INT_IMIB0(void)
{ ITU0.TSR.BIT.IMFB = 0;  }
っと書いておきましょう。

それから、内容によっては違いますが、一般的には
割り込みフラグのクリアータイミングは、割り込みルーチンの
最後に記述します。
void    INT_IMIA0(void)
{
    if(PA.DR.BIT.B2)                    // 立ち上がりエッジの場合
             ITU0.TCNT = 0x00;       // カウントをクリア
    else                                // 立ち下がりエッジの場合
       cnt0 = ITU0.GRA;                // 値をcnt0に記憶
    if(cnt0>2000){LED1=1;}else{LED1=0}

    ITU0.TSR.BIT.IMFA = 0;              // 割り込みフラグ解除
 }

それから、ITUの初期化ルーチンで
>    ITU0.TSR.BYTE = 0x00;      // 全割り込みフラグクリア
これではクリアーできません。
マニュアルに書かれているように、一端読み出してから、0を
書き込まないといけません。
ITU0.TSR.BYTE &= 0x00;

フルー

スレッド概略
[4710(R)](起点)
 └[表示中]
   └[4719(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]