




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)號(hào) 成績(jī) 嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)課程論文 題目 基于ARM的音頻接口設(shè)計(jì) 作 者 HZW 班 級(jí) 電信1BF 院 別 信息與通信工程 專 業(yè) 電子信息工程 完成時(shí)間 2011年12月15日 目 錄1. 概述1.1嵌入式系統(tǒng)的技術(shù)背景.11.2潛入式系統(tǒng)的應(yīng)用.12. 系統(tǒng)的硬件設(shè)計(jì)2.1系統(tǒng)設(shè)計(jì)方案.22.2S3C2410的IIS模塊.32.3音頻芯片UD1314.53. 系統(tǒng)的軟件設(shè)計(jì)3.1軟件的整體設(shè)計(jì).63.2WAV文件格式.103.3初始化UDA1314模塊.123.4錄音模塊.153.5放音模塊.171 概述1.1 嵌入式系統(tǒng)的技術(shù)背景 嵌入式系統(tǒng)即指以應(yīng)用為核心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、
2、軟硬件可裁減, 適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積和功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。目前嵌入式系統(tǒng)己經(jīng)廣泛應(yīng)用于工業(yè)控制、Internet網(wǎng)絡(luò)、移動(dòng)通訊設(shè)備、成像和安全產(chǎn)品等各種領(lǐng)域。ARM微處理器在各方面的優(yōu)異表現(xiàn)使得自己己成為微處理器的主流芯片。ARM920T是目前使用最廣泛的位嵌入式川處理器, 屬于低端處理器核。1.2系統(tǒng)的應(yīng)用 1 信息家電:這將稱為嵌入式系統(tǒng)最大的應(yīng)用領(lǐng)域,冰箱、空調(diào)等的網(wǎng)絡(luò)化、智能化將引領(lǐng)人們的生活步入一個(gè)嶄新的空間。即使你不在家里,也可以通過電話線、網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程控制。在這些設(shè)備中,嵌入式系統(tǒng)將大有用武之地。 2 交通管理:在車輛導(dǎo)航、流量控制、信息監(jiān)測(cè)與汽車服務(wù)
3、方面,嵌入式系統(tǒng)技術(shù)已經(jīng)獲得了廣泛的應(yīng)用,內(nèi)嵌GPS模塊,GSM模塊的移動(dòng)定位終端已經(jīng)在各種運(yùn)輸行業(yè)獲得了成功的使用。目前GPS設(shè)備已經(jīng)從尖端產(chǎn)品進(jìn)入了普通百姓的家庭,只需要幾千元,就可以隨時(shí)隨地找到你的位置。 3 工業(yè)控制:基于嵌入式芯片的工業(yè)自動(dòng)化設(shè)備將獲得長(zhǎng)足的發(fā)展,目前已經(jīng)有大量的8、16、32 位嵌入式微控制器在應(yīng)用中,網(wǎng)絡(luò)化是提高生產(chǎn)效率和產(chǎn)品質(zhì)量、減少人力資源主要途徑,如工業(yè)過程控制、數(shù)字機(jī)床、電力系統(tǒng)、電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測(cè)、石油化工系統(tǒng)。就傳統(tǒng)的工業(yè)控制產(chǎn)品而言,低端型采用的往往是8位單片機(jī)。但是隨著技術(shù)的發(fā)展,32位、64位的處理器逐漸成為工業(yè)控制設(shè)備的核心,在未來幾年內(nèi)必
4、將獲得長(zhǎng)足的發(fā)展。 4 家庭智能管理系統(tǒng):水、電、煤氣表的遠(yuǎn)程自動(dòng)抄表,安全防火、防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實(shí)現(xiàn)更高,更準(zhǔn)確和更安全的性能。目前在服務(wù)領(lǐng)域,如遠(yuǎn)程點(diǎn)菜器等已經(jīng)體現(xiàn)了嵌入式系統(tǒng)的優(yōu)勢(shì)。 5 POS網(wǎng)絡(luò)及電子商務(wù):公共交通無接觸智能卡(Contactless Smartcard, CSC)發(fā)行系統(tǒng),公共電話卡發(fā)行系統(tǒng),自動(dòng)售貨機(jī),各種智能ATM終端將全面走入人們的生活,到時(shí)手持一卡就可以行遍天下。 6 環(huán)境工程與自然:水文資料實(shí)時(shí)監(jiān)測(cè),防洪體系及水土質(zhì)量監(jiān)測(cè)、堤壩安全,地震監(jiān)測(cè)網(wǎng),實(shí)時(shí)氣象信息網(wǎng),水源和空氣污染監(jiān)測(cè)。在很多環(huán)境惡劣,地況復(fù)雜的地區(qū),嵌入
5、式系統(tǒng)將實(shí)現(xiàn)無人監(jiān)測(cè)。 7 機(jī)器人:嵌入式芯片的發(fā)展將使機(jī)器人在微型化,高智能方面優(yōu)勢(shì)更加明顯,同時(shí)會(huì)大幅度降低機(jī)器人的價(jià)格,使其在工業(yè)領(lǐng)域和服務(wù)領(lǐng)域獲得更廣泛的應(yīng)用。 這些應(yīng)用中,可以著重于在控制方面的應(yīng)用。就遠(yuǎn)程家電控制而言,除了開發(fā)出支持TCP/IP的嵌入式系統(tǒng)之外,家電產(chǎn)品控制協(xié)議也需要制訂和統(tǒng)一,這需要家電生產(chǎn)廠家來做。同樣的道理,所有基于網(wǎng)絡(luò)的遠(yuǎn)程控制器件都需要與嵌入式系統(tǒng)之間實(shí)現(xiàn)接口,然后再由嵌入式系統(tǒng)來控制并通過網(wǎng)絡(luò)實(shí)現(xiàn)控制。所以,開發(fā)和探討嵌入式系統(tǒng)有著十分重要的意義。2 系統(tǒng)的硬件設(shè)計(jì)2.1系統(tǒng)設(shè)計(jì)方案 由于IIS總線只處理音頻數(shù)據(jù),而其他的信號(hào)如編碼、控制等信號(hào)單獨(dú)傳送。
6、為了使必需的引腳數(shù)最小并且保持連線簡(jiǎn)單,IIS總線由3條信號(hào)線組成:時(shí)分復(fù)用的數(shù)據(jù)通道線、字段選擇線和時(shí)鐘信號(hào)線。本系統(tǒng)由系統(tǒng)主控制器提供時(shí)鐘信號(hào),控制數(shù)字音頻數(shù)據(jù)在各個(gè)IC之間的流向。此時(shí),發(fā)送器在外部時(shí)鐘信號(hào)的控制下產(chǎn)生數(shù)據(jù),處于從模式。本設(shè)計(jì)硬件連接圖比較簡(jiǎn)單,如圖1所示。圖中的處理器采用了AT91RM9200處理器,其內(nèi)置IIS音頻總線,內(nèi)置的IIS接口能讀取IIS總線上的數(shù)據(jù),并由UDA1341TS芯片外擴(kuò),通過總線和系統(tǒng)連接,需要處理器提供系統(tǒng)時(shí)鐘和3根控制線。微處理器 AT91RM9200揚(yáng)聲器語音處理芯片UDA1341TS麥克風(fēng)圖1 硬件設(shè)計(jì)簡(jiǎn)圖AT91RM9200的IIS控制
7、器由5個(gè)引腳與外部的音頻編解碼器相連。這些引腳分別是:系統(tǒng)時(shí)鐘;位速率時(shí)鐘(可使用內(nèi)部或外部時(shí)鐘源);字段選擇;串行聲音輸入;串行聲音輸出。本設(shè)計(jì)中,UDA1341TS使用的是L3接口 ,該接口用來控制音頻信號(hào)的音量大小以及低音等。L3接口有3個(gè)信號(hào):L3MODE,L3CLK,L3DATA,將字節(jié)寫入 L3總線寄存器。IIS總線控制器通過軟件控制AT91RM9200的通用I/O引腳(筆者選用的是PA0、PA1、PA2三個(gè)通用I/O口)來支持L3接口。下圖是本嵌入式音頻系統(tǒng)的硬件電路連接圖,見圖2。音頻輸入SYSCLK BINL2BCK VINR2WSDATAOVOUTRDATAI VOUTLL
8、3MODEL3CLOCKL3DATATCLK3TD0TK0RD0PA0PA1PA2音頻輸出圖2.硬件電路連接圖2.2 S3C2410的IIS模塊n S3C2410的IIS總線簡(jiǎn)介IIS總線是近年出現(xiàn)的一種面向多媒體計(jì)算機(jī)的音頻總線,該總線專責(zé)于音頻設(shè)備之間的數(shù)據(jù)傳輸,為數(shù)字立體聲提供一個(gè)序列連接至標(biāo)準(zhǔn)編碼解碼器。S3C2410的IIS總線接口可以用實(shí)現(xiàn)對(duì)外部8/16位立體聲音頻數(shù)字信號(hào)編碼解碼電路的接口功能。它支持IIS總線數(shù)據(jù)格式和MSB-justified數(shù)據(jù)格式。IIS總線接口為FIFO操作提供DMA傳輸模式,代替中斷模式,它可以同時(shí)傳送或接收數(shù)據(jù)。IIS模塊特性: 兼容IIS,MSB-
9、justified格式數(shù)據(jù) 每通道8/16位數(shù)據(jù) 每通道16,32,48fs(采樣頻率)串行時(shí)鐘 可編程的分頻器提供給主設(shè)備時(shí)鐘和編解碼時(shí)鐘 供給發(fā)送和接收用的32字節(jié)(2X16)的FIFO正常(Normal)傳輸模式和DMA傳輸模式下面為IIS模塊框圖:n 傳輸模式傳輸模式分為正常(Normal)傳輸模式和DMA傳輸模式1).正常模式IIS控制寄存器中有一個(gè)FIFO準(zhǔn)備好標(biāo)志位(ready flag bits)用于FIFO發(fā)送和接收。當(dāng)FIFO準(zhǔn)備好發(fā)送數(shù)據(jù),如果發(fā)送FIFO中不為空,F(xiàn)IFO準(zhǔn)備好標(biāo)志將被設(shè)置為1。如果發(fā)送FIFO為空,F(xiàn)IFO準(zhǔn)備好標(biāo)志被置0,當(dāng)接收FIFO滿,接收FIF
10、O準(zhǔn)備好標(biāo)志被設(shè)置為0,這些標(biāo)志可以決定CPU讀寫FIFO的時(shí)間。串行數(shù)據(jù)就通過這種方式被發(fā)送或接收的。2).DMA傳說模式在這個(gè)模式中,IIS的發(fā)送和接收FIFO操作都由DMA控制器完成,在發(fā)送和接收模式中有FIFO準(zhǔn)備好標(biāo)志來自動(dòng)產(chǎn)生DMA服務(wù)請(qǐng)求。n 音頻串行接口格式1).IIS總線格式IIS總線具有4根信號(hào)線,包括串行數(shù)據(jù)輸入(IISDI),串行數(shù)據(jù)輸出(IISDO),左/右聲道選擇(IISLRCK)和串行數(shù)據(jù)時(shí)鐘(IISCLK);產(chǎn)生IISLRCK和IISCLK的是主設(shè)備。 串行數(shù)據(jù)總是以偶數(shù)個(gè)數(shù)據(jù)(為奇數(shù)時(shí)填充)且高位在先(MSB)發(fā)送。高位在先是因?yàn)榘l(fā)送器和接收器可能具有不同的字
11、長(zhǎng),發(fā)送器沒有必要了解接收器能夠處理多少為數(shù)據(jù),接收器也不需了解多少位的數(shù)據(jù)正在被發(fā)送。 被發(fā)送器發(fā)出的串行數(shù)據(jù)可以依據(jù)始終信號(hào)的下降沿或者上升沿來同步。但是,串行數(shù)據(jù)必須在上升沿處鎖入接收器。左右聲道選擇線決定被傳輸?shù)耐ǖ?。IISLRCK可以在下降沿或者上升沿處改變。它不要求是均勻的。在從設(shè)備端,這個(gè)信號(hào)在上升沿處被鎖定。IISLRCK信號(hào)線改變到MSB發(fā)送之間有一個(gè)時(shí)鐘周期的時(shí)間。2).Msb-Justified格式MSB-Justified格式與IIS格式有相同的信號(hào)線,唯一的不同是,IISLRCK信號(hào)線改變后,MSB立即發(fā)送,期間沒有一個(gè)時(shí)鐘周期的時(shí)間。n IIS采集頻率和主設(shè)備時(shí)鐘I
12、IS主設(shè)備時(shí)鐘頻率可以通過采樣頻率來選擇,如下表一所示。因?yàn)镮IS主設(shè)備時(shí)鐘頻率是由IIS分頻器產(chǎn)生的(主設(shè)備時(shí)鐘頻率=PCLK/預(yù)分頻器值),因此必須選擇合適的預(yù)分頻值和CODECLK的采樣頻率類型(256或者384fs),才能獲得合適的IISLRCK頻率(IISLRCK頻率=主設(shè)備時(shí)鐘頻率/CODECLK)。串行位采樣頻率類型(16/32/48fs)可以通過配置信道的串行位數(shù)和CODECLK采樣頻率類型來完成(串行位時(shí)鐘頻率類型=CODECLK的采樣類型/串行數(shù)據(jù)位數(shù)),如下表2所示。表一 CODEC clock(CODECLK=256 或者384fs)表二 可用的serial bit c
13、lock frequency(IISCLK=16 or 32 or 48fs)2.3 音頻芯片UDA1341 UDA1341TS是Philips公司的音頻CODEC。UDA134TS片內(nèi)集成了立體聲ADC、DAC,可以實(shí)現(xiàn)模擬信號(hào)和數(shù)字信號(hào)的相互轉(zhuǎn)換,其模擬輸入通道可用可編程增益放大器(PGA)和數(shù)字自動(dòng)增益控制(AGC)對(duì)模擬信號(hào)進(jìn)行處理。同時(shí)該芯片提供了DSP,可以處理數(shù)字音頻信號(hào)。 UDA134TS提供2組音頻信號(hào)輸入線,1組音頻信號(hào)輸出線,1組IIS總線接口信號(hào)線L3總線。音頻輸入和輸出線各有左右兩個(gè)聲道。IIS總線接口信號(hào)線包括位時(shí)鐘輸入BCK,字選擇輸入WS,數(shù)據(jù)輸入DATAI,數(shù)
14、據(jù)輸出DATAO和音頻系統(tǒng)時(shí)鐘SYSCLK信號(hào)線。IIS總線只處理音頻數(shù)據(jù)UDA134TS內(nèi)置的L3總線相當(dāng)于混音頻控制接口,可使微處理器對(duì)UDA134TS中得數(shù)字音頻處理參數(shù)和系統(tǒng)控制參數(shù)進(jìn)行配置,如輸入/輸出音頻信號(hào)的音量存在很大差別;對(duì)UDA134TS的所有功能控制和狀態(tài)均通過L3總線實(shí)現(xiàn)。該接口包含了3個(gè)信號(hào)線,分別是串行數(shù)據(jù)線L3DATA、接口模式選擇線L3MODE和串行時(shí)鐘線L3CLOCK。L3接口操作有兩種模式:地址模式和數(shù)據(jù)傳輸模式。L3MODE為低電平時(shí)操作為地址模式,高電平時(shí)操作為數(shù)據(jù)傳輸模式。3 系統(tǒng)的軟件設(shè)計(jì)3.1 軟件整體設(shè)計(jì) 嵌入式 Linux是一種完全開放且免費(fèi)的
15、操作系統(tǒng),其支持多種硬件體系結(jié)構(gòu),運(yùn)行穩(wěn)定 ,擁有完善的開發(fā)工具,為開發(fā)人員提供了優(yōu)良的開發(fā)環(huán)境5。在嵌入式 Linux系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序提供了應(yīng)用程序和實(shí)際設(shè)備之間的一個(gè)軟件層(接口),為應(yīng)用程序屏蔽了硬件細(xì)節(jié)。本設(shè)計(jì)中,音頻設(shè)備驅(qū)動(dòng)程序主要通過對(duì)硬件的控制實(shí)現(xiàn)音頻流的傳輸,同時(shí)向上層提供標(biāo)準(zhǔn)的音頻接口。整個(gè)音頻驅(qū)動(dòng)程序包括設(shè)備初始化、打開設(shè)備、數(shù)字音頻處理(DSP)驅(qū)動(dòng)、混頻器(MIXER)驅(qū)動(dòng)和釋放設(shè)備等部分。本文由于篇幅的限制,僅介紹設(shè)備初始化及打開設(shè)備的實(shí)現(xiàn)。設(shè)備初始化是整個(gè)音頻驅(qū)動(dòng)程序的開始部分,主要完成對(duì)UDA1341TS音量、采樣頻率、L3接口等的初始化,并且注冊(cè)設(shè)備。通過函
16、數(shù)audio_init(void)完成以下具體功能: AT91RM9200控制端口(PA0、PA1、PA2)的初始化;為UDA1341TS分配 DMA通道;初始化UDA1341TS芯片;注冊(cè)音頻audio設(shè)備和混頻器設(shè)備。3.2 WAV文件格式WAV聲音格式文件是Windows環(huán)境下的一種常用音頻文件格式,它遵循著一種稱為資源互換文件格式(Resources lnterchange File Format)的結(jié)構(gòu),簡(jiǎn)稱RIFF。RIFF可以看作是一種樹狀結(jié)構(gòu),其基本構(gòu)成單位為chunk,猶如樹狀結(jié)構(gòu)中的節(jié)點(diǎn),每個(gè)chunk由辨別碼、數(shù)據(jù)大小及數(shù)據(jù)所組成。WAV為WAVEFORM的縮寫。RIFF
17、格式辨別碼為WAVE。整個(gè)文件由兩個(gè)chunk所組成:辨別碼fmt及data。 在“fmt”的chunk下包含了一個(gè)PCMWAVEFORMAT數(shù)據(jù)結(jié)構(gòu),在“fmt” chunk之后是原始聲音的采樣數(shù)據(jù),這些數(shù)據(jù)是可以直接送到IIS總線的數(shù)字音頻信號(hào)。典型的WAV文件結(jié)構(gòu):它包含8字節(jié)RIFF頭、4字節(jié)數(shù)據(jù)類型“WAVE”、fmt chunk(共0x18字節(jié))和 data chunk。因此,WAV文件中從下式中的sizeoff開始的四個(gè)字節(jié)表示聲音數(shù)據(jù)的大小,dataoff開始的位置為具體的聲音數(shù)據(jù)。sizeoff = 0x8+0x4+0x18+0x4=0x28dataoff = 0x8+0x4
18、+0x18+0x8=0x2C3.3 初始化UDA1341模塊1.初始化UDA1314模塊流程圖如下:開始端口初始化地址選擇AD和DA增益控制選擇模式錄音2.1314初始化程序代碼如下:static void Init1341(char mode)U16 FsIdx;/Port Initialize/-/ PORT B GROUP/Ports : GPB4 GPB3 GPB2 /Signal : L3CLOCK L3DATA L3MODE/Setting: OUTPUT OUTPUT OUTPUT / 9:8 7:6 5:4/Binary : 01 , 01 01 /- rGPBDAT = rG
19、PBDAT & (L3M|L3C|L3D) |(L3M|L3C); /Start condition : L3M=H, L3C=HrGPBUP = rGPBUP & (0x72) |(0x72); /The pull up function is disabled GPB4:2 1 1100 rGPBCON = rGPBCON & (0x3f4) |(0x15lpData, lpRecCurBlk-dwBufferLength/2);static void _irq RecDMADone(void)if(RecStatus.DevReq&0xff)=0x12) ClearPending(BIT
20、_DMA1); /Clear pending bitif(RecStatus.DevReq&0xff)=0x21)ClearPending(BIT_DMA2); lpRecCurBlk-dwBytesRecorded = lpRecCurBlk-dwBufferLength; if(lpRecCurBlk-lpNext)lpRecCurBlk = lpRecCurBlk-lpNext; else lpRecCurBlk = lpRecFstBlk; SetRecDma();MMRESULT waveInOpen(LPHWAVEIN phwi,UINT uDeviceID,LPWAVEFORMA
21、TEX pwfx,DWORD dwCallback,DWORD dwCallbackInstance,DWORD fdwOpen)U8 i;U8 err = 0;if(pwfx-wFormatTag!=WAVE_FORMAT_PCM)/only support PCMerr = 1;if(pwfx-nChannels!=2)/must be steroerr = 2;if(pwfx-wBitsPerSample%8)/8 or 16 bitserr = 3;for(i=0; inSamplesPerSec=CodecParai.Freq)break;if(i=7)err = 4;if(pwfx
22、-nChannels*pwfx-wBitsPerSample)/8!=pwfx-nBlockAlign)err = 5;if(pwfx-nAvgBytesPerSec!=pwfx-nSamplesPerSec*pwfx-nBlockAlign)err = 6;if(err)/printf(check err = %dn, err);return WAVERR_BADFORMAT;/check format parametersif(RecStatus.Status!=DEVICE_FREE)return MMSYSERR_BADDEVICEID;RecStatus.DevReq = Reque
23、stDMA(REC_DMA_ATTR, REC_DMA_MODE);if(RecStatus.DevReq=REQUEST_DMA_FAIL)return MMSYSERR_BADDEVICEID;RecStatus.handle =*phwi; RecStatus.wFormatTag = pwfx-wFormatTag;RecStatus.nChannels = pwfx-nChannels;RecStatus.wBitsPerSample = pwfx-wBitsPerSample;RecStatus.FsIdx = i;RecStatus.CallBack = (CallBackPro
24、c)dwCallback;RecStatus.CallBackInst = dwCallbackInstance;RecStatus.Status = DEVICE_REC;save_MPLLCON = rMPLLCON;/save MPLLCON value/rMPLLCON = CodecParaRecStatus.FsIdx.MPLL;/SetSysFclk(CodecParaRecStatus.FsIdx.MPLL);ChgSysClock(CodecParaRecStatus.FsIdx.MPLL);rCLKCON |= 0x20000;/enable IIS clockIIS_Po
25、rtSetting();if(RecStatus.DevReq&0xff)=0x12)pISR_DMA1 = (U32)RecDMADone;EnableIrq(BIT_DMA1);if(RecStatus.DevReq&0xff)=0x21) pISR_DMA2 = (U32)RecDMADone;EnableIrq(BIT_DMA2);RecTotBlks = 0;Init1341(RECORD);return MMSYSERR_NOERROR;MMRESULT waveInClose(HWAVEOUT hwi)if(RecStatus.handle!=hwi)|(RecStatus.St
26、atus!=DEVICE_REC)return MMSYSERR_INVALHANDLE;rIISCON = 0x0;/IIS Interface stop rIISFCON = 0x0; /For FIFO flush rCLKCON&= 0x20000;/disable IIS colock /rMPLLCON = save_MPLLCON;/restore MPLLCON value/SetSysFclk(save_MPLLCON);ChgSysClock(save_MPLLCON); RecStatus.Status = DEVICE_FREE; ReleaseDMA(RecStatu
27、s.DevReq);if(RecStatus.DevReq&0xff)=0x12)DisableIrq(BIT_DMA1);if(RecStatus.DevReq&0xff)=0x21)DisableIrq(BIT_DMA2);return MMSYSERR_NOERROR;MMRESULT waveInStart(HWAVEIN hwi)if(RecStatus.handle!=hwi)|(RecStatus.Status!=DEVICE_REC)return MMSYSERR_INVALHANDLE;if(!RecTotBlks)return MMSYSERR_NOMEM;SetRecDm
28、a();rIISPSR = CodecParaRecStatus.FsIdx.PreScaler;rIISCON = (05)+(14)+(13)+(02)+(11);/Tx DMA disable,Rx DMA enable,Tx idle,Rx not idle,prescaler enable,stoprIISMOD = (08)+(16)+(05)+(14)3)+(CodecParaRecStatus.FsIdx.ofs2)+(10);/Master mode8,Rx mode7:6,Low for Left Channel5,IIS format4,16/8bit 3,256/384
29、fs 2,IISCLK 32fs1:0 rIISFCON = (114)+(1 start piling. rIISCON |= 0x1; /start IIS return MMSYSERR_NOERROR;MMRESULT waveInStop(HWAVEIN hwi)if(RecStatus.handle!=hwi)|(RecStatus.Status!=DEVICE_REC)return MMSYSERR_INVALHANDLE;rIISCON = 0x0;/IIS Interface stop rIISFCON = 0x0; /For FIFO flush StopDMA(RecSt
30、atus.DevReq); return MMSYSERR_NOERROR;MMRESULT waveInPrepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)if(RecStatus.handle!=hwi)|(RecStatus.Status!=DEVICE_REC)return MMSYSERR_INVALHANDLE;pwh-lpNext = 0;pwh-dwBytesRecorded = 0;pwh-dwUser = 0;pwh-dwFlags = 0;return MMSYSERR_NOERROR;MMRESULT waveInUn
31、prepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)if(RecStatus.handle!=hwi)|(RecStatus.Status!=DEVICE_REC)return MMSYSERR_INVALHANDLE;return MMSYSERR_NOERROR;MMRESULT waveInAddBuffer(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)if(RecStatus.handle!=hwi)|(RecStatus.Status!=DEVICE_REC)return MMSYSERR_INVAL
32、HANDLE;if(!RecTotBlks)lpRecFstBlk = pwh;lpRecCurBlk = lpRecFstBlk;elselpRecLstBlk-lpNext = pwh;lpRecLstBlk = pwh;pwh-lpNext = 0;RecTotBlks+;return MMSYSERR_NOERROR;MMRESULT waveInReset(HWAVEOUT hwi)return MMSYSERR_NOERROR;3.5 放音模塊1.放音模塊程序流程圖如下:圖 放音模塊程序流程圖2.放音模塊程序代碼: MMRESULT waveOutOpen(LPHWAVEOUT p
33、hwo,UINT uDeviceID,LPWAVEFORMATEX pwfx,DWORD dwCallback,DWORD dwCallbackInstance,DWORD fdwOpen)U8 i;U8 err = 0;if(pwfx-wFormatTag!=WAVE_FORMAT_PCM)/only support PCMerr = 1;if(pwfx-nChannels!=2)/must be steroerr = 1;if(pwfx-wBitsPerSample%8)/8 or 16 bitserr = 1;for(i=0; inSamplesPerSec=CodecParai.Fre
34、q)break;if(i=7)err = 1;if(pwfx-nChannels*pwfx-wBitsPerSample)/8!=pwfx-nBlockAlign)err = 1;if(pwfx-nAvgBytesPerSec!=pwfx-nSamplesPerSec*pwfx-nBlockAlign)err = 1;if(err)return WAVERR_BADFORMAT;/check format parametersif(PlayStatus.Status!=DEVICE_FREE)return MMSYSERR_BADDEVICEID;PlayStatus.DevReq = Req
35、uestDMA(PLAY_DMA_ATTR, PLAY_DMA_MODE);if(PlayStatus.DevReq=REQUEST_DMA_FAIL)return MMSYSERR_BADDEVICEID;PlayStatus.handle =*phwo; PlayStatus.wFormatTag = pwfx-wFormatTag;PlayStatus.nChannels = pwfx-nChannels;PlayStatus.wBitsPerSample = pwfx-wBitsPerSample;PlayStatus.FsIdx = i;PlayStatus.CallBack = (
36、CallBackProc)dwCallback;PlayStatus.CallBackInst = dwCallbackInstance;PlayStatus.Status = DEVICE_PLAY;save_MPLLCON = rMPLLCON;/save MPLLCON value/rMPLLCON = CodecParaPlayStatus.FsIdx.MPLL;/SetSysFclk(CodecParaPlayStatus.FsIdx.MPLL);ChgSysClock(CodecParaRecStatus.FsIdx.MPLL);rCLKCON |= 0x20000;/enable
37、 IIS clock/ChangeClockDivider(1,1); /1:2:4/ChangeMPllValue(0x96,0x5,0x1); /FCLK=135.MHz (PCLK=33.MHz) /Uart_Init(,); IIS_PortSetting(); pISR_DMA2 = (U32)PlayDMA2Done; EnableIrq(BIT_DMA2);PlayTotBlks = 0;Init1341(PLAY);waveOutSetVolume(PlayStatus.handle, PlayVolume);return MMSYSERR_NOERROR;MMRESULT w
38、aveOutClose(HWAVEOUT hwo)if(PlayStatus.handle!=hwo)|(PlayStatus.Status!=DEVICE_PLAY)return MMSYSERR_INVALHANDLE;rIISCON = 0x0;/IIS Interface stop rIISFCON = 0x0; /For FIFO flush rCLKCON&= 0x20000;/disable IIS colock /rMPLLCON = save_MPLLCON;/restore MPLLCON value/SetSysFclk(save_MPLLCON);ChgSysClock
39、(save_MPLLCON); PlayStatus.Status = DEVICE_FREE; ReleaseDMA(PlayStatus.DevReq);DisableIrq(BIT_DMA2);return MMSYSERR_NOERROR;MMRESULT waveOutPrepareHeader(HWAVEOUT hwo,LPWAVEHDR pwh, UINT cbwh)if(PlayStatus.handle!=hwo)|(PlayStatus.Status!=DEVICE_PLAY)return MMSYSERR_INVALHANDLE;pwh-lpNext = 0;pwh-dw
40、BytesRecorded = 0;pwh-dwUser = 0;pwh-dwFlags = 0;return MMSYSERR_NOERROR;MMRESULT waveOutUnprepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)if(PlayStatus.handle!=hwo)|(PlayStatus.Status!=DEVICE_PLAY)return MMSYSERR_INVALHANDLE;return MMSYSERR_NOERROR;MMRESULT waveOutWrite(HWAVEOUT hwo,LPWAVEHDR pwh, UINT cbwh)if(PlayStatus.handle!=hwo)|(PlayStatus.Status!=DEVICE_PLAY)return MMSYSERR_INVALHANDLE;if(!PlayTotBlks)lpPlayFstBlk = pwh;lpPlayCurBlk = lpPlayFstBlk;StartPlay();elselpPlayLstBlk-lpNext = pwh;lpPlayLstBlk = pwh;pwh-lpNext = 0;PlayTotBlks+;return MMSYSERR_NOERRO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DZ/T 0431-2005礦業(yè)權(quán)檔案立卷歸檔規(guī)范
- DZ/T 0276.29-2015巖石物理力學(xué)性質(zhì)試驗(yàn)規(guī)程第29部分:巖體強(qiáng)度試驗(yàn)(承壓板法)
- DZ 2.2-1987地質(zhì)鉆探金剛石擴(kuò)孔器
- CJ/T 89-1999真空吸污車技術(shù)條件
- CJ/T 347-2010家用燃?xì)鈭?bào)警器及傳感器
- CJ/T 34-2002液化石油氣鋼瓶涂覆規(guī)定
- CJ/T 186-2018地漏
- 系統(tǒng)分析師考試時(shí)間管理技巧試題及答案
- 綠化苗木買賣合同協(xié)議書
- 質(zhì)量保證與測(cè)試的試題及答案
- 變壓器維修投標(biāo)方案
- 2025屆山東師范大學(xué)附中高考適應(yīng)性考試歷史試卷含解析
- 四川省高職單招餐飲類《中式烹飪技藝》復(fù)習(xí)備考試題庫-下(判斷、簡(jiǎn)答題)
- DL∕T 5783-2019 水電水利地下工程地質(zhì)超前預(yù)報(bào)技術(shù)規(guī)程
- SMP-04-022-00 共線生產(chǎn)管理規(guī)程
- 中考字音字形練習(xí)題(含答案)-字音字形專項(xiàng)訓(xùn)練
- 北京市西城區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末考試數(shù)學(xué)試卷
- 2024年連云港市名小六年級(jí)畢業(yè)考試語文模擬試卷
- 枯死松樹清理服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 2024年四川省水電投資經(jīng)營(yíng)集團(tuán)普格電力有限公司招聘筆試參考題庫含答案解析
- 制冷行業(yè)的法律法規(guī)與安全生產(chǎn)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論