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

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

?? vs1003.c

?? MP3_PLAYER.rar
?? C
字號:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include "vs1003.h"

/* Const define  -------------------------------------------------------------*/
#define RXNE    0x01
#define TXE     0x02
#define BSY     0x80

/*******************************************************************************
* Function Name  : Delay
* Description    : Delay
* Input          : nTime--delay time 
* Output         : None
* Return         : None
*******************************************************************************/
void Delay(u32 nTime)
{
	unsigned int i;
	unsigned long j;
	for(i = nTime;i > 0;i--)
		for(j = 1000;j > 0;j--);	
}

/*******************************************************************************
* Function Name  : SPIPutChar
* Description    : Send one byte by SPI2
* Input          : outb--the byte to be sended 
* Output         : None
* Return         : None
*******************************************************************************/
unsigned char  SPIPutChar(unsigned char outb)
{   
   /* Write and Read a byte on SPI interface. */
   unsigned char inb;

   /* Wait if TXE cleared, Tx FIFO is full. */
   while ((SPI2->SR & TXE) == 0);
   SPI2->DR = outb;
   /* Wait if RNE cleared, Rx FIFO is empty. */
   while ((SPI2->SR & RXNE) == 0);
   inb = SPI2->DR;
   return (inb);

}

/*******************************************************************************
* Function Name  : SPIGetChar
* Description    : Read a byte from the SPI.
* Input          : None.
* Output         : None
* Return         : The received byte.
*******************************************************************************/
u8 SPIGetChar(void)
{
  u8 Data = 0;

  /* Wait until the transmit buffer is empty */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  /* Send the byte */
  SPI_I2S_SendData(SPI2, 0xFF);

  /* Wait until a data is received */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  /* Get the received data */
  Data = SPI_I2S_ReceiveData(SPI2);

  /* Return the shifted data */
  return Data;
}

/*******************************************************************************
* Function Name  : Mp3SoftReset
* Description    : Soft reset the VS1003 chip
* Input          : None.
* Output         : None
* Return         : None
*******************************************************************************/
void Mp3SoftReset(void)
{

	Mp3WriteRegister (SPI_MODE, 0x08, 0x04); 			// 軟件復位

	Delay(1); 	
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0); 	// 等待軟件復位結束
	Mp3WriteRegister(SPI_CLOCKF, 0x98, 0x00);			// 設置vs1003的時鐘,3倍頻
	Mp3WriteRegister (SPI_AUDATA, 0xBB, 0x81); 			// 采樣率48k,立體聲
	Mp3WriteRegister(SPI_BASS, 0x00, 0x55);				// 設置重音
	Mp3SetVolume(0,0);									// 設置音量
    Delay(1);	
    	
    //向vs1003發送4個字節無效數據,用以啟動SPI發送
    Mp3SelectData();
	SPIPutChar(0);
	SPIPutChar(0);
	SPIPutChar(0);
	SPIPutChar(0);
	Mp3DeselectData();

}

/*******************************************************************************
* Function Name  : Mp3Reset
* Description    : Reset the VS1003 chip
* Input          : None.
* Output         : None
* Return         : None
*******************************************************************************/
void Mp3Reset(void)
{
	Mp3PutInReset();									//xReset = 0   復位vs1003      
	Delay(100);		
	SPIPutChar(0xff);									//發送一個字節的無效數據,啟動SPI傳輸
	Mp3DeselectControl();   							//xCS = 1
	Mp3DeselectData();     								//xDCS = 1
	Mp3ReleaseFromReset(); 								//xRESET = 1
	Delay(100);	           								//延時100ms
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);	//等待DREQ為高
    Delay(100);	
    Mp3SoftReset();										//vs1003軟復位

}

/*******************************************************************************
* Function Name  : VsSineTest
* Description    : VS1003 sine test
* Input          : None.
* Output         : None
* Return         : None
*******************************************************************************/
void VsSineTest(void)
{
	Mp3PutInReset();  //xReset = 0   復位vs1003
	Mp3Reset();
	Delay(1000);//wait(100);        //延時100ms     
	SPIPutChar(0xff);//發送一個字節的無效數據,啟動SPI傳輸
	Mp3DeselectControl();  
	Mp3DeselectData();     
	Mp3ReleaseFromReset(); 
	
	Mp3Reset();
	Delay(500);//wait(100);	  
	
	Mp3SetVolume(50,50);//設置音量
             
 	Mp3WriteRegister(SPI_MODE,0x08,0x20);//進入vs1003的測試模式
	Delay(500);
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);     //等待DREQ為高

 	Mp3SelectData();       //xDCS = 1,選擇vs1003的數據接口
 	
 	//向vs1003發送正弦測試命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
 	//其中n = 0x24, 設定vs1003所產生的正弦波的頻率值,具體計算方法見vs1003的datasheet
    SPIPutChar(0x53);      
	SPIPutChar(0xef);      
	SPIPutChar(0x6e);      
	SPIPutChar(0x24);      
	SPIPutChar(0x00);      
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	Delay(1000);
	Mp3DeselectData();//程序執行到這里后應該能從耳機聽到一個單一頻率的聲音
  
    //退出正弦測試
	Mp3SelectData();
	SPIPutChar(0x45);
	SPIPutChar(0x78);
	SPIPutChar(0x69);
	SPIPutChar(0x74);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	Delay(1000);
	Mp3DeselectData();

    //再次進入正弦測試并設置n值為0x44,即將正弦波的頻率設置為另外的值
    Mp3SelectData();       
	SPIPutChar(0x53);      
	SPIPutChar(0xef);      
	SPIPutChar(0x6e);      
	SPIPutChar(0x44);      
	SPIPutChar(0x00);      
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	Delay(1000);
	Mp3DeselectData(); 

	//退出正弦測試
	Mp3SelectData();
	SPIPutChar(0x45);
	SPIPutChar(0x78);
	SPIPutChar(0x69);
	SPIPutChar(0x74);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	Delay(1000);
	Mp3DeselectData();

 }

/*******************************************************************************
* Function Name  : VsRamTest
* Description    : Test VS1003's register,if received value is 0x807F,then 
				   indicate the VS1003 is OK.
* Input          : None.
* Output         : None
* Return         : None
*******************************************************************************/
void VsRamTest(void)
{
	u16 regvalue ;

	regvalue = 0;
	Mp3PutInReset();  	
	Delay(100);	      
	SPIPutChar(0xff);										//發送一個字節的無效數據,啟動SPI傳輸
	Mp3DeselectControl();  
	Mp3DeselectData();     
	Mp3ReleaseFromReset(); 
	Delay(100);	           
 	Mp3WriteRegister(SPI_MODE,0x08,0x20);					// 進入vs1003的測試模式
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);     	// 等待DREQ為高
 	Mp3SelectData();       									// xDCS = 1,選擇vs1003的數據接口
 	
    SPIPutChar(0x4d);      
	SPIPutChar(0xea);      
	SPIPutChar(0x6d);      
	SPIPutChar(0x54);      
	SPIPutChar(0x00);      
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	SPIPutChar(0x00);
	Delay(500);	
	Mp3DeselectData();					
  
	regvalue = Mp3ReadRegister(SPI_HDAT0);      				// 如果得到的值為0x807F,則表明完好。

}

/*******************************************************************************
* Function Name  : Mp3WriteRegister
* Description    : Write VS1003 register
* Input          : addressbyte--the vs1003 register address
				   highbyte--the hight 8 bits
				   lowbyte--the low 8 bits
* Output         : None
* Return         : None
*******************************************************************************/
void Mp3WriteRegister(unsigned char addressbyte, unsigned char highbyte, unsigned char lowbyte)
{
	Mp3DeselectData();
	Mp3SelectControl();				//XCS = 0
	SPIPutChar(VS_WRITE_COMMAND); 	//發送寫寄存器命令
	SPIPutChar(addressbyte);      	//發送寄存器的地址
	SPIPutChar(highbyte);         	//發送待寫數據的高8位
	SPIPutChar(lowbyte);          	//發送待寫數據的低8位
	Mp3DeselectControl();
}

/*******************************************************************************
* Function Name  : Mp3ReadRegister
* Description    : Read VS1003 register
* Input          : addressbyte--the vs1003 register address
* Output         : None
* Return         : The register value
*******************************************************************************/
u16 Mp3ReadRegister(unsigned char addressbyte)
{
	u16 resultvalue = 0;
	Mp3DeselectData();
	Mp3SelectControl();				//XCS = 0
	SPIPutChar(VS_READ_COMMAND); 	//發送讀寄存器命令
	SPIPutChar(addressbyte);	 	//發送寄存器的地址
	resultvalue = SPIGetChar() << 8;//讀取高8位數據
	resultvalue |= SPIGetChar();  	//讀取低8位數據
	Mp3DeselectControl();              
	return resultvalue;           	//返回16位寄存器的值

}

/*******************************************************************************
* Function Name  : VS1003_Config
* Description    : Configures the GPIO ports and SPI2
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void VS1003_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  SPI_InitTypeDef   SPI_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  /* PA.1->XCS 
     PA.0->XRESET
     PA.2->XDCS,all low lever avalible 
  */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* PB.3->DREQ */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Diable all pins */
  GPIOA->ODR = 0xFF;  

  /* Configure SPI2 pins: SCK, MISO and MOSI ---------------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* SPI2 Config --------------------------------------------------*/ 
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2, &SPI_InitStructure);

  /* Enable SPI2 */			 
  SPI_Cmd(SPI2, ENABLE);

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美久久久| 国产色产综合产在线视频| 久久精品国产**网站演员| 国产精品久99| 日韩精品一区二区三区视频 | 91福利区一区二区三区| 狠狠色2019综合网| 日韩激情在线观看| 亚洲精品视频自拍| 久久久精品免费观看| 91精品国产全国免费观看| 9l国产精品久久久久麻豆| 韩国理伦片一区二区三区在线播放| 有码一区二区三区| 国产精品久久久久久久久动漫| 欧美xxxxxxxx| 欧美一区二区黄| 欧美日韩在线播| 91麻豆视频网站| 不卡在线视频中文字幕| 国产在线日韩欧美| 看电视剧不卡顿的网站| 日韩av一区二区三区四区| 亚洲国产综合人成综合网站| 日韩一区中文字幕| 欧美经典三级视频一区二区三区| 欧美sm极限捆绑bd| 日韩一区二区在线免费观看| 欧美日韩国产大片| 欧美美女一区二区| 欧美日韩久久不卡| 欧美区一区二区三区| 精品视频在线看| 欧美影视一区二区三区| 99久久伊人精品| 99re66热这里只有精品3直播| 成人涩涩免费视频| 成人国产精品免费| 成人av网址在线| 99久久精品一区二区| 色综合天天做天天爱| 99re亚洲国产精品| 色婷婷av一区二区三区大白胸 | 国产在线精品一区在线观看麻豆| 五月天亚洲精品| 偷拍亚洲欧洲综合| 日本特黄久久久高潮| 免费在线成人网| 精品一区二区三区在线播放视频| 国内精品写真在线观看| 国产精品一级二级三级| 国产不卡在线一区| 色综合 综合色| 欧美日韩日日骚| 日韩欧美第一区| 久久午夜免费电影| 国产精品久久久久久久久快鸭 | 国内精品不卡在线| 成人免费毛片片v| 日本韩国精品在线| 欧美日本一区二区在线观看| 日韩欧美国产不卡| 国产亚洲精品资源在线26u| 成人免费在线视频观看| 亚洲电影一区二区三区| 美女视频网站久久| 成人听书哪个软件好| 在线观看国产一区二区| 日韩欧美黄色影院| 国产精品免费网站在线观看| 一区二区三区不卡视频| 日韩—二三区免费观看av| 国产一区二区三区四区五区入口| 不卡的av在线播放| 欧美人妇做爰xxxⅹ性高电影| 日韩欧美资源站| 亚洲视频免费观看| 日韩av在线播放中文字幕| 大白屁股一区二区视频| 欧美视频一区二| 久久精品一区二区三区不卡牛牛| 亚洲欧美日韩精品久久久久| 青青草原综合久久大伊人精品| 国产美女精品一区二区三区| 色综合色狠狠综合色| 日韩一二三区视频| 精品一区二区三区视频在线观看 | 青草av.久久免费一区| 成人性生交大片免费看视频在线| 欧美日韩精品欧美日韩精品一综合| 久久久亚洲精华液精华液精华液 | 国产精品国产三级国产普通话蜜臀| 午夜日韩在线电影| av在线播放一区二区三区| 日韩亚洲欧美在线| 亚洲麻豆国产自偷在线| 国内精品伊人久久久久影院对白| 在线视频欧美精品| 国产欧美一区二区精品忘忧草| 亚洲v精品v日韩v欧美v专区| 成人一区二区三区视频| 欧美一级片在线观看| 一区二区欧美在线观看| 国产乱国产乱300精品| 欧美色涩在线第一页| 中文久久乱码一区二区| 久久丁香综合五月国产三级网站 | 国产人成一区二区三区影院| 日韩精品免费视频人成| 色网站国产精品| 中文字幕欧美日本乱码一线二线| 麻豆国产欧美日韩综合精品二区| 在线国产亚洲欧美| 综合电影一区二区三区| 国产91精品精华液一区二区三区| 日韩你懂的在线观看| 亚洲成人你懂的| 欧美亚洲动漫精品| 亚洲免费在线视频一区 二区| 成人理论电影网| 国产视频一区在线播放| 久久99精品久久久久久动态图| 337p亚洲精品色噜噜噜| 亚洲高清视频中文字幕| 欧美怡红院视频| 夜色激情一区二区| 92国产精品观看| 亚洲欧美日韩精品久久久久| 97se亚洲国产综合自在线观| 亚洲人成网站精品片在线观看 | 色菇凉天天综合网| 中文字幕一区在线| 99视频热这里只有精品免费| 亚洲欧洲国产日韩| 99久久精品99国产精品| 亚洲欧美激情插| 一本一道综合狠狠老| 悠悠色在线精品| 欧美亚洲一区二区在线| 日日夜夜一区二区| 91精品国产色综合久久不卡电影| 日韩成人免费电影| 日韩视频在线永久播放| 久久精品国产成人一区二区三区| 欧美不卡一区二区三区| 国产一区二区三区四区五区美女| 久久久久久久性| 成人免费视频网站在线观看| 亚洲欧美视频在线观看| 91亚洲精品久久久蜜桃| 欧美三级欧美一级| 亚洲人成7777| 欧美性猛交xxxx黑人交 | 麻豆精品久久精品色综合| 精品成人在线观看| 国产91富婆露脸刺激对白| 亚洲欧洲综合另类在线| 欧美日韩一区视频| 久草中文综合在线| 国产精品三级av| 91福利在线观看| 免费的成人av| 亚洲国产高清在线观看视频| 色中色一区二区| 理论片日本一区| 欧美激情综合五月色丁香小说| 91丝袜国产在线播放| 日韩精品免费专区| 欧美激情中文字幕| 欧美日韩免费观看一区三区| 久久精品国产99| 亚洲人成精品久久久久| 欧美一级理论性理论a| 丁香婷婷综合色啪| 亚洲第一综合色| 国产欧美精品一区aⅴ影院| 欧美在线观看一二区| 久久99精品国产麻豆婷婷| 国产精品不卡视频| 欧美一区二区在线视频| 成人动漫在线一区| 日韩精品一卡二卡三卡四卡无卡| 国产婷婷色一区二区三区四区| 欧美亚州韩日在线看免费版国语版| 捆绑调教美女网站视频一区| 亚洲人123区| 久久久久久久综合| 欧美男男青年gay1069videost| 国产高清久久久久| 日韩国产欧美在线观看| 中文av一区二区| 日韩三级电影网址| 91福利社在线观看| 成人污视频在线观看| 开心九九激情九九欧美日韩精美视频电影 | 国产精品国产三级国产三级人妇| 91精选在线观看| 色综合久久综合中文综合网| 国产综合色在线视频区| 日日摸夜夜添夜夜添亚洲女人|