成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【RT1052】rt-thread 音頻驅(qū)動(dòng)框架分析

03/03 14:43
481
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

上一帖子中rt-thread適配移植主要介紹了ok1052的板卡支持,但只測(cè)試了部分驅(qū)動(dòng)(串口、網(wǎng)卡),之后測(cè)試音頻的時(shí)候發(fā)現(xiàn)音頻部分只實(shí)現(xiàn)了播放,錄音沒有實(shí)現(xiàn)。分析了下音頻驅(qū)動(dòng)部分,發(fā)現(xiàn)框架是完整的。本篇先從框架入手,分析一下音頻驅(qū)動(dòng)的工作流程。注:本章內(nèi)容不只局限ok1052板卡,而是針對(duì)rt-thread系統(tǒng)的分析

一、首先整體框架還是比較簡(jiǎn)單的,具體見下圖:

1、從上圖可以看到audio.c是音頻設(shè)備的核心部分,起到承上啟下的作用,向上為應(yīng)用提供通用接口(open、read、write、control等),向下為底層驅(qū)動(dòng)提供了函數(shù)(rt_audio_tx_complete、rt_audio_rx_done)及需要實(shí)現(xiàn)的接口(ops)

2、再來看drv_codec.c和fsl_wm8960.c,這是主控imx rt1050和音頻芯片wm8960的芯片具體的驅(qū)動(dòng)部分,不同板卡音頻驅(qū)動(dòng)主要是實(shí)現(xiàn)這一部分

a、其中drv_codec.c中實(shí)現(xiàn)了ops的相關(guān)函數(shù)接口,并通過rt_audio_register函數(shù)注冊(cè)到audio.c,相關(guān)代碼如下:

const struct rt_audio_ops _g_audio_ops =
{
.getcaps = icodec_getcaps,
.configure = icodec_configure,

.init = icodec_init,
.shutdown = icodec_shutdown,
.start = icodec_start,
.stop = icodec_stop,
.suspend = icodec_suspend,
.resume = icodec_resume,
.control = icodec_control,

.transmit = icodec_transmit,
};

int rt_hw_codec_init(void)
{
...
...
audio->ops = (struct rt_audio_ops*)&_g_audio_ops;
...
result = rt_audio_register(audio,"sound0", RT_DEVICE_FLAG_RDWR, &_g_imxcodec);
...
...
}

b、上面的icodec_xxx(xxx代指init、shutdown等)函數(shù)通過調(diào)用fsl_sai.c、fsl_sai_edma.c、wm8960.c中的函數(shù)實(shí)現(xiàn)相關(guān)操作。如:icodec_init(主要實(shí)現(xiàn)了rt1052音頻外設(shè)及wm8960的初始化)

static rt_err_t icodec_init(struct rt_audio_device *audio)
{
...
SAI_TxInit(DEMO_SAI, &config);
...
DMAMUX_Init(DMAMUX0);
...
WM8960_Init(&icodec->codecHandle, NULL);
...
}

3、接下來分析下音頻發(fā)送及接收具體實(shí)現(xiàn):

a、發(fā)送部分是通過消息隊(duì)列,相關(guān)代碼在audio.c中實(shí)現(xiàn)(rt_data_queue_push、rt_data_queue_peak、rt_data_queue_pop),主要流程見下圖:

b、接收部分是通過pipe實(shí)現(xiàn)的(具體到代碼在audio_pipe.c中),pipe由audio.c中創(chuàng)建,類型為循環(huán)覆蓋(RT_PIPE_FLAG_FORCE_WR),接收的主要流程如下:

二、至此,音頻驅(qū)動(dòng)框架部分分析完成,下一篇將會(huì)基于ok1052實(shí)現(xiàn)并完善rt-thread下的音頻驅(qū)動(dòng)。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

常山县| 安吉县| 襄樊市| 海宁市| 宝山区| 靖边县| 钟祥市| 台江县| 内黄县| 尖扎县| 长葛市| 额济纳旗| 铜梁县| 临朐县| 健康| 嘉祥县| 宣武区| 海门市| 咸阳市| 福建省| 清流县| 章丘市| 中阳县| 宁化县| 铅山县| 上虞市| 内丘县| 于都县| 高陵县| 新田县| 台北市| 象山县| 西充县| 涪陵区| 彝良县| 苗栗县| 株洲县| 潜山县| 东山县| 天津市| 白朗县|