国产成人高清亚洲,日韩无码一区二区,国产精品亚洲综合专区片高清久久久,欧美日韩国产区在线观看,sese在线,亞洲綜合久久精品無碼色欲,日韩亚洲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è)圖譜