亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vs10xx.c

?? STM32不完全手冊 例程源碼 29個
?? C
字號:
#include "vs10XX.h"	
#include "delay.h"
#include "mmc_sd.h"
#include "spi.h"
#include "usart.h"
	
#include "spec_rew.h"
 
//VS10XX的全功能函數
//支持SIN測試和RAM測試
//并加入了VS10XX的頻譜顯示代碼,不過說實話不咋地,還不如自己寫的頻譜分析,懷疑是不是真實的頻譜變換?  
//正點原子@SCUT
//V1.1

//VS10XX設置參數
//0,高音控制;1,最低頻限;2,低音控制;3,最低頻限
//0,henh.1,hfreq.2,lenh.3,lfreq 5,主音量
u8 VS10XXram[5]={0,0,0,0,250};
 	 	  
//軟復位VS10XX
void VS_Soft_Reset(void)
{	 
	u8 retry;  				   
	while(VS_DQ==0);//等待軟件復位結束
	SPIx_ReadWriteByte(0Xff);//啟動傳輸
	retry=0;
	while(VS_RD_Reg(SPI_MODE)!=0x0800)// 軟件復位,新模式  
	{
		VS_WR_Cmd(SPI_MODE,0x0804);// 軟件復位,新模式	    
		delay_ms(2);//等待至少1.35ms 
		if(retry++>100)break; 	    
	}	 				  
	while(VS_DQ==0);//等待軟件復位結束	 

	retry=0;
	while(VS_RD_Reg(SPI_CLOCKF)!=0X9800)//設置VS10XX的時鐘,3倍頻 ,1.5xADD 
	{
		VS_WR_Cmd(SPI_CLOCKF,0X9800);//設置VS10XX的時鐘,3倍頻 ,1.5xADD
		if(retry++>100)break; 	    
	}		    			
//	while(VS_RD_Reg(SPI_AUDATA)!=0XBB81)//設置VS10XX的時鐘,3倍頻 ,1.5xADD 
//	{
//		VS_WR_Cmd(SPI_AUDATA,0XBB81);
//		if(retry++>100)break; 
//	}  
	//VS_WR_Cmd(SPI_CLOCKF,0X9800); 	    
	//VS_WR_Cmd(SPI_AUDATA,0XBB81); //采樣率48k,立體聲	     
    //向VS10XX發送4個字節無效數據,用以啟動SPI發送
    VS_XDCS=0;//選中數據傳輸
	SPIx_ReadWriteByte(0XFF);
	SPIx_ReadWriteByte(0XFF);
	SPIx_ReadWriteByte(0XFF);
	SPIx_ReadWriteByte(0XFF);
	VS_XDCS=1;//取消數據傳輸
	delay_ms(20);
} 
//硬復位MP3
//返回1:復位失敗
//返回0:復位成功
u8 VS_HD_Reset(void)
{
	u8 retry=0;
	VS_RST=0;
	delay_ms(20);
	VS_XDCS=1;//取消數據傳輸
	VS_XCS=1;//取消數據傳輸
	VS_RST=1;	   
	while(VS_DQ==0&&retry<200)//等待DREQ為高
	{
		retry++;
		delay_us(50);
	};
	delay_ms(20);	
	if(retry>=200)return 1;
	else return 0;	    		 
}
//正弦測試 
void VS_Sine_Test(void)
{											    
	VS_HD_Reset();	 
	VS_WR_Cmd(0x0b,0X2020);	  //設置音量	 
 	VS_WR_Cmd(SPI_MODE,0x0820);//進入VS10XX的測試模式     
	while(VS_DQ== 0);     //等待DREQ為高
	//printf("mode sin:%x\n",VS_RD_Reg(SPI_MODE));
 	//向VS10XX發送正弦測試命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
 	//其中n = 0x24, 設定VS10XX所產生的正弦波的頻率值,具體計算方法見VS10XX的datasheet
  	SPIx_SetSpeed(SPI_SPEED_64);//低速 
	VS_XDCS=0;//選中數據傳輸
	SPIx_ReadWriteByte(0x53);
	SPIx_ReadWriteByte(0xef);
	SPIx_ReadWriteByte(0x6e);
	SPIx_ReadWriteByte(0x24);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	delay_ms(100);
	VS_XDCS=1; 
    //退出正弦測試
    VS_XDCS=0;//選中數據傳輸
	SPIx_ReadWriteByte(0x45);
	SPIx_ReadWriteByte(0x78);
	SPIx_ReadWriteByte(0x69);
	SPIx_ReadWriteByte(0x74);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	delay_ms(100);
	VS_XDCS=1;		 

    //再次進入正弦測試并設置n值為0x44,即將正弦波的頻率設置為另外的值
    VS_XDCS=0;//選中數據傳輸      
	SPIx_ReadWriteByte(0x53);
	SPIx_ReadWriteByte(0xef);
	SPIx_ReadWriteByte(0x6e);
	SPIx_ReadWriteByte(0x44);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	delay_ms(100);
	VS_XDCS=1;
    //退出正弦測試
    VS_XDCS=0;//選中數據傳輸
	SPIx_ReadWriteByte(0x45);
	SPIx_ReadWriteByte(0x78);
	SPIx_ReadWriteByte(0x69);
	SPIx_ReadWriteByte(0x74);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	delay_ms(100);
	VS_XDCS=1;	 
}	 
//ram 測試 																				 
void VS_Ram_Test(void)
{
 	u16 regvalue ;	   
	VS_HD_Reset();     
 	VS_WR_Cmd(SPI_MODE,0x0820);// 進入VS10XX的測試模式
	while (VS_DQ==0); // 等待DREQ為高			   
 	SPIx_SetSpeed(SPI_SPEED_64);//低速 
	VS_XDCS=0;	       		    // xDCS = 1,選擇VS10XX的數據接口
	SPIx_ReadWriteByte(0x4d);
	SPIx_ReadWriteByte(0xea);
	SPIx_ReadWriteByte(0x6d);
	SPIx_ReadWriteByte(0x54);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	SPIx_ReadWriteByte(0x00);
	delay_ms(50);  
	VS_XDCS=1;
	regvalue=VS_RD_Reg(SPI_HDAT0); // 如果得到的值為0x807F,則表明完好。
	printf("regvalueH:%x\n",regvalue);//輸出結果 	   
}     					   
//向VS10XX寫命令
//address:命令地址
//data:命令數據
void VS_WR_Cmd(u8 address,u16 data)
{  
    while(VS_DQ==0);//等待空閑
	SPIx_SetSpeed(SPI_SPEED_64);//低速 

	VS_XDCS=1; //MP3_DATA_CS=1;
	VS_XCS=0; //MP3_CMD_CS=0; 
	
	SPIx_ReadWriteByte(VS_WRITE_COMMAND);//發送VS10XX的寫命令
	SPIx_ReadWriteByte(address); //地址
	SPIx_ReadWriteByte(data>>8); //發送高八位
	SPIx_ReadWriteByte(data);	 //第八位
	VS_XCS=1;          //MP3_CMD_CS=1; 
	SPIx_SetSpeed(SPI_SPEED_8);//高速	   
} 
//向VS10XX寫數據
void VS_WR_Data(u8 data)
{
	SPIx_SetSpeed(SPI_SPEED_8);//高速,對VS1003B,最大值不能超過36.864/4Mhz,這里設置為9M 
	VS_XDCS=0;   //MP3_DATA_CS=0;
	SPIx_ReadWriteByte(data);
	VS_XDCS=1;   //MP3_DATA_CS=1;   
}         
//讀VS10XX的寄存器           
//讀VS10XX
//注意不要用倍速讀取,會出錯
u16 VS_RD_Reg(u8 address)
{ 
	u16 temp=0; 
    while(VS_DQ==0);//非等待空閑狀態 
	SPIx_SetSpeed(SPI_SPEED_64);//低速 
	VS_XDCS=1;       //MP3_DATA_CS=1;
	VS_XCS=0;        //MP3_CMD_CS=0;
	SPIx_ReadWriteByte(VS_READ_COMMAND);//發送VS10XX的讀命令
	SPIx_ReadWriteByte(address);        //地址
	temp=SPIx_ReadWriteByte(0xff);		//讀取高字節
	temp=temp<<8;
	temp+=SPIx_ReadWriteByte(0xff); 	//讀取低字節
	VS_XCS=1;      //MP3_CMD_CS=1; 
	SPIx_SetSpeed(SPI_SPEED_8);//高速
    return temp; 
}  
//FOR WAV HEAD0 :0X7761 HEAD1:0X7665    
//FOR MIDI HEAD0 :other info HEAD1:0X4D54
//FOR WMA HEAD0 :data speed HEAD1:0X574D
//FOR MP3 HEAD0 :data speed HEAD1:ID
//比特率預定值
const u16 bitrate[2][16]=
{ 
{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0}, 
{0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}
};
//返回Kbps的大小
//得到mp3&wma的波特率
u16 GetHeadInfo(void)
{
	unsigned int HEAD0;
	unsigned int HEAD1;            
    HEAD0=VS_RD_Reg(SPI_HDAT0); 
    HEAD1=VS_RD_Reg(SPI_HDAT1);
	//printf("(H0,H1):%x,%x\n",HEAD0,HEAD1);
    switch(HEAD1)
    {        
        case 0x7665:return 0;//WAV格式
        case 0X4D54:return 1;//MIDI格式 
        case 0X574D://WMA格式
        {
            HEAD1=HEAD0*2/25;
            if((HEAD1%10)>5)return HEAD1/10+1;
            else return HEAD1/10;
        }
        default://MP3格式
        {
            HEAD1>>=3;
            HEAD1=HEAD1&0x03; 
            if(HEAD1==3)HEAD1=1;
            else HEAD1=0;
            return bitrate[HEAD1][HEAD0>>12];
        }
    } 
}  
//重設解碼時間                          
void ResetDecodeTime(void)
{
	VS_WR_Cmd(SPI_DECODE_TIME,0x0000);
	VS_WR_Cmd(SPI_DECODE_TIME,0x0000);//操作兩次
}
//得到mp3的播放時間n sec
u16 GetDecodeTime(void)
{ 
    return VS_RD_Reg(SPI_DECODE_TIME);   
} 
//加載頻譜分析的代碼到VS10XX
void LoadPatch(void)
{
	u16 i;
	for (i=0;i<943;i++)VS_WR_Cmd(atab[i],dtab[i]); 
	delay_ms(10);
}
//得到頻譜數據
void GetSpec(u8 *p)
{
	u8 byteIndex=0;
	u8 temp;
	VS_WR_Cmd(SPI_WRAMADDR,0x1804);                                                                                             
	for (byteIndex=0;byteIndex<14;byteIndex++) 
	{                                                                               
		temp=VS_RD_Reg(SPI_WRAM)&0x63;//取小于100的數    
		*p++=temp;
	} 
}	   	  
//設定VS10XX播放的音量和高低音 
void set1003(void)
{
    u8 t;
    u16 bass=0; //暫存音調寄存器值
    u16 volt=0; //暫存音量值
    u8 vset=0;  //暫存音量值 	 
    vset=255-VS10XXram[4];//取反一下,得到最大值,表示最大的表示 
    volt=vset;
    volt<<=8;
    volt+=vset;//得到音量設置后大小
     //0,henh.1,hfreq.2,lenh.3,lfreq        
    for(t=0;t<4;t++)
    {
        bass<<=4;
        bass+=VS10XXram[t]; 
    }     
	VS_WR_Cmd(SPI_BASS,bass);//BASS   
    VS_WR_Cmd(SPI_VOL,volt); //設音量 
}    

//初始化VS10XX的IO口	 
void VS_Init(void)
{
	RCC->APB2ENR|=1<<2;       //PORTA時鐘使能 
	  
	GPIOA->CRL&=0XFFF0FFFF;//PA4 XDCS
	GPIOA->CRL|=0X00030000; 
	GPIOA->CRH&=0XFFF00FF0;//PA8 XCS;PA11 DQ;PA12 RST
	GPIOA->CRH|=0X00083003; 	 
	GPIOA->ODR|=(1<<4)|(1<<8)|(1<<11)|(1<<12);//PA4,8,11,12上拉   				  	 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久久久久久久久久 | 成人午夜电影久久影院| 91在线码无精品| 欧美电视剧免费全集观看| 日韩理论片在线| 成人少妇影院yyyy| 欧美日韩精品一区二区三区四区| www日韩大片| 亚洲成a人在线观看| 成人av电影在线播放| 欧美大片日本大片免费观看| 亚洲成av人在线观看| 色综合中文字幕国产 | av在线这里只有精品| 久久一夜天堂av一区二区三区| 视频一区在线视频| 欧洲在线/亚洲| 亚洲黄色免费网站| 波多野结衣一区二区三区| 久久美女艺术照精彩视频福利播放| 午夜视频一区在线观看| 欧美在线不卡视频| 一区二区三区日韩欧美精品 | 在线看日韩精品电影| 中文字幕一区二区5566日韩| 国产a级毛片一区| 国产亚洲一区二区三区在线观看| 裸体健美xxxx欧美裸体表演| 制服丝袜亚洲播放| 日韩和的一区二区| 91精品国产色综合久久| 日韩精品1区2区3区| 在线播放91灌醉迷j高跟美女| 亚洲自拍偷拍网站| 911精品国产一区二区在线| 首页国产欧美久久| 欧美一区欧美二区| 久久国产精品99久久久久久老狼 | 欧美日韩国产bt| 婷婷一区二区三区| 欧美高清dvd| 黄色精品一二区| 亚洲国产精品高清| 色婷婷激情综合| 午夜精品123| 欧美sm美女调教| 成人一区二区在线观看| 最新不卡av在线| 在线观看成人小视频| 日韩av电影一区| 久久久久久夜精品精品免费| k8久久久一区二区三区| 亚洲一区二区三区激情| 欧美成va人片在线观看| 国产a视频精品免费观看| 一区二区三区色| 欧美tickling挠脚心丨vk| 波多野结衣一区二区三区 | 国产aⅴ综合色| 夜夜嗨av一区二区三区中文字幕| 欧美另类一区二区三区| 激情综合网激情| 亚洲乱码国产乱码精品精的特点| 欧美一区日本一区韩国一区| 成人看片黄a免费看在线| 亚洲一区二区欧美| www亚洲一区| 欧美日韩国产乱码电影| 国产成人av福利| 午夜激情综合网| 国产精品亲子乱子伦xxxx裸| 欧美久久久影院| 成人国产免费视频| 免费欧美在线视频| 亚洲三级视频在线观看| 日韩精品一区二区三区在线| 99久久国产免费看| 久久国产精品72免费观看| 亚洲精品中文字幕在线观看| 久久综合九色综合欧美亚洲| 欧美乱熟臀69xxxxxx| 99国产精品久久久| 国产精品一二三四| 图片区小说区区亚洲影院| 亚洲乱码国产乱码精品精小说| 日韩欧美一区在线| 欧美影院精品一区| av亚洲产国偷v产偷v自拍| 国产精品一区在线| 蜜桃久久久久久久| 亚洲成人激情自拍| 一区二区三区视频在线观看| 国产精品美女一区二区三区| 久久中文娱乐网| 欧美一级片在线观看| 欧美午夜电影网| 色偷偷88欧美精品久久久| 成人一区在线观看| 成人午夜视频福利| 国产资源在线一区| 久久精品国产99国产| 日韩精品欧美精品| 香蕉成人啪国产精品视频综合网| 亚洲精品国产视频| 亚洲乱码国产乱码精品精的特点| 国产精品福利影院| 国产精品视频九色porn| 国产亚洲一二三区| 久久久精品天堂| 中文av一区二区| 中文字幕不卡在线观看| 国产精品免费丝袜| 亚洲欧美在线高清| 亚洲素人一区二区| 亚洲男女一区二区三区| 一区二区免费在线播放| 亚洲一区二区3| 亚洲一区二区美女| 蜜桃精品视频在线| 国内成+人亚洲+欧美+综合在线| 极品美女销魂一区二区三区免费| 国产一区二区三区香蕉| 国产白丝精品91爽爽久久| 不卡的av在线| 欧美日韩精品一区视频| 日韩一区二区中文字幕| 久久在线观看免费| 国产精品欧美综合在线| 一级日本不卡的影视| 天天av天天翘天天综合网色鬼国产| 日韩vs国产vs欧美| 国产资源精品在线观看| 成人黄色软件下载| 在线国产电影不卡| 日韩精品在线看片z| 国产精品毛片久久久久久久| 亚洲一区二区三区视频在线 | 亚洲小少妇裸体bbw| 日韩高清一区在线| 国产盗摄精品一区二区三区在线| av中文一区二区三区| 欧美视频一区二区三区在线观看 | 国产精品超碰97尤物18| 一区二区三区加勒比av| 免费xxxx性欧美18vr| 国产电影精品久久禁18| 欧美日韩一区二区在线观看| 日韩免费观看高清完整版 | 午夜精彩视频在线观看不卡| 美女被吸乳得到大胸91| 成人午夜电影小说| 欧美一级欧美一级在线播放| 国产精品久久久久久久久久久免费看 | 美国一区二区三区在线播放| 成人午夜电影小说| 欧美一级一级性生活免费录像| 中文字幕 久热精品 视频在线| 亚洲va韩国va欧美va| eeuss鲁片一区二区三区在线看| 欧美美女黄视频| 中文字幕一区不卡| 国产一区二区三区日韩| 在线不卡一区二区| 国产精品白丝在线| 国内不卡的二区三区中文字幕| 欧美日韩综合色| 亚洲色图视频网| 国产老妇另类xxxxx| 7777精品伊人久久久大香线蕉 | 日韩精品一区二区三区视频播放 | 欧洲在线/亚洲| 国产精品欧美综合在线| 色综合久久88色综合天天6| 日韩精品一区国产麻豆| 午夜日韩在线观看| 91丨九色丨蝌蚪丨老版| 久久美女艺术照精彩视频福利播放 | 国产麻豆日韩欧美久久| 91精品国产色综合久久ai换脸| 亚洲精品ww久久久久久p站| 国产iv一区二区三区| 久久亚洲精品国产精品紫薇| 日韩成人dvd| 欧美高清视频一二三区| 亚洲成人在线免费| 色香蕉久久蜜桃| 亚洲人午夜精品天堂一二香蕉| 成人性色生活片| 亚洲国产精品激情在线观看 | 久久97超碰色| 91精品一区二区三区在线观看| 亚洲午夜激情av| 欧美性猛交xxxx乱大交退制版| 亚洲男女毛片无遮挡| 97se亚洲国产综合自在线不卡| 亚洲日本中文字幕区| 91欧美激情一区二区三区成人| 国产精品传媒视频| jlzzjlzz欧美大全| 一区二区三区毛片|