ハードが一段落してPIC32MXのプログラムを改良中。
以前からやっている内容を含めて記載する。
オリジナルのプログラムはUSB受信バッファが2組あり、
それをPINGPONGバッファと呼ぶバッファに交互に保存
する。実際のところ、このPUNGPONGバッファは解読
しようとしたが、いまひとつ良く理解できなかった。
オリジナルプログラムの問題点はUSB受信バッファと
PINGPONGバッファが2重になっており、転送に時間が
かかる可能性があるところだ。
まず2組あるUSBバッファを1つに減らし、PINGPONG
バッファをリングバッファにした。リングバッファに
すると、DMA転送データ数を受信数と分離できる利点が
ある。うまく設定するとUSB受信バッファからmemcpyで
データを転送する事も可能だ。
次に考えたのがUSB受信バッファを複数配列で用意し、
その配列バッファをリング状にしてUSB受信のバッファと
データー転送用バッファを一体化してデータ転送回数を
減らした。この場合はUSB受信時のバイト数も配列で記録
する必要がある。
ここまでやったが、パソコンとPICMX32のクロック差で
データの余りや不足を修正するタイミングを調整する部分
がどうも旨く動かないのでどうしようか悩んでいた。
ここまでが以前に作った部分。
今回はリングバッファにUSB受信データを直接保存する
様にしてみた。以前書いたがUSB受信データのバイト数は
次回受信時の直前にならないと判らないので、この辺りの
処理を考えるのが難しい。とりあえず動く様になったが、
どうもデータの余りや不足を修正するタイミングを調整する
部分にまだ問題がある様だ。
実際のバッファ残量をRS-232Cで転送させてみたところ、
はっきりとは判らないがDMA転送の割り込みが2回掛かり
データが余計に減っている感じがする。割り込み周辺を
調べているが、実際に2回実行しているか確認できなくて
悩んでいるところだ。
0 件のコメント:
コメントを投稿