現象 †
- mns21.ex5を起動するとWidnowsのCPU使用率が100%になり、Mona側で操作を受け付けなくなる。
- mns21.ex5の起動だけで上の状態になるような気がする(未検証)
- int MonAMDpcn::interrupt()にprintfを仕込んでみたが呼ばれていない(=割り込みきてない?)
- printf("irq = %d\n", this->nic->getIRQ()); したら IRQ=9だった
- core/kernel/ihandlers.cppで irq == 9のときにprintfしたが呼ばれなかった。
- 割り込みが原因ではない?
追記 †
まだ調査を続けています。
コメント †
コメントはありません。 コメント/Am79C970/3.mone2.1のCPU100%の原因調査?
- 質問です。割り込み要因の解除って、具体的にどのレジスタに対するどの書き込みかとか把握されていますでしょうか?もし知っていたら教えてくださいませ。 -- ひげぽん
- CSR_CSRとdefineしてあるレジスタの CSR_RINT(0x0400)を立てると受信割り込み解除です。コード上ではMonAMDpcn::interrupt()のw_csr(CSR_CSR ,val&0xFFF0);ですAm79C970Aの仕様書109ページに解説があります。--EDS1275
- そういえば、mones2.1 のMakefileにmake run というターゲットを作ってありますので、良ければ使ってください。 -- EDS1275
- MONA.CFGのVESA_RESOLUTIONをさげる。
- VesaConsole.cppのコンストラクタでclearScreen();をコメントアウトして黒塗りつぶしをやめ。
- AUTOEXEC.MSHにmns21を書く。
で少しイライラ解消。(他にもあればキボンヌ)--EDS1275
- 実験報告,想像&依頼
- チップ初期化方法を変えてから試してなかったのでihandlers.cppの例の場所mask処理ではなく、if(irq==9)g_console->printf("kita- ");を埋め込んでみたところ、ちゃんと出力されました。
- maskなし状態で、初期化直後に自分のMACに合致するパケットが来てしまうと、pingを打つ前に割り込みかかりますからそのときドライバのハンドラが呼ばれなくなるのは予想通りです。
- しかしihandlers.cppにif(irq==9)g_console->printf("kita- ");を埋めて、(ping打っても?)呼ばれないのは予想外です。
- ihandlers.cppのmaskアリ版でping打たれた挙動も教えてください。
- EDS1275
- maskありは今しばらくお待ちくださいませ。--ひげぽん