摘 要: 一種為嵌入式系統(tǒng)擴(kuò)展音頻功能的方法,采用帶IIS總線(xiàn)和L3控制接口的專(zhuān)用芯片UDA1341TS,用FPGA設(shè)計(jì)實(shí)現(xiàn)所需要的接口和時(shí)序,在基于S3C4510B的嵌入式" title="的嵌入式">的嵌入式系統(tǒng)下通過(guò)FPGA操作UDA1341TS,實(shí)驗(yàn)結(jié)果表明這種方法是正確的。
關(guān)鍵詞: FPGA UDA1341TS IIS總線(xiàn)
在嵌入式系統(tǒng)中經(jīng)常采用IIS(Inter-IC Sound)總線(xiàn)連接專(zhuān)用音頻器件以實(shí)現(xiàn)音頻輸入輸出。不少嵌入式處理器帶有專(zhuān)用的IIS總線(xiàn),通過(guò)操作特殊功能寄存器實(shí)現(xiàn)對(duì)外接音頻器件的操作,但也有一些嵌入式處理器沒(méi)有擴(kuò)展IIS總線(xiàn),如ARM7芯片S3C4510B。近年來(lái),F(xiàn)PGA技術(shù)發(fā)展迅速,現(xiàn)已成為可編程片上系統(tǒng)(SoPC)的硬件載體。采用FPGA實(shí)現(xiàn)IIS總線(xiàn)及與總線(xiàn)相關(guān)的接口控制,一方面可以用硬件的方法實(shí)現(xiàn)IIS總線(xiàn)操作,使嵌入式系統(tǒng)很容易擴(kuò)展音頻功能;另一方面由于FPGA可以實(shí)現(xiàn)大量的組合邏輯和時(shí)序邏輯,還可以用來(lái)實(shí)現(xiàn)DSP算法,增加了系統(tǒng)的靈活性。
1 基本原理
1.1 系統(tǒng)方案
嵌入式處理器采用Samsung公司的ARM7芯片S3C4510B;音頻芯片使用Philips 公司開(kāi)發(fā)的UDA1341TS,這是一款適用于MiniDisc(MD)、PDA等便攜式設(shè)備的高性能低功耗的經(jīng)濟(jì)型音頻編碼解碼器;FPGA芯片則使用 Xilinx公司的Spartan-II 系列芯片XC2S100。系統(tǒng)示意圖如圖1。
圖1中FPGA負(fù)責(zé)連接S3C4510B和UDA1341TS,為此需要按照訪(fǎng)問(wèn)UDA1341TS的時(shí)序要求實(shí)現(xiàn)IIS總線(xiàn)和L3接口,同時(shí)要按照S3C4510B總線(xiàn)時(shí)序要求,實(shí)現(xiàn)按存儲(chǔ)器方式操作的特殊功能寄存器,并將對(duì)UDA1341TS的操作轉(zhuǎn)換成對(duì)特殊功能寄存器的操作。這樣S3C4510B便可以直接訪(fǎng)問(wèn)FPGA實(shí)現(xiàn)的特殊功能寄存器,從而實(shí)現(xiàn)對(duì)UDA1341TS的控制。
1.2 IIS和UDA1341TS簡(jiǎn)介
IIS又稱(chēng)I2S, 是Philips公司提出的串行數(shù)字音頻總線(xiàn)協(xié)議,專(zhuān)用于芯片間進(jìn)行高速高效的音頻數(shù)據(jù)傳輸。IIS總線(xiàn)只處理聲音數(shù)據(jù),其他信號(hào)必須單獨(dú)傳輸,如控制信號(hào)。IIS總線(xiàn)包括3 個(gè)信號(hào)線(xiàn),即1個(gè)雙向數(shù)據(jù)傳輸線(xiàn)SD(Serial Data)、一個(gè)聲道選擇線(xiàn)WS(Word Select)和1個(gè)時(shí)鐘線(xiàn)SCK(Serial Clock)。在數(shù)據(jù)傳輸過(guò)程中,發(fā)送端和接收端具有相同的時(shí)鐘信號(hào)" title="時(shí)鐘信號(hào)">時(shí)鐘信號(hào),發(fā)送端作為主裝置(Master)時(shí),產(chǎn)生位時(shí)鐘信號(hào)和聲道選擇信號(hào),接收端被動(dòng)響應(yīng)。為了實(shí)現(xiàn)全雙工傳輸模式" title="傳輸模式">傳輸模式,一些IIS實(shí)現(xiàn)時(shí)使用了Dout和Din兩個(gè)數(shù)據(jù)線(xiàn)。
UDA1341TS片內(nèi)集成了立體聲ADC、DAC以及模擬輸入通道,其中模擬輸入通道包括可編程增益放大器(PGA)、數(shù)字自動(dòng)增益控制(AGC)、 數(shù)字聲音處理(DSP)等。UDA1341TS的重放過(guò)程也具有可編程的DSP功能,如去加重、音量控制、低音增強(qiáng)、高音增強(qiáng)以及軟件配置靜音等。
根據(jù)串行音頻數(shù)據(jù)輸入輸出格式和每聲道字長(zhǎng)的不同,UDA1341TS支持4種操作模式" title="操作模式">操作模式,分別是:(1)字長(zhǎng)不超過(guò)20位的IIS總線(xiàn)模式;(2)字長(zhǎng)不超過(guò)20位的最高位對(duì)齊(MSB-justified)模式;(3)字長(zhǎng)為16、18或20位的最低位對(duì)齊(LSB-justified)模式;(4)輸出采用最高位對(duì)齊,輸入采用字長(zhǎng)為16、18或20位的最低位對(duì)齊模式。其中IIS總線(xiàn)模式和最高位對(duì)齊模式操作時(shí)序如圖2所示。二者具有相同的信號(hào)線(xiàn),但左右聲道控制電平和位延遲不同,對(duì)于IIS總線(xiàn),聲道控制電平改變后,最高位推遲一個(gè)時(shí)鐘周期才發(fā)送。
對(duì)UDA1341TS的所有功能控制和狀態(tài)獲取均通過(guò)3線(xiàn)串行接口L3實(shí)現(xiàn)。該接口包含3個(gè)信號(hào)線(xiàn),分別是串行數(shù)據(jù)線(xiàn)L3DATA、接口模式選擇線(xiàn)L3MODE和串行時(shí)鐘線(xiàn)L3CLOCK。L3接口操作有兩種模式,即地址模式和數(shù)據(jù)傳輸模式。地址模式用于選中后續(xù)操作所要訪(fǎng)問(wèn)的芯片及其內(nèi)部寄存器,被地址模式選中的芯片和寄存器一直保持有效,直到UDA1341TS收到一個(gè)新的地址模式命令字節(jié)。數(shù)據(jù)傳輸模式用于將音頻處理和系統(tǒng)控制參數(shù)寫(xiě)入U(xiǎn)DA1341TS并可以讀取回放的音頻數(shù)據(jù)的峰值電平。L3MODE為低電平時(shí)操作為地址模式,高電平時(shí)操作為數(shù)據(jù)傳輸模式。
地址模式下由主器件按標(biāo)準(zhǔn)時(shí)序送出8位地址,其中高6位表示UDA1341TS芯片地址000101,最低2位選擇要訪(fǎng)問(wèn)的該芯片內(nèi)部寄存器,分別是DATA0、DATA1和STATUS,由此產(chǎn)生下面的3種寄存器操作模式。
(1)STATUS操作模式可以控制芯片復(fù)位、系統(tǒng)時(shí)鐘頻率、數(shù)據(jù)輸入格式、DC濾波器、輸入增益、輸出增益、ADC和DAC極性控制、倍速播放和功率控制等。
(2)DATA0操作模式又分為兩種:直接地址模式和擴(kuò)展地址模式。數(shù)據(jù)最高2位非‘11’時(shí)為直接地址模式,在這種模式下,可以直接控制音量、低音增強(qiáng)、高音增強(qiáng)、峰值檢測(cè)位置、去加重、靜音等功能;數(shù)據(jù)最高2位為‘11’時(shí)為擴(kuò)展地址模式,可以通過(guò)3位選擇6個(gè)5位的擴(kuò)展寄存器,分別控制通道混合增益、MIC靈敏度、自動(dòng)增益控制、輸入放大器增益器等。
(3)DATA1操作模式用于讀取音頻數(shù)據(jù)重放時(shí)的峰值電平。
2 FPGA設(shè)計(jì)及功能仿真
如圖1所示,F(xiàn)PGA負(fù)責(zé)連接S3C4510B和UDA1341TS,需要實(shí)現(xiàn)S3C4510B總線(xiàn)接口、IIS總線(xiàn)和L3接口等。采用模塊化設(shè)計(jì)思想,劃分幾個(gè)功能相對(duì)獨(dú)立的模塊,并將各個(gè)功能模塊封裝成元件(Component),分別設(shè)計(jì)、仿真、測(cè)試、驗(yàn)證各元件,最后在頂層調(diào)用各元件,并將元件信號(hào)與實(shí)際輸入輸出信號(hào)關(guān)聯(lián),實(shí)現(xiàn)整體功能。實(shí)際實(shí)現(xiàn)了4個(gè)元件,如圖2所示。
圖2中,元件ARM_Interface負(fù)責(zé)實(shí)現(xiàn)與S3C4510B接口,主要是實(shí)現(xiàn)幾個(gè)可以映射成存儲(chǔ)器的地址單元,并提供這些單元與其他元件的接口。其中左右聲道單元為16位,在內(nèi)部分別與2個(gè)FIFO相連接,以便音頻數(shù)據(jù)以選定的速率回放;IIS_out元件負(fù)責(zé)產(chǎn)生IIS總線(xiàn)或MSB對(duì)齊模式時(shí)序;L3_3B_Mod元件實(shí)現(xiàn)UDA1341TS數(shù)據(jù)傳輸模式中的DATA0擴(kuò)展地址模式,共需傳輸3個(gè)字節(jié);L3_2B_Mod元件則負(fù)責(zé)UDA1341TS其余的操作模式,只需傳輸2字節(jié),即1字節(jié)地址和1字節(jié)數(shù)據(jù)。采用這種元件模塊設(shè)計(jì)的方法主要考慮到FPGA容易實(shí)現(xiàn)并行操作,但對(duì)復(fù)雜條件操作和邏輯判斷則不如處理器編程實(shí)現(xiàn)方便。因此并行實(shí)現(xiàn)多個(gè)元件,再由簡(jiǎn)單邏輯和條件及輸入?yún)?shù)控制選定的元件工作,以實(shí)現(xiàn)需要的功能,這是FPGA設(shè)計(jì)的主要思想。
2.1 嵌入式處理器接口實(shí)現(xiàn)
此模塊主要負(fù)責(zé)處理與嵌入式系統(tǒng)的數(shù)據(jù)傳輸接口。主要輸入信號(hào)包括全局時(shí)鐘GCLK、片選信號(hào)nCS、寫(xiě)信號(hào)nWBE0、讀信號(hào)nOE以及地址信號(hào)ADDR[4..0],其中地址信號(hào)確定相對(duì)于片選地址的偏移地址,5位地址信號(hào)最多可尋址32個(gè)16位地址單元。所有總線(xiàn)數(shù)據(jù)操作與全局時(shí)鐘同步。根據(jù)需要,實(shí)際設(shè)計(jì)實(shí)現(xiàn)了7個(gè)寄存器,分別是DATA0直接地址寄存器、DATA0擴(kuò)展地址寄存器、DATA1寄存器、STATUS寄存器、左聲道音頻數(shù)據(jù)緩存" title="數(shù)據(jù)緩存">數(shù)據(jù)緩存器、右聲道音頻數(shù)據(jù)緩存器、FPGA控制寄存器,它們的偏移地址分別是0x00100、0x00110、0x01000、0x10100、0x00000、0x00010、0x01100。上述寄存器中,只有左右聲道音頻數(shù)據(jù)緩存器為16位,其余均為8位,因此只能實(shí)現(xiàn)不超過(guò)16位的IIS總線(xiàn)和MSB對(duì)齊模式。
測(cè)試本元件時(shí),首先應(yīng)測(cè)試單元的讀寫(xiě)特性,通過(guò)ARM仿真器直接對(duì)編程單元進(jìn)行讀寫(xiě)即可驗(yàn)證擴(kuò)展的正確性。對(duì)于內(nèi)建16x8的FIFO的左右聲道數(shù)據(jù)緩存器,可以通過(guò)讀寫(xiě)多次測(cè)試其滿(mǎn)空狀態(tài),并通過(guò)1個(gè)接在FPGA的I/O口線(xiàn)上的LED直接觀察。測(cè)試無(wú)誤后,該元件便可使用。
2.2 IIS總線(xiàn)實(shí)現(xiàn)
IIS總線(xiàn)通過(guò)IIS_out元件來(lái)實(shí)現(xiàn),其接口信號(hào)如圖3所示。輸入信號(hào)是ARM_Interface提供的左右聲道音頻數(shù)據(jù),輸出信號(hào)是IIS總線(xiàn)要求的3個(gè)串行信號(hào),即bclk、sync和dout,分別與SCK、WS和SD對(duì)應(yīng),這3個(gè)信號(hào)通過(guò)FPGA的I/O口線(xiàn)與UDA1341的BCK、WS以及DATAI與DATAO信號(hào)線(xiàn)相連。IIS 格式的信號(hào)無(wú)論有多少位有效數(shù)據(jù),數(shù)據(jù)的最高位(MSB)總是被最先傳輸,在WS 變化后的第2 個(gè)SCK脈沖處,因此最高位擁有固定的位置,而最低位的位置則依賴(lài)于數(shù)據(jù)的有效位數(shù)。實(shí)際設(shè)計(jì)的數(shù)據(jù)有效位是16位,低于16位數(shù)據(jù)時(shí)高位填充‘0’,處理器將數(shù)據(jù)以16位方式寫(xiě)入左右聲道音頻數(shù)據(jù)緩存器時(shí),自動(dòng)進(jìn)行高位填充。
實(shí)現(xiàn)IIS總線(xiàn)時(shí)序時(shí),關(guān)鍵是要正確處理各種時(shí)鐘信號(hào)之間以及生成的IIS總線(xiàn)3個(gè)信號(hào)之間的時(shí)序關(guān)系。要依據(jù)音頻信號(hào)的采樣速率選擇FPGA系統(tǒng)時(shí)鐘和UDA1341時(shí)鐘選項(xiàng),同時(shí)要合理使用計(jì)數(shù)器并正確讀取左右聲道音頻數(shù)據(jù)緩存器,最終實(shí)現(xiàn)音頻數(shù)據(jù)通過(guò)IIS總線(xiàn)的正確傳輸。
設(shè)計(jì)實(shí)現(xiàn)的IIS時(shí)序仿真圖如圖4所示。
圖4顯示的是IIS_out元件將左右聲道音頻數(shù)據(jù)緩存器內(nèi)2個(gè)16位數(shù)據(jù)由IIS總線(xiàn)輸出的時(shí)序仿真結(jié)果。bclk信號(hào)的上升沿?cái)?shù)據(jù)dout穩(wěn)定有效,在bclk為低電平時(shí)dout才變化。當(dāng)左右聲道控制信號(hào)sync為低電平時(shí),傳輸左聲道數(shù)據(jù)‘0111011101110111’;當(dāng)sync為高電平時(shí),傳輸右聲道數(shù)據(jù)‘1010101010101010’。從仿真波形可知,每聲道數(shù)據(jù)反映在dout波形上是從sync電平變化后的第2個(gè)bclk周期開(kāi)始的。
圖2所示的最高位對(duì)齊模式與IIS使用相同的信號(hào),很容易在IIS總線(xiàn)的基礎(chǔ)上修改實(shí)現(xiàn)。實(shí)際實(shí)現(xiàn)的最高位對(duì)齊模式仿真時(shí)序正確,在此不再詳述。
2.3 L3接口實(shí)現(xiàn)
由于IIS總線(xiàn)只處理聲音數(shù)據(jù),其他信號(hào)必須單獨(dú)傳輸,所以為了控制UDA1341TS而設(shè)計(jì)了L3接口。在FPGA實(shí)現(xiàn)L3接口時(shí),根據(jù)UDA1341TS操作模式的不同,設(shè)計(jì)了兩個(gè)元件。圖3中元件L3_2B_Mod用于只需傳輸1字節(jié)地址和1字節(jié)數(shù)據(jù)的情況,而L3_3B_Mod則用來(lái)傳輸1字節(jié)地址和兩字節(jié)數(shù)據(jù)。
為了便于控制,在元件ARM_Interface中專(zhuān)門(mén)設(shè)置了一個(gè)控制寄存器來(lái)控制L3接口的工作模式,該寄存器偏移地址為0x01100,其高4位有定義。最高位為接口允許位TRANS_EN,為‘1’時(shí)L3接口啟動(dòng)工作,為‘0’時(shí)停止;次高位為L(zhǎng)3接口工作模式選擇位TRANSMODE,為‘0’時(shí)選擇L3_2B_Mod,為‘1’時(shí)選擇L3_3B_Mod;接下來(lái)的二位用于選擇寄存器。
實(shí)際設(shè)計(jì)實(shí)現(xiàn)的元件L3_3B_Mod時(shí)序仿真圖見(jiàn)圖5。
圖5顯示的是L3接口DATA0擴(kuò)展地址模式時(shí)序圖,共傳輸了3字節(jié)數(shù)據(jù),即1個(gè)地址字節(jié)、2個(gè)數(shù)據(jù)字節(jié)。地址字節(jié)的高6位為UDA1341TS地址,低2位選擇DATA0操作模式,緊接著的數(shù)據(jù)字節(jié)最高兩位為‘11’選擇擴(kuò)展地址模式,這意味著該字節(jié)后面還要傳輸1字節(jié)數(shù)據(jù)。圖5中的3字節(jié)分別為0x14、0xC4和0xF0,該命令將打開(kāi)輸入通道的自動(dòng)增益控制。L3接口要求串行數(shù)據(jù)的低位在前傳輸,這一點(diǎn)與IIS有所不同。
實(shí)現(xiàn)L3_3B_Mod元件時(shí)引入了一個(gè)參考時(shí)鐘REF_CLK,由一個(gè)5位計(jì)數(shù)器對(duì)該時(shí)鐘信號(hào)計(jì)數(shù),根據(jù)L3接口在3字節(jié)操作時(shí)的時(shí)鐘信號(hào)圖案,控制由REF_CLK生成L3CLOCK,得到L3CLOCK之后,L3接口的操作均以此時(shí)鐘信號(hào)來(lái)同步。
元件L3_2B_Mod設(shè)計(jì)及仿真結(jié)果與L3_2B_Mod類(lèi)似。
3 測(cè)試方法及結(jié)果
在以S3C4510B為核心的嵌入式系統(tǒng)中,根據(jù)存儲(chǔ)器配置情況,選擇一段未用的存儲(chǔ)空間,將FPGA實(shí)現(xiàn)的寄存器映射成S3C4510B在該段存儲(chǔ)空間中的存儲(chǔ)單元,這樣就可以用C語(yǔ)言編程來(lái)訪(fǎng)問(wèn)這些存儲(chǔ)單元,從而實(shí)現(xiàn)對(duì)UDA1341TS的控制。實(shí)際選擇了S3C4510B的可重定位片選信號(hào)nRCS1作為FPGA實(shí)現(xiàn)的寄存器基地址選擇信號(hào),并將該片選地址定位為0x12000000,這樣各寄存器的實(shí)際地址如表1。
根據(jù)UDA1341TS命令列表,在Hitool For ARM support μClinux軟件開(kāi)發(fā)環(huán)境下,編寫(xiě)C語(yǔ)言程序,測(cè)試STATUS操作和DATA0操作功能及結(jié)果。程序運(yùn)行之前需要用JTAG下載電纜將ISE開(kāi)發(fā)環(huán)境下生成的bit文件下載 到FPGA芯片中,以實(shí)現(xiàn)要求的功能。
經(jīng)實(shí)際測(cè)試,通過(guò)FPGA實(shí)現(xiàn)的IIS總線(xiàn)和L3接口,S3C4510B可以控制UDA1341TS芯片完成各種操作,實(shí)現(xiàn)STATUS操作模式和DATA0模式的各種控制功能,并可用DATA1操作模式獲取音頻數(shù)據(jù)重放時(shí)的峰值電平。
編寫(xiě)測(cè)試程序,輸出1kHz正弦信號(hào),并控制聲道、音量、靜音等變化,示波器觀察和耳機(jī)聽(tīng)到的結(jié)果正確。
編寫(xiě)測(cè)試程序,讀入麥克風(fēng)音頻信號(hào),分時(shí)由左右聲道輸出,測(cè)試結(jié)果正確。
本設(shè)計(jì)采用音頻接口專(zhuān)用芯片UDA1341TS,并通過(guò)FPGA實(shí)現(xiàn)了IIS總線(xiàn)和L3接口,使得基于S3C4510B的嵌入式系統(tǒng)可以方便地?cái)U(kuò)展音頻功能,實(shí)驗(yàn)結(jié)果正確。
在本文工作的基礎(chǔ)上,可以進(jìn)一步發(fā)揮FPGA的靈活性。如可以利用FPGA實(shí)現(xiàn)DSP功能,從而提供音頻DSP處理或編碼解碼;也可以與SoPC相結(jié)合,作為音頻接口模塊,為片上系統(tǒng)提供音頻接口。
參考文獻(xiàn)
[1] Philips Semiconductors.I2S bus specification[EB/OL].http://www.semiconductors.philips.com/acrobat_download/various/I2SBUS.pdf,1996.
[2] Philips Semiconductors.UDA1341TS Data Sheet[Z].2001.
[3] 徐睿,李斐,王申康.基于IIS總線(xiàn)的嵌入式音頻系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2004,(4):7-9.
[4] 李駒光,聶雪媛.ARM應(yīng)用系統(tǒng)開(kāi)發(fā)詳解——基于S3C4510B的系統(tǒng)設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.