KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

camaction_test
2002 年 4 月 25 日 17 時 48 分
投稿者: 松本 偉史

筑波大学の松本です。
いつも細かいアドバイスをありがとうございます。
ドライバインストールに関しては、やはり IRQ の割り当てに
問題があったようです。RedHat 7.2 にそのまま
インストールしようとすると IRQ 11 に割り当ててくれるのですが、
この IRQ 11 は他に USB なども使用しているらしく、
CAMAC ドライバとうまくシェアしてくれなかったようです。
そこで、BIOS から IRQ を直接他の番号に指定しました。

この状態でクレーとにモジュールを一つも差し込まない状態で
lam test を行ったところ、ぶじ Time out が出るようになりました。

camaction test については、相変わらず動いてくれません。
ご指摘頂いたように camaction.c に

while (! (lam_bits = rlam())) {
printf("LAM BIT : %4x\n",lam_bits);
}

を追加してみましたが、出力はひたすら 0 を返すばかりで
一向に終わる気配を見せません。

ちなみに F26 を発行させるために
execz(); のあとに

camac_0(1,0,26);

という一文を追加しました。
( for文でチャンネルを回してみたりもしましたが )

このときに ( 0 が連発されているときに ) クレーとコントローラの
L-SUM は点灯せず、点灯しているのは NO-Q のみです。
DATAWAY INDICATOR では F26 は発行されていることが確認できます。

もしかして F26 の立て方が間違っているのかと思い、
いろいろとためしてみましたが、今のところは失敗ばかりです。
ただ、ファンクションの発行はうまくできているようなので、
PC - Crate Controller 間のやりとりはできていると思っています。
したがって、Crate Controller - module 間のやりとりがまずそうです。
となると、ioctl などシステムコールの話になってくるのでしょうか。


Re: camaction_test
2002 年 4 月 26 日 5 時 30 分
投稿者: 榎本 三四郎

IRQ の競合に関しては,近い将来他のデバイスと IRQ の共有をできるようにする予定です.
たぶん次のバージョンではできるようになっていると思います.

(現在の開発版に入っている camdrv は IRQ が競合していても一応動作します.
camlib.c の int CWLAM() の return (result >= 0) ... の部分を
return (result > 0) にすれば,他のデバイスからの割り込みでは timed out
を返すようにできます.将来的には,ドライバ内部で割り込み元を調べて,他のデバイス
からの割り込みは無視するようにする予定です.割り込み頻度の高いデバイスと競合すると
パフォーマンスが落ちる可能性がありますが...)

ioctl() などに関しては,INDICATOR でちゃんと CAMAC ACTION が発行されている
なら,正しく動いていると言えると思います.ioctl() というのは,ユーザプログラムと
デバイスドライバの間で情報をやりとりするためのインターフェースに過ぎないからです.
つまり,INDICATOR で CAMAC ACTION が実行されていることが確認できるということは,
ユーザプログラムの呼び出しが ioctl を経由してちゃんとドライバに渡され,ドライバが
ちゃんと PCI カードにアクセスできて,PCI カードへのコマンドがちゃんとコントローラに
伝わって,コントローラが指定された CAMAC ACTION のシーケンスをクレートのバック
プレーンに載せたということです.CAMAC 規格によれば,この CAMAC ACTION がモジュール
に伝われば,コントローラに X レスポンスが返されるはずで,これによりコントローラの
フロントパネルにある No-X の LED は消えるはずです.

LAM にかかわらず camac_24() などを適当に発行するプログラムを書いてみて,INDICATOR 
で確認すれば,この辺の動作をよりはっきりと確認することができると思います.もちろん,
LAM が出ていない以上,データとして返される値は無意味な値になりますが.
あと,INDICATOR で LAM をモニタすることはできないでしょうか? 

INDICATOR で確認して,意図したとおりのやりとりが行われているなら,後は
INDICATOR 以降,つまりクレートのバックプレーンかモジュール自体の問題となります.
使うスロットを変えてみるとか,できれば別のモジュールを使ってみるとかすれば,
何か変わるかもしれません.

このスレッドに記事を投稿する