KiNOKO-DAQ 関連情報 掲示板

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

FIFOメモリーからのデータの読みだし
2004 年 8 月 22 日 17 時 55 分
投稿者: 市原佳代子



こんにちは市原です。

FIFOメモリーを内部に持つ(A24,D32アクセスのみ)VME モジュールのテストを
行なっています。読み書き可能なアドレスへのアクセスついては期待どおりに
動作していますが、FIFOメモリーからはうまくデータを読み出すことが出来ま
せん。御助言、宜しくお願い致します。

ともかく、vmedrv に付いているサンプルプログラムの vmeget.c で、lseek 
と readをひたすら繰り返せば、読めるのでは??と思い、vmeget.c を一部書
き換え実行しました。(添付)

リセットした後、vmeget 実行すると、

0x00000000
0x00000000
 ..........

0x00000000 が続く。


データ取得後、vmeget 実行すると、

0xffffffff
0xffffffff
0xffa0ffff    //  始めに良み出すときだけ、
0xffffffff    //  3つ目には いつも同じデータが入っています。     
0xffffffff
 ..........

0xffffffff が続く。

となり、期待されるデータを読み出せません。

FIFOメモリーからのデータを読み出すためには、なにかしなければいけないこ
とがあるのでしょうか?


添付ファイル: vmeget.c (1.4 kb)

2004 年 8 月 23 日 2 時 3 分
投稿者: 榎本 三四郎


普通は、FIFO に対しても、読み出し手順に特別なことはありません。レジスタやメモリと同様に、タイミングを取りながら指定されたアドレスを普通に読むだけです。あえて違いを言うなら、DMA が効率的に働かないということくらいでしょうか。

特に最初の1ワードに関しては、FIFO はレジスタと全く同じ振舞いをするはずです。FIFO が読みだし可能であることを確認したあとに、vmeget などで1ワードを読んでみて、それがおかしければ多分なにか他のところに問題があるのだと思います。例によって、バスアナライザの類がデバッグに有効です。

ちなみに、レジスタやFIFOなど、同じアドレスに繰り返しアクセスするような場合には、read() や write() よりも、mmap() の方が効率的で便利だと思います。open() して mmap() するだけで、デバイス上のアドレス空間にポインタで直接アクセスできるようになります。終ったら munmap() して close() してください。 vmemap.c が参考になると思います。


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