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

nakai email@hidden
2008年 7月 30日 (水) 12:55:20 JST


nakaiです。

> 「DMA Config failed」の発生するトリガとなる情報を
> 取得することは、現状のドライバでは不可能でしょうか?
> #少なくとも/dev/dspのioctlや、pollでは、取得できませんでした。。

私の知っている限りですとできないと思います。

# 以下、案。
#
# driver内部でdmaがスタートしてから完了するまでの時間をみて、
# 完了予定時間の半分まで経過した時点で次のdmaデータが準備されていない
# 場合は、pollなどで通知する

やはり、現実的にCodecをBypassモードにするようなドライバを実装するのが
良いと思います。

sound/arm/mxc-alsa-i2s.cの
mxc_alsa_i2s_audio_init_codec()
の内容をBypassモードに変更して、
module初期化関数の中で、それだけを呼び出すようなものです。




> 
> よろしくお願い致します。
> 
> 以上
> 
> On Tue, 29 Jul 2008 20:32:49 +0900
> nakai <email@hidden> wrote:
> 
>> nakaiです。
>>
>>> 現在、Armadillo-500を使用して
>>> 「マイク入力→入力データをそのまま出力」という動作をさせたく、
>>> /dev/dspをアプリ起動時にRONLYとWONLYでオープンし、
>>> read()→write()→read()→write()と繰り返していると
>>> 以下のような現象が発生します。
>> codecをBypassモードにしてあげると入力→出力ということもできますね。
>> # linuxではノータッチ
>>
>> cat /dev/dsp > /dev/dsp
>> でもできますね。(ノイズがのるかもしれませんが。)
>>
>>> 「DMA Config failed」のエラーを回避する方法は
>>> 何かありますでしょうか?
>>> それとも、エラーが発生するのは、書き込みが
>>> 追いついていないだけなので、printk()の出力箇所を
>>> コメントアウトする、でも問題がないことなのでしょうか?
>> コメントアウトでも問題ないですが、
>> writeが追いつかないとノイズがのると思います。
>>
>> サンプリングレートを下げるとどうでしょう?
>>
>>
>> 山本 慎二郎 さんは書きました:
>>> いつもお世話になっております。
>>> 山本@北都システムです。
>>>
>>> 現在、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 mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/mailman/listinfo/armadillo
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/mailman/listinfo/armadillo
>>
> 
> 
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo



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