欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
單片機實(shí)現MP3播放的方法
有一個(gè)東西你一定聽(tīng)說(shuō)過(guò)或用過(guò),那就MP3播放器。MP3播放器以其小巧的體積、強大的功能、優(yōu)異的音質(zhì)倍受人們的青睞。如果把它嵌入到我們的單片機系統中,實(shí)現音頻輸出,那么對系統的增色是不言而喻的。單獨拿單片機來(lái)說(shuō),要解碼MP3文件,是不可能的,因為從處理速度和資源各個(gè)方面都是不能滿(mǎn)足要求的。所以要依賴(lài)于專(zhuān)用MP3解碼芯片,而單片機要作的就是對其進(jìn)行控制。這里我們圍繞芬蘭VLSI公司出品的VS1003來(lái)進(jìn)行解MP3的實(shí)現方法。
1、VS1003芯片
1)芯片簡(jiǎn)介
VS1003是由荷蘭VLSI公司出品的一款單芯片的MP3/WMA/MIDI音頻解碼和ADPCM編碼芯片,其擁有一個(gè)高性能低功耗的DSP處理器核VS_DSP,5K的指令RAM,0.5K的數據RAM,串行的控制和數據輸入接口, 4個(gè)通用IO口,一個(gè)UART口;同時(shí)片內帶有一個(gè)可變采樣率的ADC、一個(gè)立體聲DAC以及音頻耳機放大器。
VS1003通過(guò)一個(gè)串行接口來(lái)接收輸入的比特流,它可以作為一個(gè)系統的從機。輸入的比特流被解碼,然后通過(guò)一個(gè)數字竟是控制器到達一個(gè)18位過(guò)采樣多位ε-ΔDAC。通過(guò)串行總線(xiàn)控制解碼器。除了基本的解碼,在用戶(hù)RAM中它還可以做其他特殊應用,例如DSP音效處理。
2)芯片實(shí)物與SiriuS板上的VS1003
3)芯片封裝
以下的講述都是針對于LQFP-48封裝的。
4)VS1003特性
1.能解碼MPEG1 與MPEG2音頻層III(CBR+VBR+ABR);WMA 4.0/4.1/7/8/9 5~384kbps所有流文件;WAV(PCM+IMA AD-PCM);產(chǎn)生MIDI/SP-MIDI文件。
2.對話(huà)筒輸入或線(xiàn)路輸入的音頻信號進(jìn)行IMA ADPCMM編碼
3.支持MP3和WAVV流
4.高低音控制
5.單時(shí)鐘12~13MHz
6.內部PLLL鎖相環(huán)時(shí)鐘倍頻器
7.低功耗
8.內含高性能片上立體聲數模轉換器,兩聲道間無(wú)相位差
9.內含能驅動(dòng)30歐負載的耳機驅動(dòng)器
10.模擬,數字,I/O單獨供電
11.為用戶(hù)代碼和數據準備的5.5KB片上RAM
12.串行的控制/數據接口
13.可被用作微處理器的從機
14.特殊應用的SPI Flash引導
15.借高度用途的UART接口
16.新功能可以通過(guò)軟件和4 GPIO添加
5)VS1003的引腳定義
管腳名稱(chēng)
LQFP-48
管腳類(lèi)型
管腳功能
MICP
1
AI
同相差分話(huà)筒輸入,自偏壓
MICN
2
AI
反相差分話(huà)筒輸入,自偏壓
XRESET
3
DI
低電平有效,異步復位端
DGND0
4
DGND
處理器核與I/O地
CVDD0
5
CPWR
處理器核電源
IOVDD0
6
IOPWR
I/O電源
CVDD1
7
CPEW
處理器核電源
DREQ
8
DO
數據請求,輸入總線(xiàn)
GPIO/DCLK
9
DIO
通用I/O2 /串行數據總線(xiàn)時(shí)鐘
GPIO3/SDATA
10
DIO
通用I/O3 /串行數據總線(xiàn)數據
XDCS/BSYNC
13
DI
數據片選端/字節同步
IOVDD1
14
IOPWR
I/O 電源
VCO
15
DO
時(shí)鐘壓控振蕩器VCO 輸出
DGND1
16
DGND
處理器核與I/O 的地
XTALO
17
AO
晶振輸出
XTALI
18
AI
晶振輸入
IOVDD2
19
IOPWR
I/O 電源
DGND2
20
DGND
處理器核與I/O 地
DGND3
21
DGND
處理器核與I/O 地
DGND4
22
DGND
處理器核與I/O 地
XCS
23
DI
片選輸入,低電平有效
CVDD2
24
CPWR
處理器核電源
RX
26
DI
UART接收口,不用時(shí)接IOVDD
TX
27
DO
UART發(fā)送口
SCLK
28
DI
串行總線(xiàn)的時(shí)鐘
SI
29
DI
串行輸入
SO
30
DO3
串行輸出
CVDD3
31
CPWR
處理器核電源
TEST
32
DI
保留做測試,連接至IOVDD
GPIO0/SPIBOOT
33
DIO
通用I/O0 /SPIBOOT,使用100K 下拉電阻
GPIO1
34
DIO
通用I/O1
AGND0
37
APWR
模擬地,低噪聲參考地
AVDD0
38
APWR
模擬電源
RIGHT
39
AO
右聲道輸出
AGND1
40
APWR
模擬地
AGND2
41
APWR
模擬地
GBUF
42
AO
公共地緩沖器
AVDD1
43
APWR
模擬電源
RCAP
44
AIO
基準濾波電容
AVDD2
45
APWR
模擬電源
LEFT
46
AO
左聲道輸出
AGND3
47
APWR
模擬地
LINE IN
48
AI
線(xiàn)路輸入
6)VS1003的功能寄存器
VS1003共有16個(gè)16位的寄存器,地址分別為0X0~0XF;除了模式寄存器(MODE,0X0)和狀態(tài)寄存器(STATUS,0X1)在復位后的初始值分別為0X800和OX3C外,其余的寄存器在VS1003初始化后的值均為0。下面將VS1003各寄存器逐一進(jìn)行介紹。
1.MODE(地址:0X0 可讀寫(xiě))
bit0:SM_DIFF
SM_DIFF=0  正常音頻相位
SM_DIFF=1  左聲道反轉
當SM_DIFF置位時(shí),VS1003將左聲道反相輸出,立體聲輸入將產(chǎn)生環(huán)繞效果,對于單聲道輸入將產(chǎn)生差分(反相)左/右聲道信號。
bit1:SM_SETTOZERO
置零。
bit2:SM_RESET
SM_RESET=1,VS1003軟復位。軟復位之后該位會(huì )自動(dòng)清零。
bit3:SM_OUTOFWAV
SM_OUTOFWAV=1,停止WAV解碼。
當你要中途停止WAV、WMA或者M(jìn)IDI文件的解碼時(shí),置位SM_OUTOFWAV,并向VS1003持續發(fā)送數據(對于WAV文件發(fā)送0)直到將SM_OUTOFWAV清零;同時(shí)SCI_HIDAT1也將被清零。
bit4:SM_PDOWN
SM_PDOWN=1,軟件省電模式,該模式不及硬件省電模式(可由VS1003的XRESET來(lái)激活)。
bit5:SM_TESTS
SM_TESTS=1,進(jìn)入SDI測試模式。
bit6:SM_STREAM
SM_STREAM=1,使能VS1003的流模式。
bit7:SM_PLUSV
SM_PLUSV=1,MP3+V解碼使能。
bit8:SM_DACT
SM_DACT=0,SCLK上升沿有效;SM_DACT=1,SCLK下降沿有效。
bit9:SM_SDIORD
SM_SDIORD=0,SDI總線(xiàn)字節數據MSB在前,即須先發(fā)送MSB;
SM_SDIORD=1,SDI總線(xiàn)字節數據LSB在前,即須先發(fā)送LSB;
該位的設置不會(huì )影響SCI總線(xiàn)。
bit10:SM_SDISHARE
SM_SDISHARE=1,SDI與SCI將共用一個(gè)片選信號(同時(shí)SM_SDINEW=1),即將XDCS與XCS這兩根信號線(xiàn)合為一條,能省去一個(gè)IO口。
bit11:SM_SDINEW
SM_SDINEW=1,VS1002本地模式(新模式)。VS1003在啟動(dòng)后默認進(jìn)入該模式。(這里所說(shuō)的模式指的是總線(xiàn)模式。)
bit12:SM_ADPCM
SM_ADPCM=1,ADPCM錄音使能。
同時(shí)置位SM_ADPCM和SM_RESET將使能VS1003的IMA ADPCM錄音功能。
bit13:SM_ADPCM_HP
SM_ADPCOM_HP=1,使能ADPCM高通濾波器。同時(shí)置位SM_ADPCM_HP、SM_ADPCM和SM_RESET將開(kāi)啟ADPCM錄音用高通濾波器,對錄音時(shí)的背景噪音有一定的抑制作用。
bit14:SM_LINE_IN
錄音輸入選擇,SMLINE_IN=1,選擇線(xiàn)入(line in);SM_LINE_IN=0,選擇麥克風(fēng)輸入(默認)。
2.SCI_STATUS(地址:0X1 可讀寫(xiě))
SCI_STATUS為VS1003的狀態(tài)寄存器,提供VS1003當前狀態(tài)信息。
3.SCI_BASS(地址:0X2 可讀寫(xiě))
重音/高音設置寄存器。
VS1003的內置的重音增強器VSBE是種高質(zhì)量的重音增強DSP算法,能夠最大限度的避免音頻削波。當SB_AMPLITUDE(bit:7~4)不為零時(shí),重音增強器將使能??梢愿鶕€(gè)人需要來(lái)設置SB_AMPLITUDE。例如,SCI_BASS=0x00f6,即對60Hz以下的音頻信號進(jìn)行15dB的增強。當ST_AMPLITUDE(bit:15~12)不為零時(shí),高音增強將使能。例如,SCI_BASS=0x7a00,即10kHz以上的音頻信號進(jìn)行10.5dB的增強。
4.SCI_CLOCKF(地址:0X3 可讀寫(xiě))
bit15~bit13:SC_MULT
時(shí)鐘輸入XTALI的倍頻設置,設置之后將啟動(dòng)VS1003內置的倍頻器。
bit12~bit11:SC_ADD
用于在WMA流解碼時(shí)給倍頻器增加的額外的倍頻值。
bit10~bit0:SC_FREQ
當XTALI輸入的時(shí)鐘不是12.288M時(shí)才需要設置該位段,其默認值為0,即VS1003默認使用的是12.228M的輸入時(shí)鐘。
5.SCI_DECODE_TIME(地址:0X4 可讀寫(xiě))
解碼時(shí)間寄存器。當進(jìn)行正確的解碼時(shí),讀取該寄存器可以獲得當前的解碼時(shí)長(cháng)(單位為秒)??梢愿脑摷拇嫫鞯闹?,但是新值須要對該寄存器進(jìn)行兩次寫(xiě)操作。在每次軟件復位或是WAV(PCM、IMA ADPCM、WMA、MIDI)解碼開(kāi)始與結束時(shí)SCI_DECODE_TIME的值將清零。
6.SCI_AUDATA(地址:0X5 可讀寫(xiě))
當進(jìn)行正確的解碼時(shí),該寄存器的值為當前的采樣率(bit:15~bit1)和所使用的聲道(bit0)。采樣率須為2的倍數;bit0=0,單聲道數據,bit0=1,立體聲數據。寫(xiě)該寄存器半直接改變采樣率。
7.SCI_WRAM(地址:0X6 可讀寫(xiě))
讀寄存器用來(lái)加載用戶(hù)應用程序和數據到VS1003的指令的數據RAM中。起始地址在SCI_WRAMADDR中進(jìn)行設置,且必須先于讀寫(xiě)SCI_WRAM。對于16位的數據可以在進(jìn)行一次SCI_WRAM的讀寫(xiě)中完成;而對32位的指令字來(lái)說(shuō)則需要兩次連續讀寫(xiě)。字節順序是大端模式,即高字節在前,低字節在后。在每一次完成全字讀寫(xiě)后,內部指針將自動(dòng)增加。
8. SCI_WRAMADDR(地址:0X7 可讀寫(xiě))
用于設置RAM讀寫(xiě)的首地址。
9.SPI_HDAT0gng SPI_HDAT1(地址:0X8 只讀)
這兩個(gè)寄存器用來(lái)存放所解碼的音頻文件的相關(guān)信息,為只讀寄存器。
當為WAV文件時(shí),SPI_HDAT0=0X7761,SPI_HDAT1=0X7665;
當為WMA文件時(shí),SPI_HDAT0的值為解碼速率(字節/秒),要轉換為位率的話(huà)則將SPI_HDAT0的值乘8即可,SPI_HDAT1=0X574D;
當為MIDI文件時(shí),SPI_HDAT0的值可以參考VLSI的技術(shù)文檔第33頁(yè),SPI_HDAT1=0X4D54;
當為MP3文件時(shí),SPI_HDAT0和SPI_HDAT1包含較為復雜的信息(來(lái)自于解壓之后的MP3文件頭),包括當前正在    解碼的MP3文件的采樣率、位率等,具體請參考數據手冊的第33頁(yè)到第34頁(yè)。復位后SPI_HDAT0和SPI_HDAT1將清零。
10.SCI_AIADDR(地址:0XA 可讀寫(xiě))
用戶(hù)應用程序的起始地址,初始化先于SCI_WRAMADDR和SCI_WRAM。如果沒(méi)有使用任何用戶(hù)應用程序,則該寄存器不應進(jìn)行初始化,或是將其初始化為零。
11.SCI_VOL(地址:0XB 可讀寫(xiě))
音量控制寄存器。高八位用于設置左聲道,低八位用于設置右聲道。設置值為最大竟是的衰減倍數,步進(jìn)值為0.5dB,范圍為0到255.最大竟是的設置值為0x0000,而靜音為0xffff。例如,左聲道:-2.0dB,右聲道:-3.5dB,則SCI_VOL=(4X256)+7=0x0407。硬件復位將使SCI_VOL清零(最大音量),而軟件復位將不改變音量設置值。
(設置靜音(SCI_COL=0XFFFF)將關(guān)閉模擬部分的供電。)
12.SCI_AICTRL[X](地址:0XC~0XF 可讀寫(xiě))
用于訪(fǎng)問(wèn)用戶(hù)應用程序。
7)VS1003有應用電路
2、VS1003的驅動(dòng)方法
這里就來(lái)介紹單片片對VS1003的控制方法,最終實(shí)現MP3播放。
1)準備工作
在對VS1003進(jìn)行驅動(dòng)之前,我們需要確保以下幾點(diǎn)已經(jīng)沒(méi)問(wèn)題,否則后面的工作都將是沒(méi)有意義的。
1.VS1003各部分的供電電壓與輸出電壓值是不同的。
供電部分
最小電壓
推薦電壓
最大電壓
AVDD(模擬部分)
2.5V
2.8V
3.6V
CVDD(數字部分,內核)
2.4V
2.5V
2.7V
IOVDD(I/O電壓)
CVDD-0.6V
2.8V
3.6V
2.VS1003與單片機正確可靠連接。
VS1003與單片機連接的引腳主要有7個(gè),分別為 SO、SI、SCLK、/XCS、/XRESET、DREQ、/XDCS。只有保證它們與單片機正確可靠的連接,才能對VS1003進(jìn)行有效的操作與控制。
2)寫(xiě)命令操作
要控制VS1003首先要實(shí)現的就是寫(xiě)命令,這是控制是否成功的前提。關(guān)于通信接口部分,是一種同步串行接口方式(SPI從機模式),它要求SCLK信號必須由外部電路產(chǎn)生,數據(SDATA)在SCLK的上升沿或下降沿時(shí)被寫(xiě)入。在筆者的實(shí)驗中,采用的是軟件模擬SPI,讀者也可以選用帶有硬件SPI的單片機(如STC12系列、AVR系列等),驅動(dòng)效果會(huì )更好。寫(xiě)命令的過(guò)程如下:
1.等待DREQ為高(當DREQ為低時(shí),說(shuō)明芯片還沒(méi)有就緒)
2.將XCS(命令片選)拉低
3.寫(xiě)入0x02
4.寫(xiě)入寄存器地址
5.分別寫(xiě)入數據的高字節與低字節
6.將XCS置高
實(shí)現代碼如下:
void wr_commad(unsigned char addr,unsigned char hdat,unsigned char ldat )
{
DREQ=1;
while(!DREQ);
XCS=0;
spi_write(0x02);
spi_write(addr);
spi_write(hdat);
spi_write(ldat);
XCS=1;
}
3)VS1003的初始化
如其它芯片一樣,初始化對于VS1003來(lái)說(shuō)同樣是極其重要的。初始化的過(guò)程大致是這樣的:
1.硬件復位:接X(jué)RESET拉低
2.延時(shí),將XDCS、XCS、XRESET置高
3.向MODE中寫(xiě)入0X0804
4.等待DREQ為高
5.設置VS1003的時(shí)鐘:SCI_CLOCKF=0x9800,3倍頻
6.設置VS1003的采樣率:SPI_AUDATA=0xbb81,采樣率48k,立體聲
7.設置重音:SPI_BASS=0x0055
8.設置音量:SCI_VOL=0x2020
9.這一步被很多人忽視,向VS1003發(fā)送4個(gè)字節的無(wú)效數據,用以啟動(dòng)SPI發(fā)送
實(shí)現代碼如下:
void Mp3Reset(void)
{
XRESET=0;
delay(100);
XDCS=XCS=XRESET=1;
wr_commad(0x00,0x08,0x04);
delay(10);
DREQ=1;
while(!DREQ);
wr_commad(0x03,0x98,0x00);
delay(10);
wr_commad(0x05,0xbb,0x81);
delay(10);
wr_commad(0x02,0x00,0x55);
delay(10);
wr_commad(0x0b,VOL_VALUE,VOL_VALUE);   // 音量
delay(10);
spi_write(0);
spi_write(0);
spi_write(0);
spi_write(0);
}
在進(jìn)行了正確的初始化后,還要著(zhù)重檢查一下VS1003的模擬部分是否正常
將VS1003的所有DVDD、AVDD管腳以及XRESET、TEST(第32個(gè)引腳)接+3.0V,然后測量RCAP引腳,它應該是1.3V左右,否則芯片模擬部分未正常工作。
4)正弦測試
在上面的各種操作與檢測沒(méi)有問(wèn)題后,就可以讓VS1003放出聲音了??梢岳肰S1003自帶的正弦測試對音頻輸出進(jìn)行測試。要啟動(dòng)VS1003的正弦測試,需要向其寫(xiě)入正弦測試命令。這里提供啟動(dòng)正弦測試的流程,在真實(shí)的硬件運行通過(guò),最終的效果是在耳機中聽(tīng)到單一頻率的正弦音(頻率可以通過(guò)程序來(lái)更改)。
具體流程如下:
1.進(jìn)入VS1003的測試模式:SPI_MODE=0X0820
2.等待DREQ為高
3.將XDCS接低,而XCS要置高,選擇VS1003的數據接口
4.向VS1003發(fā)送正弦測試命令:0X53 0XEF 0X6E 0X30 0X00 0X00 0X00 0X00
其中0X30為頻率,用戶(hù)可以修改為其它值
5.延時(shí)一段時(shí)間
6.退出正弦測試,發(fā)送命令:0X45 0X78 0X69 0X74 0X00 0X00 0X00 0X00
7.延時(shí)一段時(shí)間
8.循環(huán)以上流程
實(shí)現代碼如下:
void Sintest(unsigned char x)
{
wr_commad(0x00,0x08,0x20);
DREQ=1;
while(!DREQ);
XDCS=0;XCS=1;
spi_write(0x53);
spi_write(0xef);
spi_write(0x6e);
spi_write(x);
spi_write(0);
spi_write(0);
spi_write(0);
spi_write(0);
delay(5000);
spi_write(0x45);
spi_write(0x78);
spi_write(0x69);
spi_write(0x74);
spi_write(0);
spi_write(0);
spi_write(0);
spi_write(0);
delay(5000);
XDCS=1;
}
如果能夠通過(guò)這一步,就說(shuō)明你的VS1003已經(jīng)做好了為你播放MP3的準備了。下面的工作 就是將MP3文件的數據有條不紊地發(fā)給VS003,讓它來(lái)為你完成MP3的解碼和播放任務(wù) 。
5)MP3文件數據寫(xiě)入
以上的對VS1003的初始化與測試都通過(guò)后,現在就可以給它發(fā)送MP3文件了。但是這時(shí)就又出現一個(gè)新的問(wèn)題。MP3文件通常是比較大的,小的也要1M~2M,如果使單片機內部的Flash Rom的話(huà),容量是遠遠不夠的。需要有一種大容量的存儲器來(lái)作為MP3文件的載體。在筆者的調試系統中采用了SD卡(256M)、U盤(pán)(1G)與移動(dòng)硬盤(pán)(40G)來(lái)存儲MP3文件。關(guān)于SD卡與U盤(pán)的讀寫(xiě)方法可以參看相關(guān)章節。這些大容量的存儲設備通常也是按照扇區來(lái)進(jìn)行讀寫(xiě)的,但在實(shí)際的應用中更多的是結合FAT32等文件系統來(lái)進(jìn)行文件讀寫(xiě)。文件系統部分可以參照《FAT32的存儲機制及其在單片機中的實(shí)現》。
這里拋開(kāi)存儲介質(zhì)不談,只談數據的寫(xiě)入方法。其實(shí)寫(xiě)入數據的方法十分簡(jiǎn)單。主要就是看DREQ信號,在VS1003的FIFO能夠接受數據的時(shí)候輸出高電平。每次可以寫(xiě)入32個(gè)字節的數據。而DREQ變低時(shí),單片機就要停止數據的發(fā)送。
具體的寫(xiě)數據的方法如下:
1.將XDCS拉低
2.等待DREQ為高
3.通過(guò)SPI寫(xiě)入數據
4.在文件沒(méi)有結束前不斷重復2與3操作
5.在所有的數據都發(fā)送完畢后,最后發(fā)送2048個(gè)無(wú)效字節,用以清除VS1003的數據緩沖區
6.將XDCS置高
以下是筆者的程序中的寫(xiě)數據部分:
XDCS=0;
for(j=621;j<2783;j++)
{
for(k=0;k<8;k++)
{
MMC_get_data_LBA(j,64,get);
for(i=0;i<64;i++)
{
DREQ=1;
while(!DREQ);
spi_write(get[i]);
//delay(60000);
}
}
}
for(temp=0;temp<2048;temp++)
{
DREQ=1;
while(!DREQ);
spi_write(0);
}
XDCS=1;
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
F28027第十課
vs1003 播放320kbps音頻文件
VS1053的應用
ADXL345基本介紹
LT8900注意事項
NRF24L01 MSP430發(fā)送接收程序
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久