秋月さんの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; /* サポートしていないプロトコルは廃棄 */ } } } }