[Armadillo:03105] Armadillo-500の音声出力について

山本 慎二郎 email@hidden
2008年 7月 7日 (月) 17:10:41 JST


いつもお世話になっております。
山本@北都システムです。

現在、Armadillo-500を使用して
「マイク入力→入力データをそのまま出力」という動作をさせたく、
/dev/dspをアプリ起動時にRONLYとWONLYでオープンし、
read()→write()→read()→write()と繰り返していると
以下のような現象が発生します。

■現象
「DMA Config failed」がコンソールに出力される

■環境
・atmark-dist-20080617
・linux-2.6.18-at8
    ※特にデフォルトから手を入れていません。


調査してみたところ、
  ●linux-2.6.18-at8/sound/arm/mxc-alsa-i2s.c
    (L241)mxc_alsa_i2s_dma_playback()
      mxc_dma_config()の戻り値が-EBUSYのため
      printk出力されている。
        →linux-2.6.18-at8/arch/arm/plat-mxc/sdma/dma_sdma.c
            (L295)で-EBUSY

というところまでは追えましたが、
回避方法は不明です。

上記を見る限りwrite()によるデータ転送が追いついて
いないように見えるのですが、ユーザーアプリ側で出力可能な
タイミングを知ることができないため、
回避できないように思えます。
(write()はwaitせずに正常にreturnしてきます。
 また、pollも「書き込み可」と返ってきます)

以下のように、WONLY側のwrite()後、close()→open()して
再度write()をするように繰り返した場合は
エラー出力の現象が発生しませんが、
プツプツというノイズが入ってしまうため、
実用に耐えません。

  read()→write()→close()→read()→open()→write()→close()→…

「DMA Config failed」のエラーを回避する方法は
何かありますでしょうか?
それとも、エラーが発生するのは、書き込みが
追いついていないだけなので、printk()の出力箇所を
コメントアウトする、でも問題がないことなのでしょうか?

よろしくお願い致します。

以上

=================================================
北都システム株式会社
  第4ユニット ITソリューショングループ所属
山本  慎二郎(Shinjiro Yamamoto)
 TEL: 045-470-2773
 Mail: email@hidden
=================================================





armadillo メーリングリストの案内