音頻驅(qū)動(dòng)實(shí)驗(yàn)教程
圖1
如上圖是音頻模塊 codec 和 cpu 連接框圖,主要由三部分組成:
I2C 總線 - cpu 通過它實(shí)現(xiàn)對(duì) Codec 寄存器數(shù)據(jù)的讀寫。
I2S 總線 - 實(shí)現(xiàn)音頻數(shù)據(jù)在 CPU 和 Codec 間的通信。
HP_DEC - 實(shí)現(xiàn)檢測(cè)是否有 HeadSet 設(shè)備插入。
第二節(jié) linux workqueue 工作原理
音頻子系統(tǒng)的源代碼中用到了一個(gè)概念:workqueue。對(duì)于不了解的朋友,讀代碼可能會(huì)引起疑惑,所以這里做一個(gè)簡(jiǎn)單介紹。Linux 中的 Workqueue 機(jī)制就是為了簡(jiǎn)化內(nèi)核線程的創(chuàng)建,只是通過調(diào)用 workqueue 的接口就能創(chuàng)建內(nèi)核線程;并且可以根據(jù)當(dāng)前系統(tǒng) CPU 的個(gè)數(shù)創(chuàng)建線程的數(shù)量,使得線程處理的事務(wù)能夠并行化;workqueue 是內(nèi)核中實(shí)現(xiàn)簡(jiǎn)單而有效的機(jī)制,它顯然簡(jiǎn)化了內(nèi)核 Daemon 的創(chuàng)建,方便了用戶的編程。工作隊(duì)列(workqueue) 是另外一種將工作推后執(zhí)行的形式。它把工作推后,交由一個(gè)內(nèi)核線程去執(zhí)行,也就是說(shuō), 這個(gè)下半部分可以在進(jìn)程上下文中執(zhí)行。最重要的就是工作隊(duì)列允許被重新調(diào)度甚至是睡眠。 舉個(gè)栗子:
代碼1
第三節(jié) 電路原理圖介紹
下圖來(lái)源于文檔 3128_sdk_a02_20170325.pdf 中第 18 頁(yè)。
圖一、綠色框中是 codec 芯片自己檢測(cè)是否有 HeadSet 設(shè)備插入的電路原理圖,它是通過 HP_HOOK(HP_HOOK 和 HP_DEC 是連在一條線上)與 cpu 的 ADC_IN0 連接,這個(gè)有點(diǎn)類似于 AD 按鍵檢測(cè)的功能;音頻 Codec 模塊是數(shù)據(jù)與控制分開的,所以有 I2c 來(lái)控制 Codec 的寄存器的讀寫,數(shù)據(jù)通過 I2s 總線進(jìn)行傳輸。
圖2
第四節(jié) 音頻驅(qū)動(dòng)代碼結(jié)構(gòu)
代碼2
第五節(jié) dts 文件講解
代碼3
HeadSet 配置文件
代碼4
I2c 配置文件
代碼5
I2s 配置文件
rockchip-rt3224 {
代碼6
第六節(jié) 實(shí)驗(yàn)代碼
1.HeadSet 檢測(cè)
原理類似于一個(gè) ad 按鍵的功能。
注意:這里如果要測(cè)試這個(gè)功能必須在 codec 中設(shè)置一個(gè)值:
codec_hp_det = <0>; ===> codec_hp_det = <1>;
增加兩條測(cè)試信息到如下代碼中。
代碼7
耳機(jī)檢測(cè)狀態(tài)的調(diào)試:
cat sys/class/switch/h2w/state 0:無(wú)耳機(jī)插入
1:帶Mic 耳機(jī)插入(四段耳機(jī))
2:不帶 Mic 耳機(jī)插入(三段耳機(jī))
2.測(cè)試命令 amix
用 amix 命令來(lái)調(diào)節(jié)音量
amix 11 0
amix 11 120
更多完整學(xué)習(xí)資料和對(duì)應(yīng)開源套件,請(qǐng)登陸官網(wǎng):“瘋殼”
文件下載請(qǐng)點(diǎn)擊:
6、音頻驅(qū)動(dòng)實(shí)驗(yàn)教程.pdf
(507.76 KB)
2022-7-16 14:21 上傳
點(diǎn)擊文件名下載附件
下載積分: 積分 -1
|