CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

割込みでパケット受信

イメージ 1

タイマ出力での割込みの動作が確認できたので、LANコントローラの受信割込みで受信処理を行います。

ところがしばらくぶりに元々のポーリングによるパケット受信処理プログラムを動かしてみたところ、どうもうまく動きません。パケットを受信したところでプログラムがロックしてしまうようです。
この間まで同じソースで動いていたのに・・・とおもいつつプログラムの調査を始めました。
スタックとか配列の大きさとか調べたのですが問題無いようです。
ハードの方も疑い始めてジャンパ線のはずれとかさんざんみても異常は見当たらず。

で、やっと判ったのは内部割込みコントローラの初期化処理をライブラリ化してリンクしてしまったので受信時に予想外の割込みがかかっていたためでした。
ポーリング用のプログラムなので割込みベクタの書換えや割込みルーチンすらないのですが、割込みで未初期化のベクタを拾ってきてプログラムの存在しないエリアにジャンプ→暴走ということでした。
割込みコントローラの動作モードのみ初期化しただけでマスクはかかっているものと思い込んでいましたが、マニュアルにも書いるとおりマスクレジスタは初期状態ですべて解除状態でした。

割込み用のプログラムに書き換えたところ問題無し。
ARPキャッシュ破棄用のタイマも割込みにして2本の割込み要因が並行動作することが確認できました。