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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vs1003.c

?? 源文件下載(使用開發(fā)工具RealView MDK
?? C
字號(hào):
/* 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_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET);
  /* Send the byte */
  SPI_SendData(SPI2, 0xFF);

  /* Wait until a data is received */
  while (SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE) == RESET);
  /* Get the received data */
  Data = SPI_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); 			// 軟件復(fù)位

	Delay(1); 	
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0); 	// 等待軟件復(fù)位結(jié)束
	Mp3WriteRegister(SPI_CLOCKF, 0x98, 0x00);			// 設(shè)置vs1003的時(shí)鐘,3倍頻
	Mp3WriteRegister (SPI_AUDATA, 0xBB, 0x81); 			// 采樣率48k,立體聲
	Mp3WriteRegister(SPI_BASS, 0x00, 0x55);				// 設(shè)置重音
	Mp3SetVolume(0,0);									// 設(shè)置音量
    Delay(1);	
    	
    //向vs1003發(fā)送4個(gè)字節(jié)無效數(shù)據(jù),用以啟動(dòng)SPI發(fā)送
    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   復(fù)位vs1003      
	Delay(100);		
	SPIPutChar(0xff);									//發(fā)送一個(gè)字節(jié)的無效數(shù)據(jù),啟動(dòng)SPI傳輸
	Mp3DeselectControl();   							//xCS = 1
	Mp3DeselectData();     								//xDCS = 1
	Mp3ReleaseFromReset(); 								//xRESET = 1
	Delay(100);	           								//延時(shí)100ms
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);	//等待DREQ為高
    Delay(100);	
    Mp3SoftReset();										//vs1003軟復(fù)位

}

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

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

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

	//退出正弦測(cè)試
	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);										//發(fā)送一個(gè)字節(jié)的無效數(shù)據(jù),啟動(dòng)SPI傳輸
	Mp3DeselectControl();  
	Mp3DeselectData();     
	Mp3ReleaseFromReset(); 
	Delay(100);	           
 	Mp3WriteRegister(SPI_MODE,0x08,0x20);					// 進(jìn)入vs1003的測(cè)試模式
	while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);     	// 等待DREQ為高
 	Mp3SelectData();       									// xDCS = 1,選擇vs1003的數(shù)據(jù)接口
 	
    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); 	//發(fā)送寫寄存器命令
	SPIPutChar(addressbyte);      	//發(fā)送寄存器的地址
	SPIPutChar(highbyte);         	//發(fā)送待寫數(shù)據(jù)的高8位
	SPIPutChar(lowbyte);          	//發(fā)送待寫數(shù)據(jù)的低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); 	//發(fā)送讀寄存器命令
	SPIPutChar(addressbyte);	 	//發(fā)送寄存器的地址
	resultvalue = SPIGetChar() << 8;//讀取高8位數(shù)據(jù)
	resultvalue |= SPIGetChar();  	//讀取低8位數(shù)據(jù)
	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);

}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频在线观看免费| 日韩制服丝袜av| 欧美性高清videossexo| 久久精品国产亚洲aⅴ| 亚洲色图.com| 久久亚洲精品小早川怜子| 欧美在线一二三| 国产成人精品在线看| 日本美女视频一区二区| 综合久久综合久久| 久久久国产午夜精品| 欧美年轻男男videosbes| 99久久伊人网影院| 寂寞少妇一区二区三区| 亚洲成人免费视| 亚洲精品第一国产综合野| 中文字幕在线播放不卡一区| 91麻豆精品国产91久久久使用方法| 福利91精品一区二区三区| 日韩va欧美va亚洲va久久| 亚洲丝袜美腿综合| 欧美国产精品专区| 精品国产乱码91久久久久久网站| 欧美视频在线一区| 色天使色偷偷av一区二区| 粉嫩av一区二区三区在线播放| 久久精品久久久精品美女| 亚洲国产成人va在线观看天堂| 最新中文字幕一区二区三区| 日本一区二区三区电影| 精品99一区二区三区| 91在线一区二区三区| 亚洲一区电影777| 一区二区中文视频| 国产日韩精品一区二区三区 | av福利精品导航| 国产精品亚洲а∨天堂免在线| 久久超级碰视频| 捆绑调教美女网站视频一区| 青草国产精品久久久久久| 亚洲国产另类av| 亚洲精品一卡二卡| 亚洲精品欧美在线| 一区二区三区在线视频播放| 亚洲精品国产成人久久av盗摄 | 欧美浪妇xxxx高跟鞋交| 欧美性视频一区二区三区| 91久久一区二区| 欧美性感一类影片在线播放| 欧美亚洲动漫精品| 欧美日韩精品一区二区天天拍小说| 国产欧美日韩在线看| 欧美一区二区三区免费视频| 欧美另类久久久品| 欧美一二三四区在线| 日韩女同互慰一区二区| 久久蜜桃香蕉精品一区二区三区| 久久午夜免费电影| 国产精品三级电影| 亚洲欧美国产高清| 亚洲va韩国va欧美va精品| 蜜桃视频第一区免费观看| 极品少妇一区二区| 国产精品自拍一区| av高清久久久| 欧美老肥妇做.爰bbww视频| 日韩欧美一区中文| 日本一区二区成人在线| 亚洲欧美日韩在线不卡| 亚洲成人激情av| 精品一区二区三区免费观看| 成人小视频在线观看| 在线观看日韩一区| 日韩免费高清视频| 中文字幕一区三区| 性做久久久久久免费观看欧美| 蜜桃av噜噜一区二区三区小说| 国产**成人网毛片九色| 欧美四级电影网| 欧美岛国在线观看| 国产欧美va欧美不卡在线| 亚洲日本护士毛茸茸| 丝袜亚洲另类欧美综合| 国产一区二区三区美女| 91蜜桃传媒精品久久久一区二区| 7777精品伊人久久久大香线蕉| 2024国产精品| 一区二区高清在线| 国产一区二区三区| 欧美性大战久久久久久久| 欧美精品一区二区三| 艳妇臀荡乳欲伦亚洲一区| 精品在线视频一区| 欧美在线影院一区二区| 久久免费午夜影院| 亚洲动漫第一页| 丁香婷婷综合色啪| 在线播放91灌醉迷j高跟美女| 国产精品沙发午睡系列990531| 午夜久久久久久久久| gogo大胆日本视频一区| 日韩精品一区二区在线| 一区二区在线观看av| 国产传媒久久文化传媒| 欧美日韩国产a| **性色生活片久久毛片| 蜜臀av一区二区三区| 日韩不卡一区二区三区 | 中文字幕中文乱码欧美一区二区| 婷婷国产在线综合| av在线播放成人| 精品国产凹凸成av人导航| 亚洲成人av福利| 不卡电影一区二区三区| 精品国精品国产| 水野朝阳av一区二区三区| 91免费版在线看| 久久精品日韩一区二区三区| 免费欧美高清视频| 欧美日韩精品高清| 亚洲一区二区在线视频| 99国产精品久久久久久久久久 | 中文字幕欧美日韩一区| 久久99深爱久久99精品| 538prom精品视频线放| 亚洲与欧洲av电影| 色综合久久六月婷婷中文字幕| 中文欧美字幕免费| 国产一区二区三区不卡在线观看| 日韩欧美国产小视频| 视频一区欧美精品| 欧美人成免费网站| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩精品一区视频| 亚洲黄色性网站| 色综合久久中文综合久久97| 亚洲欧洲国产专区| 91香蕉视频mp4| 亚洲免费在线电影| 色av综合在线| 亚洲国产日产av| 欧美日韩一区在线观看| 亚洲小说欧美激情另类| 精品视频全国免费看| 亚洲一区视频在线观看视频| 欧美午夜精品久久久| 亚洲mv大片欧洲mv大片精品| 欧美日韩国产一区二区三区地区| 午夜在线成人av| 欧美一区二区三区视频在线 | 亚洲va韩国va欧美va精品| 欧美日韩综合色| 天堂va蜜桃一区二区三区| 欧美一区日韩一区| 韩国成人精品a∨在线观看| 2020日本不卡一区二区视频| 粉嫩av亚洲一区二区图片| **欧美大码日韩| 欧美日韩免费在线视频| 日韩精品亚洲专区| 精品国产一区久久| 成人一级片网址| 亚洲精品老司机| 4438亚洲最大| 国产乱子轮精品视频| 中文字幕佐山爱一区二区免费| 日本久久精品电影| 免费观看一级特黄欧美大片| 国产亚洲午夜高清国产拍精品| 不卡在线观看av| 亚洲成人av一区二区| 26uuu另类欧美亚洲曰本| 成人动漫精品一区二区| 亚洲午夜视频在线观看| 亚洲精品在线三区| 日本高清不卡在线观看| 日韩高清一区在线| 久久久久国产精品免费免费搜索| 成人国产免费视频| 天天色天天爱天天射综合| 久久嫩草精品久久久久| 一本一道久久a久久精品| 久久国产三级精品| 国产精品影视网| 中文字幕一区二区三区蜜月| 欧美精品视频www在线观看 | 琪琪一区二区三区| 国产精品高潮呻吟久久| 欧美人伦禁忌dvd放荡欲情| 东方欧美亚洲色图在线| 舔着乳尖日韩一区| 中文字幕人成不卡一区| 欧美一区二区三区在线视频| www.久久精品| 蜜桃视频一区二区三区| 一区二区在线电影| 欧美—级在线免费片| 日韩欧美国产wwwww| 欧美中文字幕一区| 99视频在线观看一区三区|