USBプレヤー(9)
H8のDMAでなんとかwav再生はできたが、ブロック転送の欠点もある。
以下はその対策というか...。
1.ファイルの最終にゴミが残ってそれを転送してしまう。
これはバッファを0クリアした。
最初、プログラムクリアしたらwavでこけてしまった。(サイズによるが)
そこでクリアしたバッファを用意してそれをDMA転送してクリアした。(^^!
さすがにDMAは高速で瞬間的に終わってしまう。
なんせH8の外付けで2MByteもあるわけで、8Kごときを沢山とってもおつりだらけだし。
2.次のファイルのバッファクリア
今度はVS00XXに残るデータの話。
よくわからないのだが、どうも最後のデータが残るらしく、2048の0を送るのが慣例らしい。
ソフトリセットでクリアしてくれてもよさそうだが、それがしきたりなのだろうか?
これはバッファを2048クリアするためのコマンドをAVRに実装した。
データはH8なので、結局AVRは
・1クロックモード(XDCSはそのまま)
・32クロックモード(XDCS制御付)...使っていない
・2048クロックモード(XDCS制御付)=クリア用
・8192クロックモード(XDCS制御付)=DMA用
の4モードを搭載し、H8からの2bitで切り替えるようになっている。
確かに一番最初に音を出すとそういう感じの音がするような...。
でも、ハードリセットも出しているのだが...。
まあ曲間が一番時間が自由で、結局ここでいろいろ処理するのがよさそう。
3.音量調整で再生が止まる
DMA中はAVRがXDCSを管轄していて、H8はわからない。そのためXCSを発行できない。
できるのはDMAが終わった時。ということは、次を送らなくてはいけないというか。
まあmp3ならともかくwavでは厳しいものがある。
つまり
・転送終了を待つ
・ボリュームコマンドをかける
・転送を再開する
とやらなくてはならない。厳しいのはDREQとは無関係なこと。
などとも思ったが、個人的にどうもデジタルボリュームが好きではない。
そもそもどこか電源を切っても覚えなくてはならないし、直感性がない。
こんなの音量を最大に設定しておいて、出力にボリュームをつければ余計便利なような気がする。
別段ここでやっらないといけないこともなさそう。
他にもトーンコントロールなどもそうか...。(つけてないが...。)
ちなみに曲送り(戻し)はブロックで切ることができるので問題なし。
8Kぐらいだとレスポンスも良い。(mp3とwavでレスポンスが違うのも...。)
と割り切りも進んできた。(^^!
やっとスタンドアロンで動かす元気が出てきた。
で、LCDとSWとEEPROMをつけることにした。
コメントはありません