[H8-ML(6107)] H8/3069 LANボードの割り込み
From: kaosu13@xxxxxxxxxxxxxx
Date: 2007年09月07日(金)14時02分54秒
秋月さんの3069+LANボードを買ったんですが、割り込みがうまく
いかずに苦戦しています。

ソフトウェアですがトランジスタ技術2006年3月号の
http://www.cqpub.co.jp/toragi/download/2006/TR0603A/TR0603A.ZIP
こちらのソースをH8用にぼぼ移植した感じになっていますがip_inputが
プロトコルに応じた値を返すようになっています。

現象としては割り込み使用時にPCからのpingのレスポンスも
遅くその時間も一定ではなく、タイムアウトも頻発してしまう点です。
が、割り込みではなく無限ループの中での動作だとレスポンスも
2ms程度で早く、タイムアウトも全くありません。
もしかしたら連続して割り込みが発生したときに取りこぼしてるのかなと思ったの
ですが、その場合対策のしようがないような気がするのですが・・・
原因がわからず悩んでいますが、何かアドバイスがありましたらよろしく願いします。
そもそも買ったときに付属していた三岩さんのMESも割り込みを使ってないみたい
なんですが、割り込みは使用しないものなんでしょうか?

割り込み使用時のコード(レスポンスが遅く、タイムアウトも頻発)
#pragma interrupt intterTest
void intterTest( void )
{
  char isr;

  INPORT(ISR);
  RESBIT(ISR, 0x20);			/* IRQ5割り込み要求クリア */

  OUTPORTB(RTL_ADDRESS + CR, 0x22);

  isr = INPORTB( RTL_ADDRESS + R_ISR );
  if( isr & 0x10){				/* オーバーフロー割り込み */
    overFlow( );
    OUTPORTB(RTL_ADDRESS + R_ISR, 0x10);
  }
  else if( isr & 0x01 ){			/* 受信割り込み */
    pacen = ip_input();			/* IP層までの入力処理 */
    if( pacen != 0){			/* 受信データあり */
      OUTPORTB(RTL_ADDRESS + IMR, 0x10);/* 受信データを処理するまで割り込み禁止 */
    }
    OUTPORTB(RTL_ADDRESS + R_ISR, 0x01);		/* 割り込みクリア */
  }
}

void main(void)
{
  for(;;){
    if( pacen != 0){		/* 受信データあり */
      pacen = 0;
      switch( pacen ){	/* プロトコルの判定 */
      case 1:
        icmp_input( );	/* ICMP */
        break;
      case 2:
        break;
      case 3:
        break;
      default:
        break;			/* サポートしていないプロトコルは廃棄 */
      }
      OUTPORTB(RTL_ADDRESS + IMR, 0x11);	/* パケット受信割り込み許可 */
    }
  }
}
-----------------------------------------------------------------------------------------
割り込み未使用時(レスポンスも2m程度ではやく、タイムアウトもない)
void main(void)
{
  for(;;){
    pacen = ip_input( );	/* IP層までの入力処理 */
    if( pacen != 0){		/* 受信データあり */
      pacen = 0;
      switch( pacen ){	/* プロトコルの判定 */
      case 1:
        icmp_input( );	/* ICMP */
        break;
      case 2:
        break;
      case 3:
        break;
      default:
        break;		/* サポートしていないプロトコルは廃棄 */
      }
    }
  }
}

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


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


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