魏東山組込みLinuxビデオチュートリアル_3 ALSAサウンドカードは_ゼロ(柳州優れたFS2410ベースの開発ボード、UDA1341サウンドカード)からの録画機能を追加書き込みのプロジェクトの戦闘フェイズ

まず、実験環境

1.1仮想マシン環境

    a) Vmware版本:Vmware Workstation 12.5.7

    b)のUbuntuのバージョン:9.10

    C)カーネルのバージョン:2.6.31.14

    バージョンツールチェーンD):腕のlinux-gccの4.3.2

1.2開発ボード

    優れたFS2410開発ボード柳州、UDA1341サウンドカード

    カーネルのバージョン:3.4.2

第二には、コードを変更します

2.1修正s3c2440_dma.c

1)静的揮発性構造体s3c_dma_regs * dma_regs。

    読みます:

    静的な揮発性構造体s3c_dma_regs * dma_regs_ch1。//再生のための
     静的な揮発性構造体s3c_dma_regs * dma_regs_ch2。//キャプチャ用

    したがって、変形に関連するすべての機能は、タイプsubstream->ストリームに応じて、DMA動作を登録し、対応するdma_regs_chxを選択するために、

2)preallocate_dma_buffer()を追加、修正s3c2440_dma_new()、および捕獲のためにサブ再生サブそれぞれ、DMAバッファを割り当て

3)(s3c2440_dma_openで変更playback_dma_info s3c2440_dma_infoグローバル変数以前に定義された構造体を)に

静的INT s3c2440_dma_open(構造体snd_pcm_substream *サブ)
{

    構造体 * PRTD s3c2440_dma_info。
    ... 
    PRTD = kzalloc(はsizeof構造体 s3c2440_dma_info)、GFP_KERNEL)。
    runtime-> PRIVATE_DATA = PRTD。
    ...
}

    変更機能playback_dma_infoしたがって、すべてのアクセス、substream-> runtime-> PRIVATE_DATAへのアクセス

(デバッグ時に後添加することが発見された)2.2

   参考カーネルs3c24xx-i2s.c、修正S3C2440-i2s.c:

   )(s3c2440_snd_txctrl()、s3c2440_snd_rxctrl()を追加し、s3c2440_i2s_triggerを変更

静的 INT s3c2440_i2s_trigger(構造体 snd_pcm_substream *サブ、INT CMD、構造体 snd_soc_dai * DAI)
{ int型 RET = 0。
    スイッチ(CMD){
	 ケース SNDRV_PCM_TRIGGER_START:
	 ケース SNDRV_PCM_TRIGGER_RESUME:
	 ケース SNDRV_PCM_TRIGGER_PAUSE_RELEASE。
    
	    // s3c2440_iis_start(); 
	    もし(substream->ストリーム== SNDRV_PCM_STREAM_CAPTURE)
		s3c2440_snd_rxctrl(1)。 
		s3c2440_snd_txctrl(1); 休憩 ;
	ケース SNDRV_PCM_TRIGGER_STOP:
	 ケース:SNDRV_PCM_TRIGGER_SUSPEND
	 場合 SNDRV_PCM_TRIGGER_PAUSE_PUSH:
	 デフォルト// s3c2440_iis_stop(); もし(substream->ストリーム== SNDRV_PCM_STREAM_CAPTURE)
		s3c2440_snd_rxctrl(0)。 
		s3c2440_snd_txctrl(0); 
	    RET = -EINVAL。休憩 ; 
    } 
exit_err:リターン RET。
}
	    
	    
	    
	    
	    

    

第三に、デバッグ

1.コンパイル、ここでは言及されていないドライバをインストールし、以下を参照してください魏東山組込みLinuxビデオチュートリアルALSAの試運転からプロジェクトの_3戦闘フェイズ_書き込みのゼロ(ベース柳州優れたFS2410開発ボード、UDA1341サウンドカード)

2.実行はaplayのwindows.wav、ヘッドフォンは、高周波ノイズです!

    /#猫の/ proc /割り込み見える中断DMAを発生しません

    CPU0

    25:0 S3C S3C2410、WDT

    30:26510 S3C2410タイマーティックS3C

    35:再生用2 S3Cのmyalsa

    ...

    調査、中s3c2440_dma_hw_params()で追加する必要があります。

    prtd-> phy_addr = substream-> dma_buffer.addr。

    もともとplayback_dma_info.phy_addr、中s3c2440_dma_new()dma_alloc_writecombine直接出力パラメータが初期化されます。

    playback_dma_info.virt_addr =(unsigned int型)dma_alloc_writecombine(pcm->カード- > DEV、s3c2440_dma_hardware.buffer_bytes_max、
                                                                                                                     &playback_dma_info.phy_addr、GFP_KERNEL)。

    再コンパイルは、ドライバをロードし、再度はaplay windows.wavを行い、音を聞くことができ、最終的ヘッドフォン!

3. DOは-d 5 my1.wavをarecordが、5秒後に、何も起こりません!強制Ctrl-Cをした後、報告されました:

    記録WAVE '標準入力':符号なし8ビット、レート8000​​ Hzの、モノラル

    ^信号割り込みによってCAborted ...

    arecord:pcm_read:2031:読み取りエラー:システムコールに割り込み

    中断することなく/#猫の/ proc /割り込みDMA

4. devmem2で登録DISRC1(0x4B000040)を確認し、DIDST1(0x4B000048)、IISCON(0x55000000)値:

  (注:左の二重矢印を実行することであるarecord 権が実行される前に値をarecord後の値)

    /#devmem2 0x4B000040

      アドレス0x4B000040(0xb6fba040)の値:0x0の<==> 0x55000010

    /#devmem2 0x4B000048

    アドレス0x4B000048(0xb6f46048)の値:0x0の<==> 0x33B80000

    /#devmem2 0x55000000

    アドレス0x55000000(0xb6fc6000)の値: 0x100の<==> 0x122ビット[0] = 0 、すなわちインタフェースを無効にIISは、1の説明は、それに書いていません!

    チェックインカーネルを音\ SOC \サムスン\ s3c24xx-i2s.cは、オペレーティングIISCONに加えて、だけでなく、IISMOD、IISFCOを動作させることがわかりました。

    そして、参照カーネルs3c24xx-i2s.cは、S3C2440-i2s.cを変更しました:

    s3c2440_snd_txctrlを追加()、s3c2440_snd_rxctrl()、その後、s3c2440_i2s_triggerを変更します()。

5.再コンパイル負荷ドライバ、およびarecord 5秒後に正常終了、エラーがない、再び5 my1.wavを-d行います。

    IISCONは、の値を参照してください。

    /#devmem2 0x55000000

    アドレスAT 0x55000000値(0xb6fbd000):0x10B 、説明のビット[0] 1 を手に入れます!

    /#猫の/ proc /割り込み

    CPU0

    25:0 S3C S3C2410、WDT

    30:139493 S3C2410タイマーティックS3C

    34:1のキャプチャのための私のalsa S3C  指示DMAが発生した割り込み

    実行はaplayのmy1.wav、音を再生できます!成功の記録を説明!

6.でJZ2440、WM8976サウンドテストも成功しました。そして、カバー、過去にプログラム、ちょうど必要性のs3c2440_dma.cとs3c2440_iis.cコピーを変更します。

別館:ソース

myalsa_FS2410_can_record

myalsa_JZ2440_can_record

第四に、参考文献

1.魏東山プロジェクトの戦闘の組込みLinuxビデオチュートリアル_3 ALSAサウンドカード

2.リチウム蘭渓  S3C24XX DMAソースコード解析フレームワーク

3. Linuxの3.4.2カーネルソース

4. S3C2440データシート

おすすめ

転載: www.cnblogs.com/normalmanzhao2003/p/12333864.html