嵌入式系統中的IIS音頻接口技術(shù)
IIS(Integrate Interface of Sound)即集成音頻接口,在上個(gè)世紀80年代首先被Philips公司用于消費產(chǎn)品的音頻設備,并在一個(gè)稱(chēng)為L(cháng)RCLK(Left/Right CLOCK)的信號機制中經(jīng)過(guò)多路轉換,將兩路音頻信號合成單一的數據隊列。當LRCLK為高時(shí),左聲道數據被傳輸;LRCLK為低時(shí),右聲道數據被傳輸(也可以反過(guò)來(lái),高低與左右聲音的對應可以自定義)。對于多通道系統,在同樣的BCLK和LRCLK條件下,并行執行幾個(gè)數據隊列也是可能的。由于IIS、PCM和類(lèi)似的音頻接口不能提供寄存器入口,因此需要獨立的控制接口。
IIS總線(xiàn)一般具有4根信號線(xiàn),如圖1所示,包括串行數據輸入(IISDI)、串行數據輸出(IISD0)、左/右聲道選擇(IISLRCK)和串行數據時(shí)鐘(IISCLK);產(chǎn)生IISLRCK和IISCLK的是主設備。
2 IIS音頻驅動(dòng)實(shí)現
音頻驅動(dòng)有3種模式:MDD/PDD模式、Wavedev2模式、UAM模式。它們相同的地方很明顯:接口相同,都是流驅動(dòng),透過(guò)流接口與上層的waveapi.dll交互。
第1種MDD/PDD模式是最早的模式,也是其他驅動(dòng)常見(jiàn)的分層模式。如果使用CE提供的MDD(wavem―dd.1ib),會(huì )受到一些限制:僅支持一個(gè)設備;一個(gè)設置僅支持一個(gè)流;對循環(huán)的支持不大可靠;對流的支持較弱。當然,由于提供了源碼,可以自己修改MDD,突破以上這些限制。
第2種Wavedev2模式,是因為2000年的Smartphone項目產(chǎn)生了新的要求,這些需求需要大改MDD/PDD。比如上面的限制2,根據CE的開(kāi)發(fā)歷史,此時(shí)waveapi.dll也不支持software mixer,這就是說(shuō)只能同時(shí)允許一個(gè)應用在播放。所以根據當時(shí)情況,CE的多媒體開(kāi)發(fā)團隊設計了Wavedev2模式。這是一個(gè)單體(不分層)的驅動(dòng)模式,平臺相關(guān)的模塊都在hwctxt.h和hwetxt.cpp中,此外還加入了midi支持、software mixer支持、S/PDlF接口、gain class接口、forcespeaker接口,等等。因此,開(kāi)發(fā)Smartphone或者PPC,這個(gè)模式是挺適合的。
第3種UAM模式,即統一音頻模式(Unified AudioModel),在開(kāi)發(fā)WinCE4.2時(shí),要增加對DirectSound的支持,而且有一些音頻設備是支持硬件mixer的,對此使用UAM是很好的選擇。
本測試采用MDD/PDD的驅動(dòng)結構,下面講述本驅動(dòng)的關(guān)鍵點(diǎn)。
2.1 DMA控制及驅動(dòng)
通俗地講,DMA(直接內存存取)不需要CPU干擾也不消耗CPU資源,可以把音頻數據自動(dòng)地從系統總線(xiàn)搬到IIS總線(xiàn)上;如果音頻平均按采樣頻率44.1 kHz、16位字長(cháng)、左右2聲道計算,碼流為1.411 Mbps,通常在1~3Mbps,所以采用DMA傳輸十分必要。
2.2 時(shí)鐘配置
只要位時(shí)鐘和采樣時(shí)鐘能匹配好,IIS數據格式主從一致,DMA配置好,音頻就可以工作了。
IIS數據格式主要分3種:左對齊、右對齊、IIS格式。聲音聽(tīng)起來(lái)“怪怪地”,就是數據格式不對。頻率計算方法如表1所列。
IIS主設備時(shí)鐘頻率可以通過(guò)采樣頻率來(lái)選擇。IIS主設備時(shí)鐘頻率是由IIS預分頻器產(chǎn)生的(IIS主設備時(shí)鐘頻率=MCLK/預分頻器值),因此必須選擇合適的預分頻器的值和CODECLK的采樣頻率類(lèi)型(256或者384fs),才能獲得合適的IISLRC采樣頻率(IISLRCK頻率=IIS主設備時(shí)鐘頻率/CODECLK的采樣頻率類(lèi)型);串行位采樣頻率類(lèi)型(16/32/48fs)可以通過(guò)配置每個(gè)通道的串行位數和CODECLK采樣頻率類(lèi)型來(lái)完成,它們之間的關(guān)系如表2所列。
如晶振頻率為16.934 4 MHz,通過(guò)384分頻為44.1kHz(采樣頻率就是這么來(lái)的)。
位時(shí)鐘頻率=采樣頻率×數據位×2=44.1 kHz×16×2=1.411 MHz
對于其他頻率的晶振或是來(lái)自于總線(xiàn)的時(shí)鐘頻率,就要計算出IISC0N中的分頻系數了,以最大限度擬合CODECLK。
2.3 CODEC控制
目前有SPI、I2C和L3三種總線(xiàn)控制CODEC。L3總線(xiàn)(L3MODE、L3CLOCK、L3DATA)都是由通用的I/O端口來(lái)控制的。其中L3接口實(shí)際上是一種串行接口,它由3根信號線(xiàn)組成,完成處理器和C0DEC之間的數據和控制信號交換。UDAl341TS就是采用L3接口的。
L3DATA:處理器接口數據線(xiàn)。
L3MODE:處理器接口模式信號線(xiàn)。
L3CLOCK:處理器接口時(shí)鐘信號線(xiàn)。
三種控制方式中以I2C最為常見(jiàn)。其中I2C又分為寄存器方式和I/O模擬方式兩種,I/O模擬方式的可移植性好,僅I/0模擬方式的I2C驅動(dòng)又可分為8位、9位、16位,以及是否帶子地址、是否可以連讀連寫(xiě)、是否要兼容SCCB總線(xiàn)。
2.4 音量控制節點(diǎn)
使用音量調節的地方較多。圖2是音量控制節點(diǎn)的一般模型。
①處的增益由播放器的音量控制功能決定,最大是0dB。也就是說(shuō),最多只能還原出原信號強度。
②和③處的增益由Coded IC自身控制,WM8731沒(méi)有產(chǎn)生增益功能,②處容易引入信號失真,一般置為O dB,codec加大音量時(shí)主要在③處提高增益。
④、⑤處由功放決定,最大也是O dB,便攜式功放通常是電流型,靠放大電流去推動(dòng)揚聲器。
①+②+③三處的增益和超過(guò)O dB時(shí),1 kHz的信號就會(huì )產(chǎn)生失真,但是大部分音樂(lè )的強度都小于1 kHz測試方波時(shí)的強度,所以這三項的和可以比O dB略大,但不能太大,否則會(huì )引起信號失真。
a.應用程序通過(guò)調用waveOutSetVolume,與手工在控制面板中調節音量等效。
b.調節M(mǎn)ediaPlay播放器音量時(shí),通過(guò)消息跟蹤可以判斷是否改變了①處的增益,即ARM的DSP數字輸出增益。
c.調節控制面板里的音量時(shí),會(huì )發(fā)現CODEC的功放寄存器值也會(huì )改變。猜想是通過(guò)IIS總線(xiàn)實(shí)現控制相關(guān)寄存器,因為在IoControl消息中沒(méi)有發(fā)現通過(guò)I2C改寫(xiě)任何寄存器。
通過(guò)分析調整音量的方法,有圖2所示的5個(gè)節點(diǎn)可控制,目的是音量最大失真最?。鹤將偬庉敵鲈鲆孀畲蟮那闆r下,②處PCM Volume置為0 dB(此處放大最容易引入失真),功放置最大時(shí)便能獲得不失真最大音量了;如果想再增大音量只能犧牲失真度了,人耳最多接收10%THD(Total Hamonic Distortion,總諧波失真),此種情況下主要靠調節③處的增益。
評論