版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
淘寶店鋪:技術(shù)論壇《手把手教你學(xué)STM32》主講人:正點(diǎn)原子團(tuán)隊(duì)硬件平臺(tái):正點(diǎn)原子STM32開(kāi)發(fā)板:廣州市星翼電子科技有限公司淘寶店鋪:技術(shù)論壇:開(kāi)源電子網(wǎng)公眾平臺(tái):“正點(diǎn)原子”官方網(wǎng)站:聯(lián)系電話:ALIENTEK《手把手教你學(xué)STM32》音樂(lè)播放器實(shí)驗(yàn)(WM8978)淘寶店鋪:技術(shù)論壇STM32F1xx開(kāi)發(fā)板(正點(diǎn)原子)STM32F4xx開(kāi)發(fā)板(正點(diǎn)原子)適用平臺(tái)本視頻重點(diǎn)參考資料淘寶店鋪:技術(shù)論壇參考資料:1,探索者STM32F407開(kāi)發(fā)板《STM32F4開(kāi)發(fā)指南-庫(kù)函數(shù)版本》——音樂(lè)播放器實(shí)驗(yàn)2,I2S參考資料《STM32F4xx中文參考手冊(cè)》-第27章串行外設(shè)接口(SPI)3,WAV文件格式參考資料見(jiàn)光盤:軟件資料WAV文件格式說(shuō)明WAV文件格式分析與應(yīng)用.pdf4,WM8978參考資料見(jiàn)光盤:硬件資料芯片資料①WM8978G.pdf②WM8978中文資料.doc目錄淘寶店鋪:技術(shù)論壇WAV&WM8978簡(jiǎn)介1I2S簡(jiǎn)介&硬件連接2
源碼講解&例程測(cè)試31、WAV&WM8978簡(jiǎn)介-什么是WAV?淘寶店鋪:技術(shù)論壇WAV即WAVE文件,是最常用的數(shù)字化聲音文件格式之一,其擴(kuò)展名為“.wav”。符合RIFF(ResourceInterchangeFileFormat)文件規(guī)范,用于保存Windows平臺(tái)的音頻信息資源,被Windows平臺(tái)及其應(yīng)用程序所廣泛支持。WAV格式還支持MSADPCM,CCITTALAW等多種壓縮運(yùn)算法,支持多種音頻數(shù)字,取樣頻率和聲道。標(biāo)準(zhǔn)格式化的WAV文件和CD格式一樣,也是44.1K的取樣頻率,16位量化數(shù)字,因此在聲音文件質(zhì)量和CD相差無(wú)幾!
1、WAV&WM8978簡(jiǎn)介-WAV組成淘寶店鋪:技術(shù)論壇WAV是由若干個(gè)Chunk組成的。按照在文件中的出現(xiàn)位置包括:①RIFFWAVEChunk、②FormatChunk、③FactChunk(可選)和④DataChunk。每個(gè)Chunk由塊標(biāo)識(shí)符、數(shù)據(jù)大小和數(shù)據(jù)三部分組成,如下圖所示:其中塊標(biāo)識(shí)符由4個(gè)ASCII碼構(gòu)成,數(shù)據(jù)大小則標(biāo)出緊跟其后的數(shù)據(jù)的長(zhǎng)度(單位為字節(jié)),注意這個(gè)長(zhǎng)度不包含塊標(biāo)識(shí)符和數(shù)據(jù)大小的長(zhǎng)度,即不包含最前面的8個(gè)字節(jié)。所以實(shí)際Chunk的大小為數(shù)據(jù)大小加8。1、WAV&WM8978簡(jiǎn)介-WAV組成淘寶店鋪:技術(shù)論壇①RIFF塊(RIFFWAVEChunk),該塊以“RIFF”作為標(biāo)示,緊跟wav文件大小(該大小是wav文件的總大小-8),然后數(shù)據(jù)段為“WAVE”,表示是wav文件。RIFF塊的Chunk結(jié)構(gòu)如下://RIFF塊typedef__packedstruct{u32ChunkID; //chunkid;這里固定為"RIFF",即0X46464952u32ChunkSize; //集合大小;文件總大小-8u32Format; //格式;WAVE,即0X45564157}ChunkRIFF;1、WAV&WM8978簡(jiǎn)介-WAV組成淘寶店鋪:技術(shù)論壇②Format塊(FormatChunk),該塊以“fmt”作為標(biāo)示(注意有個(gè)空格?。?,一般情況下,該段的大小為16個(gè)字節(jié),但是有些軟件生成的wav格式,該部分可能有18個(gè)字節(jié),含有2個(gè)字節(jié)的附加信息。Format塊的Chunk結(jié)構(gòu)如下:
//fmt塊typedef__packedstruct{u32ChunkID; //chunkid;這里固定為"fmt",即0X20746D66u32ChunkSize; //子集合大小(不包括ID和Size);u16AudioFormat; //音頻格式;一般為0X0001,表示線性PCM;u16NumOfChannels; //通道數(shù)量;1,表示單聲道;2,表示雙聲道;u32SampleRate; //采樣率;0X1F40,表示8Khzu32ByteRate; //字節(jié)速率=采樣率*通道數(shù)*(ADC位數(shù)/8)u16BlockAlign; //塊對(duì)齊(字節(jié))=通道數(shù)*(ADC位數(shù)/8)u16BitsPerSample; //單個(gè)采樣的位數(shù);16位PCM,設(shè)置為16
u16ByteExtraData; //附加的數(shù)據(jù)字節(jié);2個(gè);線性PCM,沒(méi)有這個(gè)參數(shù)}ChunkFMT; 1、WAV&WM8978簡(jiǎn)介-WAV組成淘寶店鋪:技術(shù)論壇③Fact塊(FactChunk),該塊為可選塊,以“fact”作為標(biāo)示,不是每個(gè)WAV文件都有,在非PCM格式的文件中,一般會(huì)在Format結(jié)構(gòu)后面加入一個(gè)Fact塊,該塊Chunk結(jié)構(gòu)如下://fact塊typedef__packedstruct{u32ChunkID; //chunkid;這里固定為"fact",即0X74636166;u32ChunkSize; //子集合大小(不包括ID和Size);這里為:4.u32DataFactSize; //數(shù)據(jù)轉(zhuǎn)換為PCM格式后的大小}ChunkFACT;DataFactSize是這個(gè)Chunk中最重要的數(shù)據(jù),如果這是某種壓縮格式的聲音文件,那么從這里就可以知道他解壓縮后的大小。對(duì)于解壓時(shí)的計(jì)算會(huì)有很大的好處!不過(guò)我們例程使用的是PCM格式,所以不存在這個(gè)塊。1、WAV&WM8978簡(jiǎn)介-WAV組成淘寶店鋪:技術(shù)論壇④數(shù)據(jù)塊(DataChunk),該塊是真正保存wav數(shù)據(jù)的地方,以“data”'作為該Chunk的標(biāo)示,然后是數(shù)據(jù)的大小。數(shù)據(jù)塊的Chunk結(jié)構(gòu)如下://data塊typedef__packedstruct{u32ChunkID; //chunkid;這里固定為"data",即0X61746164u32ChunkSize; //子集合大小(不包括ID和Size);}ChunkDATA;ChunkSize的大小就是音頻數(shù)據(jù)的大小(僅指音頻數(shù)據(jù)大小,不包括ChunkID之類的數(shù)據(jù)),在ChunkSize之后,緊跟音頻數(shù)據(jù)。
1、WAV&WM8978簡(jiǎn)介-WAV數(shù)據(jù)說(shuō)明淘寶店鋪:技術(shù)論壇根據(jù)FormatChunk中的聲道數(shù)以及采樣bit數(shù),wav數(shù)據(jù)的bit位置可以分成如下表所示的幾種形式:?jiǎn)温暤廊?取樣2取樣3取樣4取樣5取樣68位量化聲道0聲道0聲道0聲道0聲道0聲道0雙聲道取樣1取樣2取樣38位量化聲道0(左)聲道1(右)聲道0(左)聲道1(右)聲道0(左)聲道1(右)單聲道取樣1取樣2取樣316位量化聲道0
(低字節(jié))聲道0
(高字節(jié))聲道0
(低字節(jié))聲道0
(高字節(jié))聲道0
(低字節(jié))聲道0
(高字節(jié))雙聲道取樣1取樣216位量化聲道0聲道0聲道1聲道1聲道0聲道0(低字節(jié))(高字節(jié))(低字節(jié))(高字節(jié))(低字節(jié))(高字節(jié))單聲道取樣1取樣224位量化聲道0
(低字節(jié))聲道0
(中字節(jié))聲道0
(高字節(jié))聲道0
(低字節(jié))聲道0
(中字節(jié))聲道0
(高字節(jié))雙聲道取樣124位量化聲道0聲道0聲道0聲道1聲道1聲道1(低字節(jié))(中字節(jié))(高字節(jié))(低字節(jié))(中字節(jié))(高字節(jié))本例程支持:16位和24位,立體聲,每個(gè)取樣為4或6個(gè)字節(jié),低字節(jié)在前,高字節(jié)在后。在得到這些wav數(shù)據(jù)以后,通過(guò)I2S送給WM8978,即可欣賞音樂(lè)了。1、WAV&WM8978簡(jiǎn)介-WM8978簡(jiǎn)介淘寶店鋪:技術(shù)論壇WM8978是歐勝(Wolfson)推出的一款全功能音頻處理器。它帶有HI-FI級(jí)數(shù)字信號(hào)處理內(nèi)核,支持增強(qiáng)3D硬件環(huán)繞音效,和5頻段的硬件均衡器,可以有效改善音質(zhì)。
同時(shí)集成了對(duì)麥克風(fēng)的支持,和一個(gè)輸出功率達(dá)0.9W的高質(zhì)量功放。WM8978進(jìn)一步提升了耳機(jī)放大器輸出功率,在推動(dòng)16歐姆耳機(jī)的時(shí)候,每聲道最大輸出功率高達(dá)40毫瓦!可以連接市面上絕大多數(shù)適合隨身聽(tīng)的高端HI-FI耳機(jī)。1、WAV&WM8978簡(jiǎn)介-WM8978特點(diǎn)淘寶店鋪:技術(shù)論壇●I2S接口,支持最高192K,24bit音頻播放●DAC信噪比98dB;ADC信噪比90dB●支持無(wú)電容耳機(jī)驅(qū)動(dòng)(提供40mW@16Ω的輸出能力)●支持揚(yáng)聲器輸出(提供0.9W@8Ω的驅(qū)動(dòng)能力)●支持立體聲差分輸入/麥克風(fēng)輸入●支持左右聲道音量獨(dú)立調(diào)節(jié)●支持3D效果,支持5路EQ調(diào)節(jié)1、WAV&WM8978簡(jiǎn)介-WM8978接口淘寶店鋪:技術(shù)論壇WM8978通過(guò)I2S接口(即數(shù)字音頻接口)同MCU進(jìn)行音頻數(shù)據(jù)傳輸(支持音頻接收和發(fā)送),通過(guò)兩線(MODE=0,即IIC接口)或三線(MODE=1)接口進(jìn)行配置。WM8978的I2S接口,由4個(gè)引腳組成:1,ADCDAT:ADC數(shù)據(jù)輸出2,DACDAT:DAC數(shù)據(jù)輸入3,LRC:數(shù)據(jù)左/右對(duì)齊時(shí)鐘4,BCLK:位時(shí)鐘,用于同步WM8978的I2S接口支持多種不同的音頻數(shù)據(jù)模式:左(MSB)對(duì)齊標(biāo)準(zhǔn)、右(LSB)對(duì)齊標(biāo)準(zhǔn)、飛利浦(I2S)標(biāo)準(zhǔn)等,本例程,我們采用飛利浦標(biāo)準(zhǔn)。1、WAV&WM8978簡(jiǎn)介-WM8978接口淘寶店鋪:技術(shù)論壇飛利浦(I2S)標(biāo)準(zhǔn)模式,數(shù)據(jù)在跟隨LRC傳輸?shù)腂CLK的第二個(gè)上升沿時(shí)傳輸MSB,其他位一直到LSB按順序傳輸。傳輸依賴于字長(zhǎng)、BCLK頻率和采樣率,在每個(gè)采樣的LSB和下一個(gè)采樣的MSB之間都應(yīng)該有未用的BCLK周期。飛利浦標(biāo)準(zhǔn)I2S數(shù)據(jù)傳輸協(xié)議如下圖所示:
圖中,fs即音頻信號(hào)的采樣率,比如44.1Khz,因此:LRC的頻率就是音頻信號(hào)的采樣率。另外,WM8978還需要一個(gè)MCLK,本例程由STM32F4為其提供MCLK時(shí)鐘,MCLK的頻率必須等于256fs,也就是音頻采樣率的256倍。1、WAV&WM8978簡(jiǎn)介-WM8978框圖淘寶店鋪:技術(shù)論壇WM8978內(nèi)部有很多的模擬開(kāi)關(guān),用來(lái)選擇通道,同時(shí)還有很多調(diào)節(jié)器,用來(lái)設(shè)置增益和音量。接下來(lái)我們介紹相關(guān)寄存器。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇該寄存器用于控制WM8978的軟復(fù)位,寫(xiě)任意值到該寄存器地址,即可實(shí)現(xiàn)軟復(fù)位WM8978。R0寄存器(00h)注意:WM8978的寄存器是9位的?。《沂遣豢勺x的,只可以寫(xiě),不可讀!1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R1寄存器(01h)該位設(shè)置為1,模擬部分的放大器才會(huì)工作,才可以聽(tīng)到聲音。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R2寄存器(02h)該寄存器設(shè)置ROUT1EN(bit8),LOUT1EN(bit7)和SLEEP(bit6)等三個(gè)位,ROUT1EN和LOUT1EN,設(shè)置為1,使能耳機(jī)輸出,SLEEP設(shè)置為0,進(jìn)入正常工作模式1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R3寄存器(03h)該寄存器設(shè)置LOUT2EN(bit6),ROUT2EN(bit5),RMIXER(bit3),LMIXER(bit2),DACENR(bit1)和DACENL(bit0)等6個(gè)位。LOUT2EN和ROUT2EN,設(shè)置為1,使能喇叭輸出;LMIXER和RMIXER設(shè)置為1,使能左右聲道混合器;DACENL和DACENR則是使能左右聲道的DAC了,必須設(shè)置為1。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R4寄存器(04h)該寄存器要設(shè)置WL(bit6:5)和FMT(bit4:3)等4個(gè)位。WL(bit6:5)用于設(shè)置字長(zhǎng)(即設(shè)置音頻數(shù)據(jù)有效位數(shù)),00表示16位音頻,10表示24位音頻;FMT(bit4:3)用于設(shè)置I2S音頻數(shù)據(jù)格式(模式),我們一般設(shè)置為10,表示I2S格式,即飛利浦模式。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R6寄存器(06h)該寄存器直接全部設(shè)置為0即可,設(shè)置MCLK和BCLK都來(lái)自外部,即由STM32F4提供1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R10寄存器(0Ah)該寄存器我們要設(shè)置SOFTMUTE(bit6)和DACOSR128(bit3)等兩個(gè)位,SOFTMUTE設(shè)置為0,關(guān)閉軟件靜音;DACOSR128設(shè)置為1,DAC得到最好的SNR。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R49寄存器(31h)該寄存器要設(shè)置SPKBOOST(bit2)和TSDEN(bit1)這兩個(gè)位。SPKBOOST用于設(shè)置喇叭的增益,設(shè)置為0即可(gain=-1),如想獲得更大的聲音,可設(shè)置為1(gain=+1.5)即;TSDEN用于設(shè)置過(guò)熱保護(hù),設(shè)置為1(開(kāi)啟)即可。
1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R50&R51寄存器(32h&33h)上圖為R50寄存器描述,用于設(shè)置左聲道,另外一個(gè)用于設(shè)置右聲道(R51)。只需要設(shè)置這兩個(gè)寄存器的最低位為1即可,將左右聲道的DAC輸出接入左右聲道混合器里面,才能在耳機(jī)/喇叭聽(tīng)到音樂(lè)。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R52&R53寄存器(34h&35h)上圖為R52寄存器描述,用于設(shè)置耳機(jī)輸出左聲道(R52),另一個(gè)用于設(shè)置耳機(jī)輸出右聲道(R53)。這兩個(gè)寄存器的最高位(HPVU)用于設(shè)置是否更新左右聲道的音量,最低6位用于設(shè)置左右聲道的音量,我們可以先設(shè)置好兩個(gè)寄存器的音量值,最后設(shè)置其中一個(gè)寄存器最高位為1,即可更新音量設(shè)置。1、WAV&WM8978簡(jiǎn)介-WM8978寄存器淘寶店鋪:技術(shù)論壇R54&R55寄存器(36h&37h)這兩個(gè)寄存器用于設(shè)置喇叭音量,同R52,R53設(shè)置一模一樣,這里就不細(xì)說(shuō)了。
經(jīng)過(guò)這些寄存器的設(shè)置,我們即可實(shí)現(xiàn)利用WM8978播放音樂(lè),其他:3D、EQ等設(shè)置,這里就不再介紹了,請(qǐng)大家參考:WM8978G.pdf2、I2S簡(jiǎn)介&硬件連接-什么是I2S?淘寶店鋪:技術(shù)論壇I2S(也叫IIS,即:InterICSound)總線,又稱集成電路內(nèi)置音頻總線,是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn),該總線專責(zé)于音頻設(shè)備之間的數(shù)據(jù)傳輸,廣泛應(yīng)用于各種多媒體系統(tǒng)。它采用了沿獨(dú)立的導(dǎo)線傳輸時(shí)鐘與數(shù)據(jù)信號(hào)的設(shè)計(jì),通過(guò)將數(shù)據(jù)和時(shí)鐘信號(hào)分離,避免了因時(shí)差誘發(fā)的失真,為用戶節(jié)省了購(gòu)買抵抗音頻抖動(dòng)的專業(yè)設(shè)備的費(fèi)用。2、I2S簡(jiǎn)介&硬件連接-F4的I2S特點(diǎn)淘寶店鋪:技術(shù)論壇●支持全雙工/半雙工通信●支持主/從模式設(shè)置●8位可編程線性預(yù)分頻器,可實(shí)現(xiàn)精確的音頻采樣頻率(8~192Khz)●支持16位/24位/32位數(shù)據(jù)格式●數(shù)據(jù)包幀固定為16位(僅16位數(shù)據(jù)幀)或32位(可容納16/24/32位數(shù)據(jù)幀)●可編程時(shí)鐘極性●支持MSB對(duì)齊(左對(duì)齊)、LSB對(duì)齊(右對(duì)齊)、飛利浦標(biāo)準(zhǔn)和PCM標(biāo)準(zhǔn)等I2S標(biāo)準(zhǔn)●支持DMA數(shù)據(jù)傳輸(16位寬)●數(shù)據(jù)方向固定位MSB在前●支持主時(shí)鐘輸出(固定為256*fs,fs即音頻采樣率)2、I2S簡(jiǎn)介&硬件連接-F4的I2S框圖淘寶店鋪:技術(shù)論壇STM32F4的I2S是與SPI部分共用的,通過(guò)設(shè)置SPI_I2SCFGR寄存器的I2SMOD位即可開(kāi)啟I2S功能,I2S接口使用了幾乎與SPI相同的引腳、標(biāo)志和中斷。2、I2S簡(jiǎn)介&硬件連接-F4的I2S信號(hào)淘寶店鋪:技術(shù)論壇1,SD:串行數(shù)據(jù)(映射到MOSI引腳),用于發(fā)送或接收兩個(gè)時(shí)分復(fù)用的數(shù)據(jù)通道上的數(shù)據(jù)(僅半雙工模式)。2,WS:字選擇(映射到NSS引腳),即左右時(shí)鐘,用于切換左右聲道的數(shù)據(jù)。WS頻率等于音頻信號(hào)采樣率(fs)。3,CK:串行時(shí)鐘(映射到SCK引腳),即位時(shí)鐘,是主模式下的串行時(shí)鐘輸出以及從模式下的串行時(shí)鐘輸入。CK頻率=WS頻率(fs)*2*16(16位寬),如果是32位寬,則是:CK頻率=WS頻率(fs)*2*32(32位寬)。4,I2S2ext_SD和I2S3ext_SD:用于控制I2S全雙工模式的附加串行數(shù)據(jù)引腳(映射到MISO引腳),這兩個(gè)引腳僅用于全雙工模式。5,MCK:即主時(shí)鐘輸出,當(dāng)I2S配置為主模式(且SPI_I2SPR寄存器的MCKOE位置1)時(shí),使用此時(shí)鐘,該時(shí)鐘頻率為256×fs,fs:音頻信號(hào)采樣頻率。I2S用到的信號(hào)有:2、I2S簡(jiǎn)介&硬件連接-F4的I2S全雙工框圖淘寶店鋪:技術(shù)論壇
STM32F4為支持I2S全雙工模式,除了I2S2和I2S3,還可以使用兩個(gè)額外的I2S,它們稱為擴(kuò)展I2S(I2S2_ext、I2S3_ext),其框圖為:擴(kuò)展I2S(I2Sx_ext)只能用于全雙工模式。I2Sx_ext始終在從模式下工作。I2Sx和I2Sx_ext均可用于發(fā)送和接收。2、I2S簡(jiǎn)介&硬件連接-F4的I2S幀格式淘寶店鋪:技術(shù)論壇1,將16位數(shù)據(jù)封裝在16位幀中;2,將16位數(shù)據(jù)封裝在32位幀中;3,將24位數(shù)據(jù)封裝在32位幀中;4,將32位數(shù)據(jù)封裝在32位幀中;STM32F4的I2S支持4種數(shù)據(jù)和幀格式組合,分別是:將16位數(shù)據(jù)封裝在32位幀中時(shí),前16位(MSB)為有效位,16位LSB被強(qiáng)制清零,無(wú)需任何軟件操作或DMA請(qǐng)求(只需一個(gè)讀/寫(xiě)操作)。如果應(yīng)用程序選則DMA,則24位和32位數(shù)據(jù)幀需要對(duì)SPI_DR執(zhí)行兩次CPU讀取或?qū)懭氩僮鳎蛘咝枰獌纱蜠MA操作。24位的數(shù)據(jù)幀,硬件會(huì)將8位非有效位擴(kuò)展到帶有0位的32位數(shù)據(jù)幀。2、I2S簡(jiǎn)介&硬件連接-F4的I2S幀標(biāo)準(zhǔn)淘寶店鋪:技術(shù)論壇1,飛利浦標(biāo)準(zhǔn);2,MSB對(duì)齊(左對(duì)齊)標(biāo)準(zhǔn);3,LSB對(duì)齊(右對(duì)齊)標(biāo)準(zhǔn);4,PCM標(biāo)準(zhǔn);STM32F4的I2S支持4種幀標(biāo)準(zhǔn),分別是:本例程使用飛利浦標(biāo)準(zhǔn),僅對(duì)該標(biāo)準(zhǔn)進(jìn)行介紹,其他請(qǐng)參考《STM32F4xx中文參考手冊(cè)》第27.4節(jié)。2、I2S簡(jiǎn)介&硬件連接-I2S飛利浦標(biāo)準(zhǔn)淘寶店鋪:技術(shù)論壇I2S飛利浦標(biāo)準(zhǔn),使用WS信號(hào)來(lái)指示當(dāng)前正在發(fā)送的數(shù)據(jù)所屬的通道。該信號(hào)從當(dāng)前通道數(shù)據(jù)的第一個(gè)位(MSB)之前的一個(gè)時(shí)鐘開(kāi)始有效。發(fā)送方在時(shí)鐘信號(hào)(CK)的下降沿改變數(shù)據(jù),接收方在上升沿讀取數(shù)據(jù)。WS信號(hào)也在CK的下降沿變化。I2S飛利浦標(biāo)準(zhǔn)24位數(shù)據(jù),32位幀格式波形圖:2、I2S簡(jiǎn)介&硬件連接-I2S飛利浦標(biāo)準(zhǔn)淘寶店鋪:技術(shù)論壇在24位模式下數(shù)據(jù)傳輸,需要對(duì)SPI_DR執(zhí)行兩次讀取或?qū)懭氩僮鳌1热缫l(fā)送0X8EAA33這個(gè)數(shù)據(jù),就要分兩次寫(xiě)入SPI_DR,第一次寫(xiě)入:0X8EAA,第二次寫(xiě)入0X33xx(xx可以為任意數(shù)值),這樣就把0X8EAA33發(fā)送出去了。注意:從SD卡讀取到的24位WAV數(shù)據(jù)流,是低字節(jié)在前,高字節(jié)在后的,比如,我們讀到一個(gè)聲道的數(shù)據(jù)(24bit),存儲(chǔ)在buf[3]里面,那么要通過(guò)SPI_DR發(fā)送這個(gè)24位數(shù)據(jù),過(guò)程如下:SPI_DR=((u16)buf[2]<<8)+buf[1];SPI_DR=(u16)buf[0]<<8;
這樣,第一次發(fā)送高16位數(shù)據(jù),第二次發(fā)送低8位數(shù)據(jù),完成一次24bit數(shù)據(jù)的發(fā)送。2、I2S簡(jiǎn)介&硬件連接-F4的I2S時(shí)鐘發(fā)生器淘寶店鋪:技術(shù)論壇STM32F4的I2S時(shí)鐘發(fā)生器,其架構(gòu)如下圖:
上圖中的I2SxCLK,可以來(lái)自PLLI2S輸出(通過(guò)R系數(shù)分頻)或者來(lái)自外部時(shí)鐘(I2S_CKIN引腳),一般我們使用前者作為I2SxCLK輸入時(shí)鐘。我們需要根據(jù)音頻采樣率(fs)來(lái)計(jì)算各個(gè)分頻器的值,常用的音頻采樣率有:22.05Khz、44.1Khz、48Khz、96Khz、196Khz等。2、I2S簡(jiǎn)介&硬件連接-F4的I2S時(shí)鐘發(fā)生器淘寶店鋪:技術(shù)論壇當(dāng)MCK輸出使能時(shí),fs頻率計(jì)算公式如下:fs=I2SxCLK/[256*(2*I2SDIV+ODD)]
其中:I2SxCLK=(HSE/pllm)*PLLI2SN/PLLI2SR。HSE我們是8Mhz,而pllm在系統(tǒng)時(shí)鐘初始化就確定了,是8,這樣結(jié)合以上2式,可得計(jì)算公式如下:fs=(1000*PLLI2SN/PLLI2SR)/[256*(2*I2SDIV+ODD)]
fs單位是:Khz。其中:PLLI2SN取值范圍:192~432;PLLI2SR取值范圍:2~7;I2SDIV取值范圍:2~255;ODD取值范圍:0/1。
根據(jù)以上約束條件,便可根據(jù)fs來(lái)設(shè)置各個(gè)系數(shù)的值了,不過(guò)很多時(shí)候,并不能取得和fs一模一樣的頻率,只能近似等于fs,比如44.1Khz采樣率,我們?cè)O(shè)置PLLI2SN=271,PLLI2SR=2,I2SDIV=6,ODD=0,得到fs=44.108073Khz,誤差為:0.0183%。晶振頻率決定了有時(shí)無(wú)法通過(guò)分頻得到我們所要的fs,所以,某些fs如果要實(shí)現(xiàn)0誤差,大家必須得選用外部時(shí)鐘才可以。2、I2S簡(jiǎn)介&硬件連接-F4的I2S時(shí)鐘發(fā)生器淘寶店鋪:技術(shù)論壇如果要通過(guò)程序去計(jì)算這些系數(shù)的值,是比較麻煩的,所以,我們事先計(jì)算好常用fs對(duì)應(yīng)的系數(shù)值,建立一個(gè)表,這樣,用的時(shí)候,只需要查表取值就可以了,大大簡(jiǎn)化了代碼,常用fs對(duì)應(yīng)系數(shù)表如下://表格式:采樣率/10,PLLI2SN,PLLI2SR,I2SDIV,ODDconstu16I2S_PSC_TBL[][5]={{800,256,5,12,1}, //8Khz采樣率{1102,429,4,19,0}, //11.025Khz采樣率{1600,213,2,13,0}, //16Khz采樣率{2205,429,4,9,1}, //22.05Khz采樣率{3200,213,2,6,1}, //32Khz采樣率{4410,271,2,6,0}, //44.1Khz采樣率{4800,258,3,3,1}, //48Khz采樣率{8820,316,2,3,1}, //88.2Khz采樣率{9600,344,2,3,1}, //96Khz采樣率{17640,361,2,2,0}, //176.4Khz采樣率{19200,393,2,2,0}, //192Khz采樣率};淘寶店鋪:技術(shù)論壇SPI_I2S配置寄存器(SPI_I2SCFGR)2、I2S簡(jiǎn)介&硬件連接-F4的I2S寄存器I2SMOD位,設(shè)置為1,選擇I2S模式,注意,必須在I2S/SPI禁止的時(shí)候,設(shè)置該位。I2SE位,設(shè)置為1,使能I2S外設(shè),該位必須在I2SMOD位設(shè)置之后再設(shè)置。I2SCFG[1:0]位,這兩個(gè)位用于配置I2S模式,設(shè)置為10,選擇主模式(發(fā)送)。I2SSTD[1:0]位,這兩個(gè)位用于選擇I2S標(biāo)準(zhǔn),設(shè)置為00,選擇飛利浦標(biāo)準(zhǔn)。CKPOL位,用于設(shè)置空閑時(shí)時(shí)鐘電平,設(shè)置為0,空閑時(shí)時(shí)鐘低電平。DATLEN[1:0]位,用于設(shè)置數(shù)據(jù)長(zhǎng)度,00,表示16位數(shù)據(jù);01表示24位數(shù)據(jù)。CHLEN位,用于設(shè)置通道長(zhǎng)度,即幀長(zhǎng)度,0,表示16位;1,表示32位。淘寶店鋪:技術(shù)論壇SPI_I2S預(yù)分頻器寄存器(SPI_I2SSPR)2、I2S簡(jiǎn)介&硬件連接-F4的I2S寄存器本例程我們?cè)O(shè)置MCKOE為1,開(kāi)啟MCK輸出,ODD和I2SDIV則根據(jù)不同的fs,查表進(jìn)行設(shè)置。淘寶店鋪:技術(shù)論壇PLLI2S配置寄存器(RCC_PLLI2SCFGR)2、I2S簡(jiǎn)介&硬件連接-F4的I2S寄存器該寄存器用于配置PLLI2SR和PLLI2SN兩個(gè)系數(shù),PLLI2SR的取值范圍是:2~7,PLLI2SN的取值范圍是:192~432。同樣,這兩個(gè)也是根據(jù)fs的值來(lái)設(shè)置的。此外,還要用到SPI_CR2寄存器的bit1位,設(shè)置I2STXDMA數(shù)據(jù)傳輸,SPI_DR寄存器用于傳輸數(shù)據(jù),本例程用DMA來(lái)傳輸,所以設(shè)置DMA的外設(shè)地址為SPI_DR即可。這兩個(gè)寄存器的介紹,請(qǐng)參考:《STM32F4xx中文參考手冊(cè).pdf》。淘寶店鋪:技術(shù)論壇1)初始化WM8978這個(gè)過(guò)程就是配置第一講介紹的WM8978那十幾個(gè)寄存器,包括軟復(fù)位、DAC設(shè)置、輸出設(shè)置和音量設(shè)置等。2)初始化I2S
此過(guò)程主要設(shè)置SPI_I2SCFGR寄存器,設(shè)置I2S模式、I2S標(biāo)準(zhǔn)、時(shí)鐘空閑電平和數(shù)據(jù)幀長(zhǎng)等,最后開(kāi)啟I2STXDMA,使能I2S外設(shè)。3)解析WAV文件,獲取音頻信號(hào)采樣率和位數(shù)并設(shè)置I2S時(shí)鐘分頻器解析WAV文件,取得音頻信號(hào)的采樣率(fs)和位數(shù)(16位或24位),根據(jù)這兩個(gè)參數(shù),來(lái)設(shè)置I2S的時(shí)鐘分頻,我們用前面介紹的查表法來(lái)設(shè)置。4)設(shè)置DMAI2S播放音頻,一般采用DMA來(lái)傳輸數(shù)據(jù),這里我們用I2S2,其TX用DMA1數(shù)據(jù)流4的通道0來(lái)傳輸數(shù)據(jù)。并且,STM32F4的DMA具有雙緩沖機(jī)制,這樣可以提高效率。這里,我們將DMA1數(shù)據(jù)流4設(shè)置為:雙緩沖循環(huán)模式,外設(shè)和存儲(chǔ)器都是16位寬,并開(kāi)啟DMA傳輸完成中斷(方便填充數(shù)據(jù))。2、I2S簡(jiǎn)介&硬件連接-初始化步驟-1淘寶店鋪:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)公園車位租賃與休閑娛樂(lè)服務(wù)協(xié)議4篇
- 2025年度藝術(shù)品代理合同終止及展覽策劃協(xié)議4篇
- 二零二五版跨行業(yè)企業(yè)戰(zhàn)略合作保密及數(shù)據(jù)共享協(xié)議3篇
- 離婚2025年度子女監(jiān)護(hù)權(quán)變更合同3篇
- 2025年農(nóng)業(yè)大棚租賃與農(nóng)產(chǎn)品質(zhì)量安全檢測(cè)服務(wù)協(xié)議4篇
- 2025年度園林景觀蟲(chóng)害防治與植物保護(hù)合同4篇
- 家庭中醫(yī)急救技能普及工作匯報(bào)
- 現(xiàn)代家庭教育的新篇章-從理論到操作的全面解讀與實(shí)踐探索
- 探索創(chuàng)新型康復(fù)治療在醫(yī)療教育中的價(jià)值
- 科技小能手的培養(yǎng)計(jì)劃觀察與思考的融合
- 三級(jí)人工智能訓(xùn)練師(高級(jí))職業(yè)技能等級(jí)認(rèn)定考試題及答案
- 華為全屋智能試題
- 第三單元名著導(dǎo)讀《經(jīng)典常談》知識(shí)清單 統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 焊接機(jī)器人在汽車制造中應(yīng)用案例分析報(bào)告
- 合成生物學(xué)在生物技術(shù)中的應(yīng)用
- 中醫(yī)門診病歷
- 廣西華銀鋁業(yè)財(cái)務(wù)分析報(bào)告
- 無(wú)違法犯罪記錄證明申請(qǐng)表(個(gè)人)
- 大學(xué)生勞動(dòng)教育PPT完整全套教學(xué)課件
- 繼電保護(hù)原理應(yīng)用及配置課件
評(píng)論
0/150
提交評(píng)論