[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: news3400 expansion slot and NWB-231A/NWB-235A
<030510004946.M0127047@mirage.ceres.dti.ne.jp>の記事において
私は書きました。
> Lite2 のコードだと
> if (stat & INTST1_SCC) {
> scc_intr();
> if (saved_inten1 & *(u_char *)INTST1 & INTST1_SCC)
> scc_intr();
> }
> みたいなことしてるのでなにかあるのかなーと思ったんですが
> 同じようなコード入れても変わりませんでした。
ここで INTST1 のチェックをはずす(つまり INTST1_SCC が立ってたら
無条件に 2回割り込み処理ルーチンを呼ぶようにする)と
なんか固まらずまともに動くようにになりました。
同じように dev/zs_hb.c で
---
Index: dev/zs_hb.c
===================================================================
RCS file: /cvsroot/src/sys/arch/newsmips/dev/zs_hb.c,v
retrieving revision 1.12
diff -u -r1.12 zs_hb.c
--- dev/zs_hb.c 2003/05/09 13:36:41 1.12
+++ dev/zs_hb.c 2003/05/09 16:40:26
@@ -321,9 +321,16 @@
zshard_hb(arg)
void *arg;
{
+ int rv;
+
(void) *(volatile u_char *)SCCVECT;
+ rv = zshard(arg);
+
+ /* XXX news3400 sometimes losts zs interrupt */
+ if (rv)
+ zshard(arg);
- return zshard(arg);
+ return rv;
}
/*
---
と zshard() が処理されたあともう一度 zshard() を呼ぶようにしても
止まらずにちゃんと動きます。
INTEN1 をクリアしている最中に割り込み要因が発生すると
INTEN1 をセットしても INTST1 がラッチされない、
みたいな感じですが、 zsc だけの問題なんですかねえ……
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp