2021年8月13日金曜日

SANYO LC7881 DAC その15(PIC32MX編)

ハードが一段落して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 件のコメント:

コメントを投稿