2012年10月14日日曜日

AC'97 Codecを制御してみる 4

DRAMコントローラとクライアントモジュールとのI/FはMPIFという独自I/Fになっており、これは通常のREAD,WRITEコマンドの他にFILLとSWAPコマンドがある。


SWAPは同一アドレスへのREADとWRITEをアトミックに実行できるコマンドで、マルチCPU構成時のMutex制御(排他制御)等での使用を想定して設けたコマンドだが、それ以外にも使用できそうだ。

今作成中のDMACはREADを使っているが、SWAPを使うようにすればDMAバッファをリードした後にゼロクリアしたり、あるいは、マイクやLINE IN等の録音データで置き換えることができる。
バッファをcirculationモード、即ちリングバッファとして使用すれば、録音データの遅延再生機能を実現できる。LM4550は下図に示すとおり入力データをDACデータと合成して出力する機能もあるので、この機能と合わせるとリバーブレータ(残響効果器)のようなことができそうだ。



レジスタ仕様は以下のように変更した。


以下はシミュレーションの様子 (clear_to_zero 選択時)


replace_to_ADC_data モードで、遅延が250uS, 10mS, 100mS, 500mSになるようにして、動かしてみた。

250uS

10mS


100mS


500mS



0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...