DIY优盘的MP3模块闪亮登场

[复制链接]
10339|25
 楼主| 古道热肠 发表于 2009-3-5 10:24 | 显示全部楼层 |阅读模式
已听到正弦音.
 楼主| 古道热肠 发表于 2009-3-5 10:28 | 显示全部楼层

驱动程序源代码

//古道热肠U盘开发板-VS1003B音乐播放模块驱动<br />//主办单位:www.21ic.com<br />//项目负责人:古道热肠<br />//作者邮箱:xg_2004_sy@126.com<br />//完成日期:2008-02-27<br />//备注:<br /><br />#include&nbsp;&ltAT91SAM7S64.H&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;AT91SAM7S64&nbsp;definitions&nbsp;*/<br />#include&nbsp;&ltlib_AT91SAM7s64.h&gt<br /><br />#include&nbsp;&quot;..Board.h&quot;<br /><br />#include&nbsp;&quot;english_6x8_pixel.h&quot;<br />//#include&nbsp;&quot;DriverLCD_Nokia5110.h&quot;<br /><br />#include&nbsp;&quot;VS1003.h&quot;<br />#include&nbsp;&quot;DriverBeep.h&quot;<br /><br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;short&nbsp;int<br />#define&nbsp;ulong&nbsp;unsigned&nbsp;long<br /><br />#define&nbsp;Macro_SetVS1003B_SDIN_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_SDIN&nbsp;)<br />#define&nbsp;Macro_SetVS1003B_SDIN_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_SDIN)<br /><br />#define&nbsp;Macro_SetVS1003B_SCLK_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_SCLK)&nbsp;<br />#define&nbsp;Macro_SetVS1003B_SCLK_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_SCLK)&nbsp;<br /><br />#define&nbsp;Macro_SetVS1003B_XCS_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XCS)<br />#define&nbsp;Macro_SetVS1003B_XCS_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XCS)<br /><br />#define&nbsp;Macro_SetVS1003B_XDCS_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XDCS)&nbsp;<br />#define&nbsp;Macro_SetVS1003B_XDCS_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XDCS)&nbsp;<br /><br />#define&nbsp;Macro_SetVS1003B_XRESET_High()&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XRESET)<br />#define&nbsp;Macro_SetVS1003B_XRESET_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;VS1003B_XRESET)<br /><br />//#define&nbsp;Macro_SetVS1003B_PC_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//LCD_PC&nbsp;=&nbsp;1<br />//#define&nbsp;Macro_SetVS1003B_PC_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//LCD_PC&nbsp;=&nbsp;0<br /><br />//#define&nbsp;Macro_SetBeep_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;Beep_Pin)&nbsp;<br />//#define&nbsp;Macro_SetBeep_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;Beep_Pin)&nbsp;<br /><br />#define&nbsp;uint8&nbsp;unsigned&nbsp;char<br /><br />&nbsp;<br />#define&nbsp;Mp3PutInReset()&nbsp;&nbsp;Macro_SetVS1003B_XRESET_Low()<br />&nbsp;<br />#define&nbsp;Mp3ReleaseFromReset()&nbsp;&nbsp;Macro_SetVS1003B_XRESET_High()&nbsp;<br />&nbsp;<br />&nbsp;<br />#define&nbsp;Mp3SelectControl()&nbsp;&nbsp;Macro_SetVS1003B_XCS_Low()<br />&nbsp;<br />#define&nbsp;Mp3DeselectControl()&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XCS_High()&nbsp;<br />&nbsp;<br /><br />#define&nbsp;Mp3SelectData()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XDCS_Low()<br /><br />#define&nbsp;Mp3DeselectData()&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XDCS_High()<br /><br /><br /><br />#define&nbsp;Macro_Set_SI_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_SDIN_High()<br />#define&nbsp;Macro_Set_SI_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_SDIN_Low()&nbsp;<br />#define&nbsp;Macro_Set_CLK_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_SCLK_High()<br />#define&nbsp;Macro_Set_CLK_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_SCLK_Low()<br /><br />//获取vs1003b芯片spi接口的数据输出引脚的值<br />bool&nbsp;GetVS1003B_SO_Value(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;AT91F_PIO_GetInput(&nbsp;AT91C_BASE_PIOA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return((n&VS1003B_SDO)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//获取vs1003b芯片spi接口的数据输出引脚的值<br />bool&nbsp;GetVS1003B_DREQ_Value(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;AT91F_PIO_GetInput(&nbsp;AT91C_BASE_PIOA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return((n&VS1003B_DREQ)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />void&nbsp;wait(uchar&nbsp;ucDelayCount)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucTempCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;uci;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(ucTempCount=0;&nbsp;ucTempCount&ltucDelayCount;&nbsp;ucTempCount++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uci&nbsp;=&nbsp;230;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(uci--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//#define&nbsp;wait(x)&nbsp;Delay(x)<br />/**********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;&nbsp;MSPI_Init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;初始化SPI接口,设置为主机。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*--------------------------------------------------------*/<br />void&nbsp;&nbsp;MSPI_Init(void)<br />{&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;c_SPI_SO&nbsp;=&nbsp;1;<br />//&nbsp;&nbsp;&nbsp;&nbsp;MP3_DREQ&nbsp;=&nbsp;1;<br />}<br /><br />/**********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;InitPortVS1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;MCU与vs1003接口的初始化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*--------------------------------------------------------*/<br />void&nbsp;&nbsp;InitPortVS1003(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;MSPI_Init();//SPI口的初始化<br />//&nbsp;&nbsp;&nbsp;&nbsp;IODIR&nbsp;&=&nbsp;0xfffeffff;&nbsp;&nbsp;&nbsp;//其他接口线的设置,其中dreq&nbsp;为输入口<br />//&nbsp;&nbsp;&nbsp;&nbsp;IODIR&nbsp;|=&nbsp;MP3_XRESET&nbsp;|&nbsp;MP3_XCS&nbsp;|&nbsp;MP3_XDCS;//xRESET,xCS,xDS均为输出口<br />//&nbsp;&nbsp;&nbsp;&nbsp;IOSET&nbsp;|=&nbsp;MP3_XRESET&nbsp;|&nbsp;MP3_XCS&nbsp;|&nbsp;MP3_XDCS;//xRESET,xCS,xDS默认输出高电平&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;MP3_DREQ&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//置为输入<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XRESET_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XCS_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;Macro_SetVS1003B_XDCS_High();<br />}<br /><br />//uint8&nbsp;SD_SPI_ReadByte(void);<br />//void&nbsp;SD_SPI_WriteByte(uint8&nbsp;ucSendData);<br /><br />//#define&nbsp;SPI_RecByte()&nbsp;&nbsp;SD_SPI_ReadByte()<br />//#define&nbsp;SPIPutChar(x)&nbsp;SD_SPI_WriteByte(x)<br /><br />#if&nbsp;1<br />/**********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;SPIPutChar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;通过SPI发送一个字节的数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;待发送的字节数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*--------------------------------------------------------*/<br />void&nbsp;&nbsp;SPIPutChar(unsigned&nbsp;char&nbsp;ucSendData)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;c;<br />//&nbsp;&nbsp;&nbsp;&nbsp;while((S0SPSR&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待SPI将数据发送完毕<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucMaskCode;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=0;&nbsp;ucCount&lt8;&nbsp;ucCount++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucMaskCode&nbsp;&&nbsp;ucSendData)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_Low();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;&gt&gt=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/*******************************************************************************************************************<br />**&nbsp;函数名称:&nbsp;INT8U&nbsp;SPI_RecByte()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;SPI_RecByte()<br />**&nbsp;功能描述:&nbsp;从SPI接口接收一个字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function:&nbsp;receive&nbsp;a&nbsp;byte&nbsp;from&nbsp;SPI&nbsp;interface<br />**&nbsp;输 &nbsp;&nbsp;入:&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Input:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL<br />**&nbsp;输&nbsp; &nbsp;出:&nbsp;收到的字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Output:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;byte&nbsp;that&nbsp;be&nbsp;received<br />********************************************************************************************************************/<br />static&nbsp;uchar&nbsp;SPI_RecByte(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucReadData;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucCount;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=0;&nbsp;ucCount&lt8;&nbsp;ucCount++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;&lt&lt=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//降低时钟频率<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(GetVS1003B_SO_Value())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;|=&nbsp;0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(ucReadData);<br />}<br /><br />#endif<br /><br />/*************************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;Mp3WriteRegister&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;写vs1003寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;寄存器地址,待写数据的高8位,待写数据的低8位&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*-----------------------------------------------------------*/<br />void&nbsp;Mp3WriteRegister(unsigned&nbsp;char&nbsp;addressbyte,&nbsp;unsigned&nbsp;char&nbsp;highbyte,&nbsp;unsigned&nbsp;char&nbsp;lowbyte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectControl();//XCS&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(VS_WRITE_COMMAND);&nbsp;//发送写寄存器命令<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(addressbyte);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送寄存器的地址<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(highbyte);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送待写数据的高8位<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(lowbyte);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送待写数据的低8位<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectControl();<br />}<br /><br />/*************************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;Mp3ReadRegister&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;写vs1003寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;寄存器地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;vs1003的16位寄存器的值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*-----------------------------------------------------------*/<br />unsigned&nbsp;int&nbsp;Mp3ReadRegister(unsigned&nbsp;char&nbsp;addressbyte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;resultvalue&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucReadValue;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectControl();//XCS&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(VS_READ_COMMAND);&nbsp;//发送读寄存器命令<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar((addressbyte));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送寄存器的地址<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送读时钟<br />//&nbsp;&nbsp;&nbsp;&nbsp;resultvalue&nbsp;=&nbsp;(SPI_RESULT_BYTE)&nbsp;&lt&lt&nbsp;8;//读取高8位数据<br />&nbsp;&nbsp;&nbsp;&nbsp;ucReadValue&nbsp;=&nbsp;SPI_RecByte();<br />&nbsp;&nbsp;&nbsp;&nbsp;resultvalue&nbsp;=&nbsp;ucReadValue&lt&lt8;<br />//&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送读时钟<br />//&nbsp;&nbsp;&nbsp;&nbsp;resultvalue&nbsp;|=&nbsp;(SPI_RESULT_BYTE);&nbsp;&nbsp;//读取低8位数据<br />&nbsp;&nbsp;&nbsp;&nbsp;ucReadValue&nbsp;=&nbsp;SPI_RecByte();<br />&nbsp;&nbsp;&nbsp;&nbsp;resultvalue&nbsp;|=&nbsp;ucReadValue;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectControl();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;resultvalue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//返回16位寄存器的值<br />}<br /><br />/**********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;Mp3SoftReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;vs1003软件复位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*--------------------------------------------------------*/<br />void&nbsp;Mp3SoftReset(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister&nbsp;(SPI_MODE,&nbsp;0x08,&nbsp;0x04);&nbsp;//软件复位<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wait(1);&nbsp;//延时1ms<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GetVS1003B_DREQ_Value()&nbsp;==&nbsp;0);&nbsp;//等待软件复位结束<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister(SPI_CLOCKF,&nbsp;0x98,&nbsp;0x00);//设置vs1003的时钟,3倍频<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister&nbsp;(SPI_AUDATA,&nbsp;0xBB,&nbsp;0x81);&nbsp;//采样率48k,立体声<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister(SPI_BASS,&nbsp;0x00,&nbsp;0x55);//设置重音<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SetVolume(50,50);//设置音量<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(1);&nbsp;//延时1ms<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//向vs1003发送4个字节无效数据,用以启动SPI发送<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br /><br />}<br />/**********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;Mp3Reset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;vs1003硬件复位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*--------------------------------------------------------*/<br />void&nbsp;Mp3Reset(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3PutInReset();//xReset&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;复位vs1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(200);//延时100ms<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xff);//发送一个字节的无效数据,启动SPI传输<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectControl();&nbsp;&nbsp;&nbsp;//xCS&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//xDCS&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3ReleaseFromReset();&nbsp;//xRESET&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(200);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时100ms<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GetVS1003B_DREQ_Value()==&nbsp;0);//等待DREQ为高<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wait(200);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时100ms<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mp3SetVolume(50,50);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SoftReset();//vs1003软复位<br />}<br /><br /><br />bool&nbsp;CheckVS1003B_DRQ(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;bResult;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bResult&nbsp;=GetVS1003B_DREQ_Value();<br />&nbsp;&nbsp;&nbsp;&nbsp;return(bResult);<br />}<br /><br />/***********************************************************/<br />/*&nbsp;&nbsp;函数名称&nbsp;:&nbsp;&nbsp;VsSineTest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;函数功能&nbsp;:&nbsp;vs1003正弦测试,将该函数放在while循环中,&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果能持续听到一高一低的声音,证明测试通过&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />/*&nbsp;&nbsp;参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;返回值&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*---------------------------------------------------------*/<br />void&nbsp;VsSineTest(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3PutInReset();&nbsp;&nbsp;//xReset&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;复位vs1003<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(200);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时100ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xff);//发送一个字节的无效数据,启动SPI传输<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectControl();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3ReleaseFromReset();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(200);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SetVolume(50,50);&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister(SPI_MODE,0x08,0x20);//进入vs1003的测试模式<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GetVS1003B_DREQ_Value()&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待DREQ为高<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//xDCS&nbsp;=&nbsp;1,选择vs1003的数据接口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//向vs1003发送正弦测试命令:0x53&nbsp;0xef&nbsp;0x6e&nbsp;n&nbsp;0x00&nbsp;0x00&nbsp;0x00&nbsp;0x00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//其中n&nbsp;=&nbsp;0x24,&nbsp;设定vs1003所产生的正弦波的频率值,具体计算方法见vs1003的datasheet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x53);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xef);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x6e);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x24);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />//&nbsp;&nbsp;&nbsp;&nbsp;wait(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();//程序执行到这里后应该能从耳机听到一个单一频率的声音<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//退出正弦测试<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x45);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x78);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x69);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x74);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />//&nbsp;&nbsp;&nbsp;&nbsp;wait(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//再次进入正弦测试并设置n值为0x44,即将正弦波的频率设置为另外的值<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x53);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0xef);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x6e);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x44);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />//&nbsp;&nbsp;&nbsp;&nbsp;wait(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//退出正弦测试<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x45);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x78);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x69);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x74);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(0x00);<br />//&nbsp;&nbsp;&nbsp;&nbsp;wait(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br />&nbsp;}<br /><br />void&nbsp;test_1003_PlayMP3File();<br /><br />void&nbsp;TestVS1003B(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3Reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;VsSineTest();<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3SoftReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;test_1003_PlayMP3File();<br />}<br /><br />//写寄存器,参数,地址和数据<br />void&nbsp;VS1003B_WriteCMD(unsigned&nbsp;char&nbsp;addr,&nbsp;unsigned&nbsp;int&nbsp;dat)<br />{<br />/*<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XDCS_H();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_L();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(0x02);<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay_Nus(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(addr);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(dat&gt&gt8);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(dat);<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay_Nus(200);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_H();<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3WriteRegister(addr,dat&gt&gt8,dat);<br />}<br /><br />//读寄存器,参数&nbsp;地址&nbsp;返回内容<br />unsigned&nbsp;int&nbsp;VS1003B_ReadCMD(unsigned&nbsp;char&nbsp;addr)<br />{<br />/*<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp1;<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XDCS_H();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_L();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(0x03);<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay_Nus(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(addr);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=&nbsp;&nbsp;VS1003B_ReadByte();<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=temp&lt&lt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp1=&nbsp;VS1003B_ReadByte();<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=temp|temp1;;<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_H();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;temp;<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;return(Mp3ReadRegister(addr));<br />}<br /><br />//写数据,音乐数据<br />void&nbsp;VS1003B_WriteDAT(unsigned&nbsp;char&nbsp;dat)<br />{<br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XDCS_L();<br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteByte(dat);<br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XDCS_H();<br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_H();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mp3SelectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIPutChar(dat);<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectData();<br />&nbsp;&nbsp;&nbsp;&nbsp;Mp3DeselectControl();<br /><br />}<br /><br />//开启环绕声<br />void&nbsp;VS1003B_SetVirtualSurroundOn(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucRepeatCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;uiModeValue;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount&nbsp;=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)//写时钟寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiModeValue&nbsp;=&nbsp;VS1003B_ReadCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(uiModeValue&nbsp;&&nbsp;0x0001)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiModeValue&nbsp;|=&nbsp;0x0001;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0,uiModeValue);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucRepeatCount++&nbsp;&gt10&nbsp;)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />//关闭环绕声<br />void&nbsp;VS1003B_SetVirtualSurroundOff(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucRepeatCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;uiModeValue;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount&nbsp;=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)//写时钟寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiModeValue&nbsp;=&nbsp;VS1003B_ReadCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(uiModeValue&nbsp;&&nbsp;0x0001)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiModeValue&nbsp;|=&nbsp;0x0001;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0,uiModeValue);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucRepeatCount++&nbsp;&gt10&nbsp;)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />//增强重音<br />//入口参数&nbsp;&nbsp;&nbsp;&nbsp;1.强度0-15<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.频率0-15&nbsp;(X10Hz)<br />void&nbsp;VS1003B_SetBassEnhance(uchar&nbsp;ucValue,&nbsp;uchar&nbsp;ucFrequencyID)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucRepeatCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;uiWriteValue;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;uiReadValue;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount&nbsp;=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;uiWriteValue&nbsp;=&nbsp;VS1003B_ReadCMD(0x02);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;uiWriteValue&nbsp;&=&nbsp;0xFF00;<br />&nbsp;&nbsp;&nbsp;&nbsp;uiWriteValue&nbsp;|=&nbsp;ucValue&lt&lt4;<br />&nbsp;&nbsp;&nbsp;&nbsp;uiWriteValue&nbsp;&=&nbsp;(ucFrequencyID&nbsp;&&nbsp;0x0F);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)//写时钟寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(2,uiWriteValue);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiReadValue&nbsp;=&nbsp;VS1003B_ReadCMD(0x02);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(uiReadValue&nbsp;==&nbsp;uiWriteValue)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucRepeatCount++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucRepeatCount++&nbsp;&gt10&nbsp;)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br /><br />&nbsp;uint&nbsp;uiVolumeCount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当前音量值<br /><br />//VS1003初始化,0成功&nbsp;1失败<br />unsigned&nbsp;char&nbsp;VS1003B_Init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;retry;<br />/*<br />&nbsp;&nbsp;&nbsp;&nbsp;PORT_INI();<br />&nbsp;&nbsp;&nbsp;&nbsp;DDRB|=0xa0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_DDR&nbsp;&=~(1&lt&ltVS1003B_DREQ);<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay_Nus(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XCS_H();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XDCS_H();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XRESET_L();<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_Delay(0xffff);<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_XRESET_H();//使能芯片<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_SPI_Low();//先以低频操作<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_Delay(0xffff);//延时<br />*/<br />Mp3Reset();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;retry=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(VS1003B_ReadCMD(0x00)&nbsp;!=&nbsp;0x0800)//写mode寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x00,0x0800);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(retry++&nbsp;&gt10&nbsp;)break;//{PORTB|=_BV(PB1);break;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;retry=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*while(VS1003B_ReadCMD(0x02)&nbsp;!=&nbsp;0x75)//写mode寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x02,0x75);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(retry++&nbsp;&gt10&nbsp;)break;//{PORTB|=_BV(PB1);break;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}*/<br />&nbsp;&nbsp;&nbsp;&nbsp;retry=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(VS1003B_ReadCMD(0x03)&nbsp;!=&nbsp;0x9800)//写时钟寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x03,0x9800);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(retry++&nbsp;&gt10&nbsp;)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;retry=0;<br />//&nbsp;&nbsp;&nbsp;&nbsp;while(VS1003B_ReadCMD(0x0b)&nbsp;!=&nbsp;0x1111)//设音量<br />//&nbsp;&nbsp;&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x0b,0x1111);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(retry++&nbsp;&gt10&nbsp;)break;<br />//&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(VS1003B_ReadCMD(0x0b)&nbsp;!=&nbsp;uiVolumeCount)//设音量<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x0b,uiVolumeCount);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(retry++&nbsp;&gt10&nbsp;)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_SPI_High();//提高速度,全速运行<br />&nbsp;&nbsp;&nbsp;&nbsp;if(retry&nbsp;&gt&nbsp;10)return&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />//VS1003软件复位<br />void&nbsp;VS1003B_SoftReset()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_WriteCMD(0x00,0x0804);//写复位<br />//&nbsp;&nbsp;&nbsp;&nbsp;VS1003B_Delay(0xffff);//延时,至少1.35ms<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(2);<br />}<br /><br />
 楼主| 古道热肠 发表于 2009-3-5 10:29 | 显示全部楼层

贴个打包的,下载方便.

  <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20093/200935102431331.rar'>https://bbs.21ic.com/upfiles/img/20093/200935102431331.rar</a>
starwx 发表于 2009-3-5 10:43 | 显示全部楼层

支持热肠斑竹

又拿出好东西来了,哈哈
bob.xue 发表于 2009-3-6 00:36 | 显示全部楼层

似乎双面板

  
xwj 发表于 2009-3-6 00:40 | 显示全部楼层

赞!

  
goooog 发表于 2009-3-6 10:03 | 显示全部楼层

再赞!

热肠真热!<br />很好的小东西。
zcx11 发表于 2010-4-20 10:54 | 显示全部楼层
赞一下。
在心一方 发表于 2010-4-22 16:11 | 显示全部楼层
renls13 发表于 2010-6-1 10:06 | 显示全部楼层
谢了
在论坛上时间不长
却总能看到热肠的帖子
zlulu2006 发表于 2010-6-4 15:37 | 显示全部楼层
现在还看不懂,以后慢慢学习……
123jj 发表于 2010-8-3 18:34 | 显示全部楼层
热肠很热心!
bluecup 发表于 2010-8-5 15:51 | 显示全部楼层
这东西我也做了一个,呵呵
shoolang 发表于 2010-8-5 22:15 | 显示全部楼层
开眼啦!
ningling_21 发表于 2010-8-6 12:51 | 显示全部楼层
不错,顶起!
青竹子洋洋 发表于 2011-7-4 11:21 | 显示全部楼层
好东西啊。。。。原理图在哪。。
lirui5528 发表于 2011-7-6 12:31 | 显示全部楼层
我知道了,我现在很多基础的东西都没有学会,我要好好学习啊!!!!
afei9527 发表于 2011-8-6 00:36 | 显示全部楼层
热肠真热!
很好的小东西。
青竹子洋洋 发表于 2011-9-9 09:35 | 显示全部楼层
狂赞啊
我是北丐 发表于 2011-9-10 16:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部