Armadilloフォーラム

CON11からの音声出力でノイズがのる問題

takada

2015年2月26日 18時06分

お世話になります。

現在、Armadillo-800 EVAにて、WAVファイルのデータ(主にサイン波を数秒程度)をCON11(HP OUT)から出力する機能を実装しています。
出力の方法は、WAVファイルのPCMデータを、FSIAへDMA転送しています。

しかし、ボード起動時や、異なるWAVファイル(サイン波の周波数を変更したデータ)を出力すると、ノイズがのってしまいます。
同じWAVファイルを続けて出力する場合は、クリアな音が出力されています。

また、ノイズですが、規則的ではなく、直前に出力したサイン波が現在出力しているサイン波に所々乗っかっている感じです。

コーデック(WM8978)のレジスタ設定をいろいろと変えて試してみましたが、改善しません。

何か出力の方法やレジスタの設定についてお気づきの点がございましたら、ご教授いただけないでしょうか。

以上、よろしくお願いします。

コメント

takadaです。 お世話になります。

音声出力にノイズがのる件で補足があります。

OSはTOPPERSを使用しており、WAVファイルからPCMデータを抜き出してRAMエリアにコピーをして、DMA転送にてRAMエリアからFISAへ転送を行っています。
そこで、以下のような現象が発生します。

(1) 出力信号にノイズがのらない場合
 ・同一のWAVファイルを繰り返し出力する場合
 ・PCMデータをプログラム内部に固定で保持させて、内部PCMデータを転送元として出力を行う場合
  (この場合、PCMデータを変えてもノイズはのりませんでした)

(2) 出力信号にノイズがのる場合
 ・ボード起動直後の出力
 ・指定するWAVファイルを変えて(異なるPCMデータにして)出力した場合、

上記から、PCMデータをRAMエリアにコピーをしてからDMA転送により出力を実行すると、ノイズが発生するようです。
WAVファイルのデータを加工するためにRAMエリアへ一度コピーする必要があります。

この、ノイズ発生を回避するための方法がございましたら、ご教授いただけないでしょうか。

at_takashi.sasayama

2015年3月10日 14時43分

笹山です。

音声出力停止時に I2S CLKを停止させることで、WM8978のバッファにデータが残り、
そのデータが次の再生時に先頭に付加され、ノイズとして聞こえているのかもしれません。

この現象への対策としては、音声出力停止時も I2S CLK を停止させず、
WM8978のバッファをフラッシュする方法があります。

具体的には DACEN bit が DAC off (音声出力停止) 時も、I2S CLKを停止させず、
ALL 0 のデータを送信することで WM8978 のバッファをフラッシュします。
これにより次回再生時に先頭に付加されるデータが無音になります。

また音声データによっては、停止時にノイズに聞こえる場合があります。
この際は、停止直後に SOFTMUTE を実行することでノイズを回避できる場合があります。

参考情報
Wolfson WM8978 June 2008, Rev 4.2
Figure 47 DAC Power Up and Down Sequence (not to scale)