(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
ThreadX是Express Logic公司專為嵌入式應(yīng)用而設(shè)計(jì)的一款高性能的實(shí)時(shí)操作系統(tǒng),支持大量的處理器和SoC,也因此廣泛應(yīng)用于消費(fèi)電子、汽車電子、工業(yè)自動化、軍事及航空航天等領(lǐng)域。其中隨著信息化、智能化的發(fā)展,數(shù)字音頻技術(shù)音頻系統(tǒng)是嵌入式系統(tǒng)應(yīng)用中的一個重要組成部分。
I2S總線是工業(yè)和嵌入式領(lǐng)域常采用的一種音頻總線,其驅(qū)動程序的實(shí)現(xiàn)主要依賴于音頻總線接口、相應(yīng)硬件的工作原理以及驅(qū)動的體系結(jié)構(gòu)?;诰唧w的項(xiàng)目需求背景下,本文主要闡述了音頻接口I2S驅(qū)動程序設(shè)計(jì)方法與流程,為I2S總線在ThreadX下的應(yīng)用提供了一定的研究方法和技術(shù)參考。
ThreadX是Express Logic公司專為嵌入式應(yīng)用而設(shè)計(jì)的一種高性能實(shí)時(shí)內(nèi)核,具有體積小、速度快、高可靠性和實(shí)時(shí)性等特點(diǎn),同時(shí)擁有高穩(wěn)定性和低成本。ThreadX占用空間小,適合先進(jìn)的終端系統(tǒng)級芯片的設(shè)計(jì),且憑借其多任務(wù)的特性,ThreadX可以滿足應(yīng)用系統(tǒng)實(shí)時(shí)性的要求,有助于提高整個系統(tǒng)的穩(wěn)定性和可靠性。
ThreadX包含了實(shí)時(shí)操作系統(tǒng)應(yīng)該具備的所有服務(wù)和組件,包括線程、消息隊(duì)列、計(jì)數(shù)信號量、互斥量、事件標(biāo)志、內(nèi)存塊池、內(nèi)存字節(jié)池、應(yīng)用定時(shí)器、時(shí)鐘計(jì)數(shù)器和中斷控制。其中,通過圖1介紹了ThreadX的幾個功能模塊:線程管理和調(diào)度、同步與通信、內(nèi)存管理、時(shí)鐘和定時(shí)器以及中斷處理。
圖1 ThreadX總體架構(gòu)圖
當(dāng)系統(tǒng)通電之后,首先是進(jìn)行系統(tǒng)復(fù)位以及開發(fā)工具初始化,當(dāng)初始化完成之后,控制轉(zhuǎn)移到用戶提供的main主函數(shù)上,在主函數(shù)中調(diào)用tx_kernel_enter進(jìn)入ThreadX系統(tǒng)內(nèi)核。入口函數(shù)tx_kernel_enter負(fù)責(zé)調(diào)用處理器指定的低級初始化和C語言的高級初始化,配合ThreadX內(nèi)部不同數(shù)據(jù)結(jié)構(gòu)的初始化。
圖2 ThreadX啟動流程
當(dāng)tx_kernel_enter返回時(shí),控制轉(zhuǎn)移到線程調(diào)度循環(huán),同時(shí)也標(biāo)志著初始化的完成。緊接著在入口函數(shù)中調(diào)用程序定義函數(shù)tx_application_define。tx_application_define函數(shù)定義了所有初始的應(yīng)用線程、隊(duì)列、消息、事件標(biāo)志、存儲池和定時(shí)器,同時(shí)可以在正常的應(yīng)用程序執(zhí)行過程中創(chuàng)建或者刪除系統(tǒng)資源,最后會進(jìn)入調(diào)度循環(huán)開始線程調(diào)度。ThreadX的啟動過程如圖2所示。
基于上文所述,ThreadX啟動并經(jīng)過初始化之后開始進(jìn)入tx_application_define(),并根據(jù)具體的應(yīng)用做一些特定的操作。對于音頻系統(tǒng),在程序定義函數(shù)tx_application_define()中首先為codec線程分配堆棧,并通過動態(tài)地調(diào)用tx_thread_create(&thread_codec,"thread_codec",thread_codec_entry,NULL,pointer,STACK_SIZE*2,6,6,TX_NO_TIME_SLICE, TX_AUTO_START)函數(shù)創(chuàng)建codec線程,然后再通過調(diào)用入口函數(shù)thread_codec_entry()進(jìn)入I2S音頻系統(tǒng)的操作。
在應(yīng)用I2S音頻系統(tǒng)初時(shí)需先將I2S總線復(fù)位到原始狀態(tài),再調(diào)用arm_i2s()配置I2S音頻系統(tǒng)。
void thread_codec_entry(ULONG thread_input) {
i2s_reset();
arm_i2s(main_mes);
}
I2S音頻系統(tǒng)的功能是通過I2S總線接口與音頻編解碼芯片進(jìn)行交互來實(shí)現(xiàn),其中I2S接口負(fù)責(zé)傳輸音頻數(shù)據(jù),音頻編解碼芯片在I2C總線的控制下完成功能配置后負(fù)責(zé)接收音頻數(shù)據(jù)并進(jìn)行編解碼,其具體功能調(diào)用實(shí)現(xiàn)圖如3所示。由于在實(shí)際項(xiàng)目中,ThreadX提供的驅(qū)動源代碼中已經(jīng)包含了I2C接口驅(qū)動模塊與CODEC驅(qū)動模塊,故本次驅(qū)動開發(fā)只需對I2S接口驅(qū)動模塊進(jìn)行配置,測試驗(yàn)證后方可移植到ThreadX系統(tǒng)中。
圖3 ThreadX下的I2S調(diào)用模塊
I2S(Inter-IC Sound)總線是一種總線標(biāo)準(zhǔn),即飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的。且I2S總線與音頻設(shè)備之間進(jìn)行數(shù)據(jù)傳輸,廣泛應(yīng)用于各種多媒體系統(tǒng)。
I2S有3個主要信號:串行時(shí)鐘SCLK(continuous serial clock)、幀時(shí)鐘 LRCK(word select )、串行數(shù)據(jù) SDATA(serial data)。在I2S音頻系統(tǒng)中,產(chǎn)生SCLK和LRCK信號的一方可稱為主設(shè)備,I2S總線控制器與音頻芯片均可作為發(fā)送端與接收端,且發(fā)送端和接收端需要同步時(shí)鐘信號來控制數(shù)據(jù)的傳輸,傳輸模式之一如圖4所示。如果有多個接收端和發(fā)送端,就需要一個控制端作為主導(dǎo)裝置來產(chǎn)生SCLK和LRCK的信號。
圖4 I2S數(shù)據(jù)傳輸模式
(1)幀時(shí)鐘LRCK
音頻數(shù)據(jù)由左右聲道組成,使用幀時(shí)鐘選擇可以區(qū)分左右聲道,即LRCK為低電平時(shí)表示正在傳輸?shù)氖亲舐暤赖臄?shù)據(jù),為高電平時(shí)表示正在傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。LRCK可以在串行時(shí)鐘的上升沿或者下降沿發(fā)生改變,且總是在最高位傳輸前的一個時(shí)鐘周期發(fā)生改變,這樣可以從設(shè)備得到與被傳輸?shù)拇袛?shù)據(jù)同步的時(shí)間。
(2)串行時(shí)鐘SCLK
串行時(shí)鐘,即表示每一個時(shí)鐘信號傳送一位音頻數(shù)據(jù),因此,I2S串行時(shí)鐘的頻率計(jì)算公式如下:
I2S SCLK的頻率=聲道數(shù)×采樣頻率(fs)×采樣位數(shù)
其中聲道數(shù)通道數(shù)為2,即左、右聲道。采樣頻率可為系統(tǒng)主時(shí)鐘,并且I2S LRCK的頻率值可等值于采樣頻率。采樣位數(shù)可根據(jù)寄存器配置數(shù)據(jù)寬度決定。
由于I2S總線只負(fù)責(zé)音頻數(shù)據(jù)的傳輸,而要真正實(shí)現(xiàn)音頻數(shù)據(jù)的錄入和播放,還需要同外接的音頻芯片同步采樣時(shí)鐘與采樣位數(shù)來處理音頻數(shù)據(jù)。在I2S總線中,I2S接口端和音頻芯片(CODEC)端分別可以作為主設(shè)備,其中只要當(dāng)某一端作為產(chǎn)生時(shí)鐘信號LRCK和SCLK的器件,則就能作為主設(shè)備。
(3)串行數(shù)據(jù)SDATA
串行數(shù)據(jù),其用二進(jìn)制補(bǔ)碼表示音頻數(shù)據(jù),在串行時(shí)鐘SCLK脈沖下,數(shù)據(jù)一位一位地傳輸在SDATA線上。當(dāng)音頻數(shù)據(jù)被音頻芯片模數(shù)轉(zhuǎn)化器處理成二進(jìn)制數(shù)據(jù)流后,將數(shù)據(jù)分成8位或16位傳輸,且每個字節(jié)的數(shù)據(jù)傳輸從左邊的二進(jìn)制位MSB(MostSignificantBit)開始。當(dāng)發(fā)送方和接收方的數(shù)據(jù)寬度不一樣時(shí),發(fā)送方不考慮接收方的數(shù)據(jù)寬度,如果發(fā)送方的數(shù)據(jù)寬度小于系統(tǒng)字段寬度,可以在低位補(bǔ)0;反之超過LSB(Least Significant Bit)的部分被截?cái)唷?/p>
基于實(shí)際項(xiàng)目,I2S接口模塊集成在芯片中,其目的是為了適應(yīng)移動音頻設(shè)備越來越高的要求,且內(nèi)置的I2S總線接口也可以方便和其他音頻編解碼芯片配合使用。而實(shí)際項(xiàng)目中采用的音頻編解碼芯片為TLV320AIC3106芯片。
TLV320AIC3106是TI公司生產(chǎn)的具有立體聲耳機(jī)放大器的低功耗立體聲音頻編解碼器,記錄路徑包含集成的麥克風(fēng)偏置、數(shù)字控制的立體聲麥克風(fēng)前置放大器和自動增益控制(AGC),內(nèi)部A/D轉(zhuǎn)換器和D/A轉(zhuǎn)換器可用于實(shí)現(xiàn)模擬音頻信號的采集和數(shù)字音頻信號的模擬輸出。
雖僅支持I2S硬件接口和I2S總線數(shù)據(jù)格式,但字節(jié)長度最高可達(dá)到32位,且其還包括高度可編程的PLL,用于靈活的時(shí)鐘生成,并支持來自各種可用MCLK(從512 kHz~50 MHz)的所有標(biāo)準(zhǔn)音頻速率,能有效降低使用功耗,可在多種需要進(jìn)行聲音錄入或輸出的嵌入式媒體設(shè)備中進(jìn)行實(shí)際應(yīng)用。
從實(shí)際項(xiàng)目出發(fā),處理器需要通過I2S總線才能完成和音頻芯片之間的數(shù)據(jù)傳輸。圖5為I2S音頻系統(tǒng)邏輯框圖。
一般而言,處理器與外部芯片進(jìn)行數(shù)據(jù)傳輸?shù)姆绞接袃煞N:傳統(tǒng)的中斷方式和直接存儲器存取DMA方式。音頻數(shù)據(jù)的傳輸可以通過設(shè)置寄存器先入先出FIFO隊(duì)列來完成。若處理器采用中斷的方式往FIFO隊(duì)列錄入數(shù)據(jù),其不僅很難保證音頻播放的連續(xù)性,而且還會因處理器頻繁的響應(yīng)中斷而導(dǎo)致系統(tǒng)執(zhí)行效率和性能的降低。為了避免錄入與播放的斷續(xù),且FIFO空間有限,需要將錄入的音頻數(shù)據(jù)存儲到其他內(nèi)存緩沖區(qū)內(nèi),錄入數(shù)據(jù)與播放數(shù)據(jù)可存放在不同的內(nèi)存緩沖中,但需要快速切換使用的緩存空間,所以根據(jù)實(shí)際項(xiàng)目的需求,在為音頻系統(tǒng)開發(fā)I2S總線接口驅(qū)動過程中,設(shè)計(jì)采用DMA方式進(jìn)行音頻數(shù)據(jù)傳輸。
音頻系統(tǒng)最終是為了實(shí)現(xiàn)錄音與播音的異時(shí)或同時(shí)處理效果。項(xiàng)目的系統(tǒng)DMA支持8個通道,為了實(shí)現(xiàn)音頻數(shù)據(jù)全雙工傳輸,開發(fā)過程中采用兩個DMA通道,通過設(shè)置使能I2S接口控制器中的寄存器I2S_TX_DMA_DISABLE和I2S_RX_DMA_DISABLE來使I2S接口與處理器之間音頻數(shù)據(jù)傳輸工作在DMA模式下。
此模式下使用I2S接口的FIFO寄存器組I2S_TX_DMA_FIFO_INPUT_DATA、I2S_TX_DMA_FIFO_STATUS、I2S_RX_DMA_OUTPUT_DATA和I2S_RX_FIFO_STATUS來存放音頻數(shù)據(jù),設(shè)置FIFO的狀態(tài)來觸發(fā)DMA控制器,將數(shù)據(jù)與內(nèi)存區(qū)域之間進(jìn)行傳輸,最終以實(shí)現(xiàn)錄音和播音。
圖5 I2S音頻系統(tǒng)邏輯框圖
如圖5所示,在音頻數(shù)據(jù)傳輸過程中使用了兩個DMA通道以實(shí)現(xiàn)全雙工工作方式。當(dāng)錄制聲音時(shí)則先由音頻芯片采集音頻數(shù)據(jù),然后由音頻數(shù)據(jù)傳輸專用總線將數(shù)據(jù)發(fā)送到I2S總線控制器的rx_fifo中,最后由內(nèi)部總線將采集到的音頻數(shù)據(jù)通過DMA使用其中1個DMA通道搬送,寫入到內(nèi)存緩沖區(qū)中。
當(dāng)播放聲音時(shí),首先將音頻數(shù)據(jù)通過另一個DMA通道經(jīng)由DMA控制器將音頻數(shù)據(jù)寫入I2S總線控制器的tx_fifo中,最后由音頻數(shù)據(jù)傳輸專用總線傳送到音頻芯片中進(jìn)行播放。
圖6 全雙工模式(TX+RX)
音頻系統(tǒng)中I2S接口需經(jīng)過正確的配置方可實(shí)現(xiàn)錄音和播音等功能。本文主要是根據(jù)實(shí)際項(xiàng)目的需求來設(shè)計(jì)一組固定的I2S音頻接口驅(qū)動程序,控制音頻數(shù)據(jù)在硬件中流動,以實(shí)現(xiàn)音頻數(shù)據(jù)的正確接收和發(fā)送。設(shè)計(jì)的音頻系統(tǒng)采樣規(guī)格是系統(tǒng)主時(shí)鐘為44.1 kHz,采樣位數(shù)為16位。
基于實(shí)際項(xiàng)目需求來實(shí)現(xiàn)音頻系統(tǒng)的全雙工模式,主要是對I2S總線的寄存器進(jìn)行設(shè)置。其工作流程如圖6所示。
而具體開發(fā)I2S音頻接口驅(qū)動程序完成的工作有:
(1)配置音頻錄入RX_ONLY模式與音頻播放TX_ONLY模式
音頻數(shù)據(jù)的錄入和播放都必須先配置好I2S_tx與I2S_rx的相關(guān)參數(shù),如音頻數(shù)據(jù)的采樣率與采樣位數(shù)等。若要實(shí)現(xiàn)音頻數(shù)據(jù)的播放,則調(diào)用開發(fā)函數(shù)I2S_tx_master()將I2S總線初始化為發(fā)送模式;若要實(shí)現(xiàn)音頻數(shù)據(jù)的錄入,則調(diào)用開發(fā)函數(shù)I2S_rx_master()將I2S總線初始化為發(fā)送模式。根據(jù)實(shí)際項(xiàng)目需求,將I2S接口的數(shù)據(jù)發(fā)送和接收模式分別通過寄存器I2S_TX_WORK_MODE和I2S_RX_SLAVE_EN設(shè)置為Master模式,并對發(fā)送和接收Master模式下的高低占空比、串行位時(shí)鐘占空比進(jìn)行配置,然后再依次分別對I2S接口與音頻芯片之間的數(shù)據(jù)接收與發(fā)送進(jìn)行配置,如采樣寬度、音頻芯片接口模式以及音量調(diào)節(jié)等參數(shù)。部分代碼如下:
voidI2S_tx_master(){
REG32(I2S_TX_WORK_MODE) = 0;//設(shè)置I2S傳輸方式:主設(shè)備
REG32(I2S_TX_SRC_INFO) = ((0x0<<5) |(0x10<<0));//傳輸數(shù)據(jù)格式與寬度:立體聲,16位
REG32(I2S_SRC_SR_CYCLE) = 0x177;//外部編解碼器采樣時(shí)鐘占空比: 32KFS
REG32(I2S_TX_BCLK_DUTY_CYCLE) = 0x5;
//傳輸串行位時(shí)鐘占空比:32KFS
REG32(I2S_TX_BAL) = ((1<<4) |(1<<0));
//平衡音量控制
REG32(I2S_TX_VLD_DW) = 0x10;
//傳輸?shù)骄幗獯a器的有效數(shù)據(jù)寬度:16位
REG32(I2S_TX_TYPE) = ((1<<5)|(0<<4) |(0<<0));//傳輸類型為I2S標(biāo)準(zhǔn)模式
REG32(I2S_TX_CLK_PHASE) = ((0<<4) |(0<<0));//傳輸LRCK相位設(shè)置和傳輸位串行相位設(shè)置
REG32(I2S_TX_ANTI_POP_LENTH) = 0x8;
REG32(I2S_TX_VOL) = 0x1;//主音量控制
觀察組患者的LVEDD為(56.34±4.78)mm,LVESD為(41.01±6.67)mm,LVEF為(52.43±5.32)%,血清BNP(309.77±104.44)pg/mL,6MWT為(389.32±70.32)m;對照組的LVEDD為(58.54±3.98)mm,LVESD為(46.32±4.01)mm,LVEF為(45.78±4.78)%,血清BNP(695.33±321.34)pg/mL,6MWT為(312.45±72.12)m,組間比較,差異有統(tǒng)計(jì)學(xué)意義(P<0.05)。
}
(2)全雙工模式配置模塊
通過調(diào)用開發(fā)函數(shù)I2S_loop_back_set()來設(shè)置I2S_LOOP_BACK_ENABLE的第0位為0,即以REG32(I2S_LOOP_BACK_ENABLE) &= ~0x1,將I2S總線初始化為全雙工模式。寄存器I2S_LOOP_BACK_ENABLE具體信息如下所示:
I2S_LOOP_BACK_ENABLEWidthBitDefaultDescription1[0]0TX-->RXLoopdebugcontrol:0:disable1:enable,internallyconnectTXSDTOtoRXSDTI
(3)DMA配置模塊
為實(shí)現(xiàn)音頻數(shù)據(jù)在CPU與外部芯片之間的存儲與播放,需進(jìn)行DMA通道DMA_CHn(0≤n≤7)配置,其中DMA_CH0作為將數(shù)據(jù)從內(nèi)存緩沖區(qū)傳送到I2S接口控制器的tx_fifo中的通道,調(diào)用i2s_dma_tx_configure()實(shí)現(xiàn);DMA_CH1作為將音頻設(shè)備傳送過來的音頻數(shù)據(jù)從I2S接口控制器的rx_fifo傳送到內(nèi)存緩沖去中的通道,調(diào)用i2s_dma_rx_configure()實(shí)現(xiàn)。DMA功能的實(shí)現(xiàn)主要是配置各通道的源地址(DMAC_CHn_BASE + DMAC_SAR)與目的地址(DMAC_CH0_BASE + DMAC_DAR),配置完DMA_CH0與DMA_CH1之后再通過配置寄存器DMAC_DMACFGREG和DMAC_CHENREG使能DMA傳輸功能。部分代碼如下:
//配置DMA_CH0
REG32(DMAMAC_BASE_ADDR+DMAC_CH0_BASE + DMAC_SAR) =0xc0000000;//設(shè)置源地址 REG32(DMAMAC_BASE_ADDR+DMAC_CH0_BASE+DMAC_DAR)=I2S_TX_DMA_FIFO_INPUT_DATA ;//設(shè)置目的地址
REG32(DMAMAC_BASE_ADDR + DMAC_CH0_BASE + DMAC_DSTATAR) = I2S_TX_DMA_FIFO_STATUS;
REG32(DMAMAC_BASE_ADDR + DMAC_CH0_BASE + DMAC_CTL) = 0x00109125;
REG32(DMAMAC_BASE_ADDR + DMAC_CH0_BASE + DMAC_CTL + 4) = 0x00000380;
……
//使能DMA_CH0
REG32(DMAMAC_BASE_ADDR + DMAC_DMACFGREG) =0x00000001;
REG32(DMAMAC_BASE_ADDR + DMAC_CHENREG) = 0x00000101; REG32(DMAMAC_BASE_ADDR + DMAC_MASKTFR) = 0x0101; REG32(DMAMAC_BASE_ADDR + DMAC_MASKBLOCK) = 0x0101;while(REG32(I2S_TX_DMA_FIFO_STATUS) & 0x4);
綜上所述,完成I2S全雙工模式相關(guān)配置后,則需要對驅(qū)動程序進(jìn)行測試。首先將I2S接口驅(qū)動程序置于Makefile工程環(huán)境中進(jìn)行編譯,編譯通過,然后再將其進(jìn)行ASIC仿真測試。全雙工模式下的音頻錄入測試結(jié)果與播放測試結(jié)果分析如下。
音頻錄入測試:圖7為音頻芯片采樣第一個數(shù)據(jù)的波形圖,根據(jù)ws_in對應(yīng)的波形圖,來讀取sdi對應(yīng)的波形圖可得采樣的第一個數(shù)據(jù),其左聲道數(shù)據(jù)為“b510”,其右聲道數(shù)據(jù)為“bd10”,再觀察圖8中rx_fifo_din對應(yīng)的紫色光標(biāo)處得知rx_fifo中存儲的第一個數(shù)據(jù)為“32’hbd10_b510”,此表明了音頻錄入數(shù)據(jù)無誤。
圖7 音頻芯片采樣數(shù)據(jù)波形圖
圖8 I2S總線rx_fifo數(shù)據(jù)圖
音頻播放測試:同理如上。圖9中tx_fifo_dout對應(yīng)的數(shù)據(jù)是通過DMA從內(nèi)存緩沖區(qū)搬到tx_fifo中的數(shù)據(jù),其值為“bd1f_b51f”。再觀察圖10中ws_out對應(yīng)的波形
圖來讀取sdo對應(yīng)的波形圖的數(shù)據(jù),其左聲道數(shù)據(jù)為“b51f”,其右聲道數(shù)據(jù)為“bd1f”,繼而表明了音頻播放數(shù)據(jù)無誤。
圖9 I2S總線tx_fifo數(shù)據(jù)圖
圖10 音頻芯片采樣數(shù)據(jù)波形圖
綜上測試結(jié)果分析可得,本文設(shè)計(jì)的I2S接口驅(qū)動程序能實(shí)現(xiàn)CPU與外部芯片之間音頻數(shù)據(jù)的正確錄入與播放,可移植到ThreadX系統(tǒng)中并與外接芯片完成音頻數(shù)據(jù)的格式轉(zhuǎn)換,最終實(shí)現(xiàn)錄音與播音功能。
[1] 潘應(yīng)進(jìn),朱子元. 基于ThreadX實(shí)時(shí)操作系統(tǒng)的USB設(shè)備驅(qū)動開發(fā)[J]. 工業(yè)控制計(jì)算機(jī),2016,29(2):30-32.
[2] 宋鑫夢,郭改枝,王秀麗. 基于嵌入式的I2S音頻系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 內(nèi)蒙古師范大學(xué)學(xué)報(bào):自然科學(xué)漢文版,2015,44(2):245-248.
[3] 霍燃,高麗萍,陳慶奎. 嵌入式Linux系統(tǒng)下基于UDA1341芯片的音頻驅(qū)動程序設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用與軟件,2012,29(4):16-19.
[4] 李文正. 基于I2S總線的嵌入式音頻系統(tǒng)的設(shè)計(jì)[J]. 軟件,2010,31(12):55-60.
[5] 趙鵬. 嵌入式Linux音頻驅(qū)動及簡單播放器的設(shè)計(jì)與實(shí)現(xiàn)[D].長春:吉林大學(xué),2009.
[6] 丁德紅,劉亞波. 嵌入式系統(tǒng)中的I2S音頻接口技術(shù)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2009(2):25-28.
[7] 房國志,馬傳龍. Linux中I2S總線聲卡驅(qū)動的研究[J]. 科技創(chuàng)新導(dǎo)報(bào),2009(2):5-7.
[8] 莊海軍. 基于S3C2410的I2S音頻總線研究及其驅(qū)動實(shí)現(xiàn)[J]. 淮陰工學(xué)院學(xué)報(bào),2008,17(5):72-76.
劉伍洋(研究生),主要研究內(nèi)容為嵌入式底層軟件開發(fā)。