[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 メーリングリストの案内