久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Linux音頻ASoC架構驅動(dong)解析(xi)

Linux音(yin)頻ASoC架構驅動(dong)解析 時(shi)間:2018-09-29      來源:未知

近來(lai)對音(yin)(yin)頻芯(xin)片興趣頗濃(nong),想(xiang)在片選系統上(shang)實現音(yin)(yin)頻驅動(dong),仔(zi)細研究發現,Linux內(nei)核(he)系統(3.0)可以配置兩種音(yin)(yin)頻編程接口驅動(dong),其驅動(dong)架(jia)構的組(zu)成如下:

1) Linux OSS 音頻(pin)設備(bei)驅動(dong)架構(gou)的組成:mixer 接(jie)口、dsp 接(jie)口及用戶(hu)空間編(bian)程方法(fa)。

2) Linux ALSA 音(yin)頻設備(bei)驅動架構(gou)的組成:card 和組件(jian)管理、PCM 設備(bei)、control 接口(kou)、AC97 API(或者是其他音(yin)頻芯(xin)片API接口(kou))及用戶空間編程方法。

1.ASoC的由來:

由于OSS音(yin)頻(pin)驅動架構是(shi)一(yi)個沒有完全開(kai)放(fang)源代(dai)碼的商(shang)業產品,而ALSA音(yin)頻(pin)驅動架構恰(qia)好彌補(bu)了這一(yi)空白。

ASoC--ALSA System on Chip (即ALSA在(zai)片選(xuan)系(xi)統上的(de)(de)應用),是(shi)建立在(zai)標準ALSA驅動(dong)層上,為了更好地支持嵌入式處理器和(he)移動(dong)設備(bei)中(zhong)的(de)(de)音(yin)(yin)頻Codec的(de)(de)一套軟件體系(xi)。在(zai)ASoc出現(xian)之(zhi)前,內核對于SoC中(zhong)的(de)(de)音(yin)(yin)頻已(yi)經有部分的(de)(de)支持,不(bu)過會有一些局限性:

Codec驅動與SoC CPU的(de)底層耦合過(guo)于緊(jin)密,這(zhe)種不理想會導致(zhi)代碼的(de)重復(fu),例如,僅是wm8731的(de)驅動,當時Linux中(zhong)有分別針對4個平臺的(de)驅動代碼。

音頻事(shi)件(jian)沒有標準的方(fang)法來通(tong)(tong)知(zhi)用戶,例如耳(er)機、麥克風的插(cha)拔(ba)和(he)檢測,這些事(shi)件(jian)在(zai)移動設(she)備中是非常普通(tong)(tong)的,而且通(tong)(tong)常都需要特(te)定于機器的代碼進(jin)行(xing)重(zhong)新(xin)對音頻路勁(jing)進(jin)行(xing)配置。

當進行播放或錄音時,驅動會讓整個codec處于(yu)(yu)上電狀(zhuang)態(tai),這(zhe)對(dui)于(yu)(yu)PC沒問題,但(dan)對(dui)于(yu)(yu)移動設備來(lai)說,這(zhe)意(yi)味著浪費大量的電量。同(tong)時也不支(zhi)持通過(guo)改(gai)變過(guo)取樣頻率和偏置電流(liu)來(lai)達到省電的目的。

ASoC正是為了解(jie)決(jue)上述種種問題(ti)而(er)提出的(de),目前已(yi)經被整合至內核的(de)代碼樹中:sound/soc。ASoC不能單獨存(cun)在,他只是建立在標準(zhun)ALSA驅(qu)動上的(de)一(yi)個它(ta)必(bi)須和標準(zhun)的(de)ALSA驅(qu)動框架(jia)相結合才能工作(zuo)。

 

2.音頻設(she)備硬件接口

2.1 PCM 接口

      PCM也是一(yi)種4線制接口。與I2S非常相像,但支持一(yi)個更(geng)靈活的協議。它(ta)有位時(shi)鐘(BCLK)和同(tong)步時(shi)鐘(SYNC)用(yong)來在Tx和Rx在傳送和接收音頻數(shu)據是同(tong)步連接。位時(shi)鐘通常因采樣率的不同(tong)而(er)(er)不同(tong),然(ran)而(er)(er)同(tong)步時(shi)鐘(SYNC)與采樣頻率相同(tong)。PCM同(tong)樣支持時(shi)分(fen)復用(yong),可以幾個設備同(tong)時(shi)使用(yong)總線(這有時(shi)被稱為network模式)。

2.2 IIS 接口

     I2S是一個4線數字(zi)音(yin)頻接(jie)口,常用(yong)于(yu)HiFi,STB便攜設備(bei)。Tx  和(he)Rx信號線用(yong)于(yu)音(yin)頻傳輸。而位時鐘和(he)左(zuo)右(you)時鐘(LRC)用(yong)于(yu)同步(bu)鏈接(jie)。I2S具有靈活性(xing),因(yin)為控制(zhi)器和(he)解碼器都可以控制(zhi)位時鐘和(he)左(zuo)右(you)時鐘。位時鐘因(yin)采(cai)樣(yang)率(lv)和(he)主系(xi)統時鐘而有不同。LRCLK與采(cai)樣(yang)率(lv)相同。少數設備(bei)支(zhi)持獨(du)立的(de)ADC和(he)DAC的(de)LRCLK。這使在不同采(cai)樣(yang)率(lv)情況下同步(bu)捕獲和(he)回放成為可能(neng)。

2.3 AC97 接(jie)口

       AC97是(shi)一種(zhong)個(ge)人電腦聲卡上(shang)常(chang)(chang)見(jian)的(de)五線(xian)接口(kou)。現在(zai)在(zai)很多便攜(xie)設備中也很流行。這個(ge)數字音頻接口(kou)有一個(ge)復位(wei)線(xian),分時(shi)在(zai)SDATA_OUT(回放)和SDATA_IN(捕獲) 線(xian)上(shang)傳送數據。位(wei)時(shi)鐘常(chang)(chang)由解碼器驅動(dong)(通(tong)常(chang)(chang)是(shi)12.288MHz).幀時(shi)鐘(通(tong)常(chang)(chang)48kHz)總是(shi)由控制器驅動(dong)。每個(ge)AC97幀21uS,并分為13個(ge)時(shi)間槽。

2.4 音(yin)頻(pin)系統(tong)結構(gou)

         通常,就像軟件領(ling)域里的抽象和重用一(yi)樣,嵌入式(shi)設備(bei)的音頻系統(tong)可以被劃分(fen)(fen)為(wei)板(ban)載(zai)硬(ying)件(Machine)、Soc(Platform)、Codec三大部(bu)分(fen)(fen),如下圖所示:

3.  軟(ruan)件架(jia)構

在軟件層(ceng)面(mian),ASoC也(ye)把嵌(qian)入式設備的音頻系統同(tong)樣分為3大(da)部分,Machine,Platform和Codec。

Codec驅(qu)(qu)動(dong)  ASoC中的(de)一(yi)個重要設計原則就是要求(qiu)Codec驅(qu)(qu)動(dong)是平臺無關(guan)的(de),它包(bao)含了(le)一(yi)些(xie)音頻(pin)的(de)控件(Controls),音頻(pin)接口,DAMP(動(dong)態音頻(pin)電源管理)的(de)定(ding)(ding)義(yi)和(he)某些(xie)Codec IO功能(neng)。為了(le)保證硬件無關(guan)性,任何特定(ding)(ding)于(yu)平臺和(he)機器的(de)代碼(ma)都要移到Platform和(he)Machine驅(qu)(qu)動(dong)中。所有的(de)Codec驅(qu)(qu)動(dong)都要提供以(yi)下(xia)特性:

o Codec DAI 和 PCM的配(pei)置信息;

o Codec的IO控制(zhi)方(fang)式(I2C,SPI等);

o Mixer和(he)其他(ta)的音頻控件;

o Codec的ALSA音頻(pin)操作接口;

也可以(yi)增(zeng)加提供以(yi)下功能(neng):

o DAPM描述信息;

o DAPM事(shi)件處理程序;

o DAC數字靜音控制

Platform驅(qu)動  它包(bao)含了該(gai)SoC平臺的(de)音(yin)頻DMA和音(yin)頻接口(kou)的(de)配(pei)置和控制(I2S,PCM,AC97等(deng)等(deng));它也不能包(bao)含任何與板子(zi)或機器相關的(de)代碼。

Machine驅(qu)(qu)(qu)動(dong)  Machine驅(qu)(qu)(qu)動(dong)負(fu)責(ze)處(chu)理機(ji)器特有的(de)一(yi)些(xie)控件和音頻事(shi)件(例如,當播放音頻時(shi),需(xu)要(yao)先(xian)行打開一(yi)個(ge)放大器);單獨的(de)Platform和Codec驅(qu)(qu)(qu)動(dong)是不能工作(zuo)的(de),它(ta)必須由Machine驅(qu)(qu)(qu)動(dong)把它(ta)們結合(he)在一(yi)起才能完成整個(ge)設備的(de)音頻處(chu)理工作(zuo)。

4.  CLASS SOC

整個(ge)ASoC是(shi)由一些列(lie)struct組(zu)成(cheng),要(yao)搞清楚ASoC的(de)(de)工(gong)作機理,必須要(yao)理解這一系(xi)(xi)(xi)列(lie)struct之間(jian)的(de)(de)關(guan)系(xi)(xi)(xi)和作用,下面的(de)(de)關(guan)系(xi)(xi)(xi)圖展示了ASoC中重(zhong)要(yao)的(de)(de)數據結構之間(jian)的(de)(de)關(guan)聯方式:

Kernel 3.0中的ASoC數據結構(gou)

通(tong)過snd_soc_card結構,又引出了(le)Machine驅動的另(ling)外兩個(ge)(ge)個(ge)(ge)數據結構:

snd_soc_dai_link(實例(li):smdk_dai[] )

snd_soc_ops(實例:smdk_ops )

snd_soc_dai_link看名字就知(zhi)道,很明顯(xian)它是(shi)起(qi)耦合鏈(lian)接作(zuo)用(yong)的。它指(zhi)定了Platform、Codec、codec_dai、cpu_dai的名字,稍(shao)后Machine驅(qu)動(dong)將(jiang)會(hui)利用(yong)這(zhe)些名字去匹配(pei)已經在系統中注冊的platform,codec,dai。

snd_soc_ops連接Platform和Codec的(de)dai_link對應的(de)ops操(cao)作(zuo)函(han)數,本(ben)例就是smdk_ops,它只實現(xian)了hw_params函(han)數:smdk_hw_params。

 到此為止(zhi),主要(yao)的部分machine的平臺設備注冊我(wo)們(men)完成了。

上一篇:Qt-5.4.2在FS4412上的移植

下一篇:進程間通信之信號初體驗

熱點文章推(tui)薦
華清學員就(jiu)業(ye)榜單
高薪(xin)學員經驗分享
熱點新聞推薦(jian)
前(qian)臺專線:010-82525158 企業培(pei)訓(xun)洽談專線:010-82525379 院校(xiao)合作洽(qia)談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部