フルーです。
> ソフト的になにか不十分なのでしょうか?
割り込み許可しているのに
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;
フルー