軟件sw17-音頻模塊開(kāi)發(fā)說(shuō)明_v_第1頁(yè)
軟件sw17-音頻模塊開(kāi)發(fā)說(shuō)明_v_第2頁(yè)
軟件sw17-音頻模塊開(kāi)發(fā)說(shuō)明_v_第3頁(yè)
軟件sw17-音頻模塊開(kāi)發(fā)說(shuō)明_v_第4頁(yè)
軟件sw17-音頻模塊開(kāi)發(fā)說(shuō)明_v_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、A20音頻模塊開(kāi)發(fā)說(shuō)明V1.0 2013-03-15A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 1 -Revision HistoryA20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 2 -VersionDateChanges compared to previous issuev1.02013-03-15初建版本目錄1.444455555666788前言1.1.1.2.1.3.編寫(xiě)目的適用范圍相關(guān)人員2.音頻

2、模塊介紹2.1. audio 模塊功能介紹audio codec 功能hdmiaudio 功能spdif 功能i2s 功能2.1.5. switch 耳機(jī)檢測(cè)功能2.2. 源碼結(jié)構(gòu)介紹2.3. audio 相關(guān)術(shù)語(yǔ)介紹2.4. audio 模塊配置介紹2.4.1. Menuconfig 配置2.4.2. Sysconfig.fex 配置121212131415151516172.4.2.1. Audiocodec 配置2.4.2.2. I2s 配置2.4.2.3. Spdif 配置3.4.音頻模塊體系結(jié)構(gòu)描述接口描述4.1. Audiocodec 接口描述4.1.1.4.1.2.系統(tǒng)音頻錄音接

3、口手機(jī)上行模擬通路接口4.1.2.1. codec_set_phoneoutcodec_set_phonemic(mic1)17codec_set_headsetmic(mic2)184.1.2.4. codec_set_dacphoneout4.1.3. 手機(jī)下行模擬通路接口1920202121212122222631324.1.3.1. codec_set_earpieceout4.2. Hdmiaudio 接口描述spdif 接口描述I2s 接口描述4.5. switch 接口描述5.模塊開(kāi)發(fā) demo最小的 playback 應(yīng)用最小的 capture 應(yīng)用5.3. Mixer 接口的

4、使用6. DeclarationA20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 3 -前言編寫(xiě)目的本文檔目的是為了讓開(kāi)發(fā)者了解 A20 音頻系統(tǒng)框架,能夠在 A20 平臺(tái)上開(kāi)發(fā)新的音頻方案。1.2. 適用范圍本模塊說(shuō)明適用于 A20 平臺(tái)1.3. 相關(guān)人員音頻系統(tǒng)開(kāi)發(fā)人員。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 4 -2. 音頻模塊介紹linux 中的 audio 子系統(tǒng)采用 alsa 架構(gòu)實(shí)現(xiàn)。alsa

5、 目前已經(jīng)成為了 linux 的主流音頻體系結(jié)構(gòu)。在內(nèi)核設(shè)備驅(qū)動(dòng)層,ALSA 提供了 alsa-driver,同時(shí)在應(yīng)用層,ALSA 為我們提供了 alsa-lib,應(yīng)用程序只要調(diào)用 alsa-lib 提供的 API,即可以完成對(duì)底層音頻硬件的控制。2.1. audio 模塊功能介紹在 a20 中,存在 4 個(gè)音頻設(shè)備。分別為 audiocodec,hdmiaudio,spdif,i2s。其中芯片內(nèi)置的 audiocodec 采用 alsa-pci 架構(gòu)實(shí)現(xiàn),hdmiaudio,spdif,i2s 采用 alsa-asoc 架構(gòu)實(shí)現(xiàn)。switch 主要實(shí)現(xiàn)耳機(jī)檢測(cè)的功能。i2s 都可以配置成

6、pcm 和 i2s 兩種模式。2.1.1. audio codec 功能Audio Codec 驅(qū)動(dòng)所具有的功能:支持多種采樣率格式(8khz, 11.025 KHz, 12 KHz, 16 KHz, 22.05 KHz, 24 KHz, 32 KHz, 44.1 KHz , 48 KHz, 96KHz, 192KHz);支持 mono 和 stereo 模式;支持同時(shí) playback 和 record(全雙工模式);支持 start, stop, pause 和 resume;支持 mixer 接口支持 3g 通話功能2.1.2. hdmiaudio 功能hdmiaudio 驅(qū)動(dòng)所具有的功

7、能:支持多種采樣率格式(8khz,11.025khz,12khz,16khz,22.05, 24khz,32khz, 44.1, 48khz,88.2khz,96khz,176.4khz,192khz);支持 mono 和 stereo 模式;只支持 playback 模式,不支持 record 模式。支持 start, stop, pause 和 resume;2.1.3. spdif 功能spdif 驅(qū)動(dòng)所具有的功能:支持多種采樣率格式(22.05khz,24khz,32khz,44.1khz,48khz,88.2khz,96khz,176.4khz,192khz);支持 mono 和 s

8、tereo 模式;只支持 playback 模式,不支持 record 模式。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 5 -支持 start, stop, pause 和 resume;2.1.4. i2s 功能i2s 驅(qū)動(dòng)所具有的功能:支持多種采樣率格式(8khz,11.025khz,16khz,22.05khz,24khz,32khz,44.1khz,48khz,88.2khz,96khz,176.4khz,192khz);支持 mono 和 stereo 模式;支持同時(shí) playback

9、和 record(全雙工模式);支持 start, stop, pause 和 resume;I2s 驅(qū)動(dòng)可以配置成 i2s 模式,也可以配置成 pcm 模式,如果配置成 pcm 模式,那么只支持 8k 采樣率。在 a20 中,有兩套 pcm 驅(qū)動(dòng),為了區(qū)分,分別命名為 pcm 和 i2s。2.1.5. switch 耳機(jī)檢測(cè)功能Switch 支持 3 段耳機(jī),4 段耳機(jī)的插拔檢測(cè)。2.2. 源碼結(jié)構(gòu)介紹a20 中的音頻子系統(tǒng)存放于soc 目錄下,如圖 1 音頻系統(tǒng)源碼所示。其中 Audiocodec, hdmiaudio,i2s,spdif 都是一個(gè)獨(dú)立的音頻驅(qū)動(dòng)。耳機(jī)檢測(cè)驅(qū)動(dòng)源碼如圖 2

10、switch 源碼所示。圖 1 音頻系統(tǒng)源碼A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 6 -圖 2.Switch 源碼2.3.audio 相關(guān)術(shù)語(yǔ)介紹A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 7 -Audio Driver: AcronymsAcronymDefinitionALSAAdvanced Linux Sound ArchitectureDMA即直接內(nèi)存存取, 指數(shù)據(jù)不經(jīng) cpu, 直接在設(shè)

11、備和內(nèi)存, 內(nèi)存和內(nèi)存,設(shè)備和設(shè)備之間傳輸.OSSOpen Sound System樣本長(zhǎng) 度sample樣本是記錄音頻數(shù)據(jù)最基本的單位,常見(jiàn)的有 8 位和 16 位通 道 數(shù)channel該參數(shù)為 1 表示單聲道,2 則是立體聲。幀 frame幀記錄了一個(gè)聲音單元,其長(zhǎng)度為樣本長(zhǎng)度與通道數(shù)的乘積。采樣率 rate每秒鐘采樣次數(shù),該次數(shù)是針對(duì)幀而言。周期 period音頻設(shè)備一次處理所需要的幀數(shù),對(duì)于音頻設(shè)備的數(shù)據(jù)訪問(wèn)以及音頻數(shù)據(jù)的存儲(chǔ),都是以此為單位。交錯(cuò)模 式interleaved是一種音頻數(shù)據(jù)的記錄模式,在交錯(cuò)模式下,數(shù)據(jù)以連續(xù)幀的形式存放,即首先記錄完幀 1 的左聲道樣本和右聲道樣本(

12、假設(shè)為立體聲格式),再開(kāi)始幀 2 的記錄,而在非交錯(cuò)模式下,首先記錄的是一個(gè)周期內(nèi)所有幀的左聲道樣本,再記錄右聲道樣本,數(shù)據(jù)是以連續(xù)通道的方式存儲(chǔ)。不過(guò)多數(shù)情況下,我們只需要使用交錯(cuò)模式就可以了。Audiocodec芯片內(nèi)置音頻接口Hdmiaudio內(nèi)置 hdmi 音頻接口Spdif外置音響音頻設(shè)備接口2.4. audio 模塊配置介紹2.4.1. Menuconfig 配置在編譯服務(wù)器上,目錄為licheelinux-3.3 上,輸入命令:如下所示:音頻驅(qū)動(dòng)配置音頻模塊中包括 audiocodec,hdmiaudio,spdif,i2s 共 4 個(gè)音頻驅(qū)動(dòng)。他們的配置項(xiàng)如圖 3 到圖 7 所

13、示。圖 3.Device Drivers 選項(xiàng)配置A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 8 -make A R C H =arm menuconfigI2s外置音頻通道接口圖 4.音頻模塊配置圖 5.音頻 ALSA 模塊配置A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 9 -圖 6.音頻 soc 模塊配置圖 7.音頻音頻驅(qū)動(dòng)配置Hdmi 配置如果要編譯 hdmiaudio,也需要將 hdmi vide

14、o 編譯到內(nèi)核中。如圖 8,圖 9 所示。進(jìn)入 device driver 后,選擇 graphics support,然后選擇 buildin HDMI driver support(sun7i)即可。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 10 -圖 8graphics support圖 9hdmi driver耳機(jī)檢測(cè)驅(qū)動(dòng)配置在 android 系統(tǒng)中,支持耳機(jī)動(dòng)態(tài)檢測(cè)。耳機(jī)檢測(cè)驅(qū)動(dòng)配置如圖 10圖 12 所示。圖 10 staging driverA20 音頻模塊開(kāi)發(fā)說(shuō)明Copyrigh

15、t 2013Allwinner Technology. All Rights Reserved.- 11 -圖 11.android 配置圖 12 耳機(jī)檢測(cè)驅(qū)動(dòng)配置2.4.2. Sysconfig.fex 配置配置文件的位置:licheetoolspackchipssun7iconfigsandroidwing-XXX 目錄下。音頻中需要配置的有 audiocodec,i2s,pcm,spdif 四個(gè)音頻驅(qū)動(dòng)。2.4.2.1. Audiocodec 配置audio_para audio_used audio_pa_ctrl= 1= port:PA182.4.2.2. spdif 配置A20 音

16、頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 12 -配置項(xiàng)配置項(xiàng)含義spdif_used=xxxx 為 1 時(shí)加載該模塊,為 0 時(shí)不加載default value: 1spdif_doutspdid out 的 GPIO 配置spdif_dinspdid in 的 GPIO 配置spdif_mclkSpdif mclk 信號(hào)的 GPIO 配置配置項(xiàng)配置項(xiàng)含義audio_used =xxAudiocodec 是否使用,1:打開(kāi)(默認(rèn))0:關(guān)閉audio_pa_ctrl=xx喇叭的 gpio 口控制。2.4.2

17、.3. I2s 配置I2s 可以配置成 pcm 模式,也可以配置成 i2s 模式。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 13 -配置項(xiàng)配置項(xiàng)含義i2s_usedxx 為1時(shí)加載該模塊,為0時(shí)不加載default value: 1i2s_channel聲道控制default value: 2i2s_master主從模式配置1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master) SOC as slave & codec as master4: SND_S

18、OC_DAIFMT_CBS_CFS(codec clk & FRM slave) SOC as master & codec as slave i2s_selectPcm 和 i2s 模式選擇0:pcm1:i2saudio_format音頻格式選擇1: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format) 3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB is ava

19、ilable on 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1nd BCLK rising edge after LRC rising edge)signal_inversion音頻信號(hào)模式選擇1: SND_SOC_DAIFMT_NB_NF(normal bit clock + frame) 2: SND_SOC_DAIFMT_NB_IF(normal BCLK + inv FRM) 3: SND_SOC_DAIFMT_IB_NF(invert BCL

20、K + nor FRM) 4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM)over_sample_rate音頻過(guò)采樣率選擇:support 128fs/192fs/256fs/384fs/512fs/768fs default value: 256sample_resolution采樣精度選擇:16bits/20bits/24bitsdefault value: 16word_select_size位寬選擇: 16bits/24bits/32bitsdefault value: 32pcm_sync_periodPCM 周期長(zhǎng)度選擇16/32/64/128/

21、256 BCLKs default value: 256msb_lsb_first數(shù)據(jù)位模式選擇 0: msb first; 1: lsb firstdefault value: 0sign_extend標(biāo)志位擴(kuò)展模式 0: zero pending; 1: sign extenddefault value: 0slot_index時(shí)間片索引 0: the 1st slot - 3: the 4th slotdefault value: 0slot_width時(shí)間片寬度 8 bit width / 16 bit widthdefault value: 16frame_width幀寬度 0: l

22、ong frame = 2 BCLK width; 1: short frame = 1 BCLK widthdefault value: 1tx_data_modeTx 數(shù)據(jù)傳輸模式0: 16bit linear PCM; 1: 8bit linear PCM; 2: 8bit u-law; 3: 8bit a-lawdefault value: 0rx_data_modeRx 數(shù)據(jù)傳輸模式0: 16bit linear PCM; 1: 8bit linear PCM; 2: 8bit u-law; 3: 8bit a-lawdefault value: 02.4.2.4. pcm 配置pc

23、n 可以配置成 pcm 模式,也可以配置成 i2s 模式。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 14 -配置項(xiàng)配置項(xiàng)含義pcm_usedxx 為1時(shí)加載該模塊,為0時(shí)不加載default value: 1pcm_channel聲道控制default value: 2Pcm_master主從模式配置1: SND_SOC_DAIFMT_CBM_CFM(codec clk & FRM master) SOC as slave & codec as master4: SND_SOC_DAIFMT_CB

24、S_CFS(codec clk & FRM slave) SOC as master & codec as slave pcm_selectPcm 和 i2s 模式選擇1:pcm0:i2saudio_format音頻格式選擇 default value: 41: SND_SOC_DAIFMT_I2S(standard i2s format)2: SND_SOC_DAIFMT_RIGHT_J(right justfied format) 3: SND_SOC_DAIFMT_LEFT_J(left justfied format)4: SND_SOC_DAIFMT_DSP_A(pcm. MSB i

25、s available on 2nd BCLK rising edge after LRC rising edge)5: SND_SOC_DAIFMT_DSP_B(pcm. MSB is available on 1nd BCLK rising edge after LRC rising edge)signal_inversion音頻信號(hào)模式選擇 default value: 31: SND_SOC_DAIFMT_NB_NF(normal bit clock + frame) 2: SND_SOC_DAIFMT_NB_IF(normal BCLK + inv FRM) 3: SND_SOC_D

26、AIFMT_IB_NF(invert BCLK + nor FRM) 4: SND_SOC_DAIFMT_IB_IF(invert BCLK + FRM)over_sample_rate音頻過(guò)采樣率選擇:support 128fs/192fs/256fs/384fs/512fs/768fs default value: 512sample_resolution采樣精度選擇:16bits/20bits/24bitsdefault value: 16word_select_size位寬選擇: 16bits/24bits/32bitsdefault value: 32pcm_sync_periodP

27、CM 周期長(zhǎng)度選擇16/32/64/128/256 BCLKs default value: 64msb_lsb_first數(shù)據(jù)位模式選擇 0: msb first; 1: lsb firstdefault value: 0sign_extend標(biāo)志位擴(kuò)展模式 0: zero pending; 1: sign extenddefault value:i2s_mclkI2sMCLK 信號(hào)的 GPIO 配置i2s_bclkI2sBCLK 信號(hào)的 GPIO 配置i2s_lrclkI2sLRCK 信號(hào)的 GPIO 配置i2s_dout0I2S out0的 GPIO 配置i2s_dout1暫不使用i2s

28、_dout2暫不使用i2s_dout3暫不使用i2s_dinI2sIN 信號(hào)的 GPIO 配置A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 15 -0slot_index時(shí)間片索引 0: the 1st slot - 3: the 4th slotdefault value: 0slot_width時(shí)間片寬度 8 bit width / 16 bit widthdefault value: 16frame_width幀寬度 0: long frame = 2 BCLK width; 1: short

29、frame = 1 BCLK widthdefault value: 1tx_data_modeTx 數(shù)據(jù)傳輸模式0: 16bit linear PCM; 1: 8bit linear PCM; 2: 8bit u-law; 3: 8bit a-lawdefault value: 0rx_data_modeRx 數(shù)據(jù)傳輸模式0: 16bit linear PCM; 1: 8bit linear PCM; 2: 8bit u-law; 3: 8bit a-lawdefault value: 0pcm_bclk=xxpcmBCLK 信號(hào)的 GPIO 配置pcm_lrclk =xxpcmLRCK 信

30、號(hào)的 GPIO 配置pcm_doutpcm out 的 GPIO 配置pcm_dinpcmIN 信號(hào)的 GPIO 配置pcm_mclk =xx暫不使用pcm_bclk=xxpcmBCLK 信號(hào)的 GPIO 配置pcm_lrclk =xxpcmLRCK 信號(hào)的 GPIO 配置3. 音頻模塊體系結(jié)構(gòu)描述在 a20 中有 4 個(gè)音頻設(shè)備驅(qū)動(dòng),分別為 audiocodec,hdmiaudio,spdif,pcm/i2s 以及一個(gè)耳機(jī)檢測(cè)驅(qū)動(dòng) switch。在 a20 中,基本的音頻框架如圖 4.a20 音頻框架所示。android spaceKernel spaceAlsa sound coreKer

31、nel spaceHardware spaceA udi 圖 13 a20 音頻框架A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 16 -o _headphone _hardwareSpeaker/earphone/M ic in /phone inTV out外部音箱設(shè)備bt3gSw itc h _d rvaudiocodechdm iaudiospdifp cm /da udioI2s/da udioT in y _a ls aA udio _h w Android audio framework

32、4. 接口描述在音頻框架中,audiocodec 屬于模擬音頻部分,hdmiaudio,spdif,i2s/pcm 屬于數(shù)字音頻。其中 audiocodec 在 3g 音頻通話中支持模擬音頻通路和通話錄音功能接口。i2s 可以配置成 pcm 和 i2s 模式。Hdmiaudio,spdif 支持 raw data 模式。耳機(jī)檢測(cè)驅(qū)動(dòng)switch支持 android 標(biāo)準(zhǔn)的耳機(jī)檢測(cè)接口。4.1. Audiocodec 接口描述在模擬音頻驅(qū)動(dòng) audiocodec 中,支持 ADC 錄音,DAC 播放,模擬音頻通路。支持四路音頻輸入(mic1,mic2,line in, fm),兩路音頻輸出(ph

33、one out, headphone)。如圖 13.audiocodec 音頻硬件通道所示。Audiocodec 中的音頻通道接口也是根據(jù)圖 13.audiocodec 音頻硬件通道封裝的。phonemic1m ic 2lin e infm hp out圖 14.audiocodec 音頻硬件通道4.1.1. 系統(tǒng)音頻錄音接口如下圖所示,彩色部分為電話錄音通路,注意只有用 mic1 昨晚上行通話才可以,使用 mic2 不能實(shí)現(xiàn)電話錄音功能,硬件不支持。rototype:static int codec_set_phone_capture(struct snd_kcontrol *kcontro

34、l, struct snd_ctl_elem_value *ucontrol)Arguments: Kcontrol:mixer 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 17 -sysbusa dc indac outReturn 0.參數(shù)設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:使能下行 phone_capture。0:不使能下行 phone_capture。phone

35、outmic1m ic 2lin e infm hp out圖 15 系統(tǒng)錄音接口4.1.2. 手機(jī)上行模擬通路接口如下圖彩色部分顯示,上行通路有 3 out,mic2-phone-out 和 dac-phone out。條可以選擇,分別是 mic1到 phonephone outa dc inmic1m ic 2lin e infm dac outhp out圖 16 手機(jī)上行模擬通路接口A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 18 -sysbussysbusa dc indac out4.1

36、.2.1. codec_set_phoneout如下圖 DAC PHONEOUT 通路所示,內(nèi)部 DAC 到 phone 的通路,接口函數(shù)為:Prototype:static int codec_set_dacphoneout(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)Arguments:Kcontrol:mixer 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:Return 0.參數(shù)設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:

37、使能上行 dacphoneout。0:不使能上行 dacphoneout。phone outmic1m ic 2lin e infm hp out圖 17 手機(jī)上行模擬通路 DAC OUT 接口4.1.2.2. codec_set_phonemic(mic1)如下圖 PHONEMIC 通路所示,其實(shí)就是開(kāi)通 mic1 通路。接口函數(shù):Prototype:static int codec_set_phonemic(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)Arguments: Kcontrol:mixer

38、 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 19 -sysbusa dc indac outReturn 0.參數(shù)設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:使能上行 phonemic。0:不使能上行 phonemic。phone outmic1m ic 2lin e infm hp out圖 18 手機(jī)上行模擬通路 MIC1 接口4.1.2.3. codec_set_head

39、setmic(mic2)如下圖 PHONEMICT 通路所示,其實(shí)就是開(kāi)通 mic2 通路接口函數(shù):Prototype:static int codec_set_headsetmic(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)Arguments: Kcontrol:mixer 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:Return 0.參數(shù)設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:使能上行 headsetmic。0:不使能

40、上行 headsetmic。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 20 -sysbusa dc indac outphone outmic1m ic 2lin e infm hp out圖 19 手機(jī)上行模擬通路 MIC2 接口4.1.2.4. codec_set_dacphoneout如下圖 PHONEOUT 通路所示,接口函數(shù):Prototype:static int codec_set_phoneout(struct snd_kcontrol *kcontrol, struct snd_

41、ctl_elem_value *ucontrol)Arguments: Kcontrol:mixer 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:Return 0.參數(shù)設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:使能上行 phoneout。0:不使能上行 phoneout。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 21 -sysbusa dc indac outphone outmic1m ic 2lin e infm

42、hp out圖 20 手機(jī)上行模擬通路 PHONE OUT 接口4.1.3. 手機(jī)下行模擬通路接口4.1.3.1. codec_set_earpieceout如下圖紅色通路顯示,;line-in 輸入直接開(kāi)通 mixer 到耳機(jī)的通路,接口函數(shù)為:Prototype:static int codec_set_earpieceout(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)Arguments: Kcontrol:mixer 控制接口 Ucontrol:數(shù)據(jù)傳輸接口 Returns:Return 0.參數(shù)

43、設(shè)置成功Note:應(yīng)用層通過(guò) alsa lib 中的 mixer_ctl_set_value 進(jìn)行調(diào)用;1:使能上行 earpiece。 0:不使能上行 earpiece。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 22 -sysbusa dc indac outlin e infm 圖 21 手機(jī)下行模擬通路接口4.2. Hdmiaudio 接口描述Hdmiaudio 中,支持 raw data 和 pcm data 模式。當(dāng)音頻 channel 設(shè)置成 channels = 4 的時(shí)候,hdmi

44、audio 會(huì)相應(yīng)設(shè)置成 raw data 模式。當(dāng)音頻 channel 設(shè)置成 channels = 2 或者 1 的時(shí)候,hdmiaudio 會(huì)設(shè)置成 pcm data 模式。 Hdmiaudio 是一個(gè)獨(dú)立的音頻驅(qū)動(dòng),接口支持 alsa lib 中的標(biāo)準(zhǔn)接口,不在這里一一列舉。4.3. spdif 接口描述spdif 中,支持 raw data 和 pcm data 模式。當(dāng)音頻 channel 設(shè)置成 channels = 4 的時(shí)候,spdif 會(huì)相應(yīng)設(shè)置成 raw data 模式。當(dāng)音頻channel 設(shè)置成 channels = 2 或者 1 的時(shí)候,spdif 會(huì)設(shè)置成 pcm

45、 data 模式。spdif 是一個(gè)獨(dú)立的音頻驅(qū)動(dòng),接口支持 alsa lib 中的標(biāo)準(zhǔn)接口,不在這里一一列舉。4.4. I2s 接口描述具體參考 2.4.2.2 中 i2s 的 sysconfig 配置。4.5. switch 接口描述Switch 接口支持 android 標(biāo)準(zhǔn)的耳機(jī)檢測(cè)。支持 3 段耳機(jī)和四段耳機(jī)的插拔檢測(cè)功能。不再描述。A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 23 -sysbusa dc indac out5. 模塊開(kāi)發(fā) demo音頻的外部接口跟普通的驅(qū)動(dòng)不同。音頻的 a

46、pplication 需要額外的 alsa-lib 進(jìn)行外部接口的封裝。在 android2.3.4 中,用的是 small alsa 應(yīng)用庫(kù),而在 android4.0 以后,采用 tiny alsa 應(yīng)用庫(kù)進(jìn)行外部接口的封裝。所有的接口都是音頻的標(biāo)準(zhǔn)接口。在這里不一一羅列。下面給出播放和錄音的應(yīng)用.寫(xiě)一個(gè)音頻應(yīng)用程序涉及到以下幾步opening the audio deviceset the parameters of the devicereceive audio data from the device or deliver audio data to the device close

47、 the device在 a20 中,涉及 4 個(gè)音頻驅(qū)動(dòng),alsa 的 lib 庫(kù)支持任何一個(gè)音頻驅(qū)動(dòng)。請(qǐng)參考最小playback 應(yīng)用和錄音應(yīng)用以及 mixer 接口的使用方法。demo 采用 tiny_alsa 庫(kù),可以從android4.1externaltinyalsa 中獲得。最小的 playback 應(yīng)用/*spdif testplay_high_rate-1633.c* (C) Copyright 2010-2016reuuimllatech Technology Co., Ltd. huangxin This program is free software; you can

48、 redistribute it and/ormodify it under the terms of the GNU General Public License aspublished by the Free Software Foundation; either version 2 ofthe License, or (at your option) any later version.*/#include #include #include #include #include A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rig

49、hts Reserved.- 24 -#define ID_RIFF 0 x46464952 #define ID_WAVE 0 x45564157 #define ID_FMT0 x20746d66 #define ID_DATA 0 x61746164#define FORMAT_PCM 1struct wav_header uint32_t riff_id; uint32_t riff_sz; uint32_t riff_fmt; uint32_t fmt_id; uint32_t fmt_sz; uint16_t audio_format;uint16_t num_channels;

50、uint32_t sample_rate; uint32_t byte_rate; uint16_t block_align; uint16_t bits_per_sample; uint32_t data_id;uint32_t data_sz;void play_sample(FILE *file, unsigned int device, unsigned int channels, unsigned int rate, unsigned int bits);int main(int argc, char *argv)FILE *file;struct wav_header header

51、; unsigned int device = 0;if (argc 0) if (pcm_write(pcm0, buffer, num_read) fprintf(stderr, Error playing samplen);break;if (feof(file) A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 27 -fseek(file, 0L, SEEK_SET);/break; i+;if(i loop_time) break; while (num_read 0);free(buffer

52、); pcm_close(pcm0);5.2. 最小的 capture 應(yīng)用/* tinycap.c* Copyright 2011, The Android Open Source Project* Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:*/Redistributions of source code must retain the above c

53、opyright notice, this list of conditions and the following disclaimer.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.Neither the name of The Andr

54、oid Open Source Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.#include #include #include #include #include #define ID_RIFF 0 x46464952 #define ID_WAVE 0 x45564157 #define ID_FMT0 x20746d66 #de

55、fine ID_DATA 0 x61746164A20 音頻模塊開(kāi)發(fā)說(shuō)明Copyright 2013Allwinner Technology. All Rights Reserved.- 28 -#define FORMAT_PCM 1struct wav_header uint32_t riff_id; uint32_t riff_sz; uint32_t riff_fmt; uint32_t fmt_id; uint32_t fmt_sz; uint16_t audio_format;uint16_t num_channels; uint32_t sample_rate; uint32_t byte_rate; uint16_t block_align; uint16_t bits_per_sample; uint32_t data_id;uint32_t data_sz;int capturing = 1;static char filename64 = record1.wav;unsigned

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論