娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

ALSA聲卡_從零編寫之數據傳輸(基于優龍FS2410開發板,UDA1341聲卡)

發布者:清新微笑最新更新時間:2024-07-11 來源: elecfans關鍵字:數據傳輸  FS2410開發板 手機看文章 掃描二維碼
隨時隨地手機看文章

        platform->driver->ops->pointer

        所以我們必須提供這個函數(見下文s3c2440_dma_pointer)

     */

     if (playback_dma_info.be_running)

     {

        /* 如果還有數據

         * 1. 加載下一個period

         * 2. 再次啟動DMA傳輸

         */

        load_dma_period();

        s3c2440_dma_start();

    }

}


3.7 實現s3c2440_dma_pointer


(參考 soundsocsamsungdma.c 的 dma_pointer)


static snd_pcm_uframes_t s3c2440_dma_pointer(struct snd_pcm_substream *substream)

{

unsigned long res;

res = playback_dma_info.dma_ofs; //注:從上文s3c2440_dma2_irq可以看出,playback_dma_info.dma_ofs是以playback_dma_info.buffer_size(即App需要使用的緩沖區大小)為邊界的

/* we seem to be getting the odd error from the pcm library due

* to out-of-bounds pointers. this is maybe due to the dma engine

* not having loaded the new values for the channel before being

* called... (todo - fix )

*/

if (res >= snd_pcm_lib_buffer_bytes(substream)) {

if (res == snd_pcm_lib_buffer_bytes(substream))

res = 0;

}

        //snd_pcm_update_hw_ptr0需要我們返回以frame為單位的當前DMA緩沖區中已傳輸的位置

return bytes_to_frames(substream->runtime, res);

}


四、總結


1. 驅動分配DMA緩沖區


    soc_probe


        snd_soc_register_card


            snd_soc_instantiate_cards


                 snd_soc_instantiate_card


                      soc_probe_dai_link


                           soc_new_pcm


                                s3c2440_dma_platform. pcm_new (即s3c2440_dma_new)


2. app調open,最終調用到s3c2440_dma_open


    snd_soc_set_runtime_hwparams(substream, &s3c2440_dma_hardware); //設置屬性


    request_irq 注冊中斷


3. app 調用ioctl(SNDRV_PCM_IOCTL_HW_PARAMS),最終調用s3c2440_dma_hw_params


      根據params設置DMA


4. app調ioctl(SNDRV_PCM_IOCTL_PREPARE),最終調用s3c2440_dma_prepare


    /* 復位各種狀態信息 */


    /* 加載第1個period */


    load_dma_period();


5. app調用ioctl(SNDRV_PCM_IOCTL_WRITEI_FRAMES)


    把數據傳到DMA緩沖區,


    啟動傳輸,最終調用s3c2440_dma_trigger(SNDRV_PCM_TRIGGER_START)啟動DMA傳輸


6. 傳輸完一個period后,會觸發中斷,進入s3c2440_dma2_irq


   /* 更新hw_ptr等信息,


    * 并且判斷:如果buffer里沒有數據了,則調用trigger來停止DMA


    * 如果還有數據,則:


    * 1. 加載下一個period


    * 2. 再次啟動DMA傳輸


    */


五、參考資料


1. 韋東山 嵌入式Linux視頻教程_3期項目實戰之ALSA聲卡:第2課第1.1_17節_ALSA聲卡10_從零編寫之數據傳輸


2. DroidPhone 《Linux ALSA 聲卡驅動


3. 李蘭溪  S3C24XX DMA框架源碼分析


[1] [2]
關鍵字:數據傳輸  FS2410開發板 引用地址:ALSA聲卡_從零編寫之數據傳輸(基于優龍FS2410開發板,UDA1341聲卡)

上一篇:U-Boot移植
下一篇:ALSA聲卡_從零編寫之調試(基于優龍FS2410開發板,UDA1341聲卡)

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 鹿邑县| 崇仁县| 林芝县| 屏东县| 奉新县| 喀喇| 邳州市| 沅陵县| 疏勒县| 普兰县| 鄂伦春自治旗| 两当县| 军事| 满洲里市| 定陶县| 阿坝| 河曲县| 孙吴县| 太仆寺旗| 屯留县| 团风县| 安顺市| 小金县| 威远县| 萨嘎县| 得荣县| 伊通| 衡山县| 当雄县| 长武县| 施秉县| 郁南县| 汤阴县| 镇巴县| 临邑县| 中超| 舞阳县| 高台县| 定安县| 尉氏县| 炉霍县|