📄 vs1003.c
字号:
#include <avr/io.h>
#include <avr/delay.h>
#define uchar unsigned char
#define uint unsigned int
#define MP3_DDR DDRB
#define MP3_DDRE DDRE
#define MP3_DDRF DDRF
#define MP3_PORT PORTB
#define MP3_PORTE PORTE
#define MP3_PORTF PORTF
//#define MP3_PIN PINB
#define MP3_CMD_CS 0x04 //PF2
#define MP3_DATA_CS 0x08 //PF3
#define MP3_DATA_REQ 0x02 //PE1
#define MP3_DATA_REST 0x04 //PE2
#define MP3_SI 0x04 //PB2
#define MP3_SCK 0x02 //PB1
void delay_nnus(unsigned int n)
{
unsigned int b;
for (b = 0; b<n; b++)
;
}
//SPI initialize
void spi_init(void)
{
// DDRB = 0xBF; //SI输入,SO,SCK,SS输出
SPCR = 0x53; //setup SPI
SPSR = 0x01; //setup SPI
}
void mp3_port_init()
{
spi_init();
MP3_DDR|= MP3_SI | MP3_SCK;
MP3_DDRE|= MP3_DATA_REST;
MP3_DDRF|= MP3_CMD_CS | MP3_DATA_CS;
MP3_DDRE&=~MP3_DATA_REQ;
MP3_PORTF|= MP3_DATA_CS |MP3_CMD_CS;
MP3_PORTE|= MP3_DATA_REST;
}
void Write_Byte_SPI(unsigned char byte)
{
SPDR = byte;
while (!(SPSR & (1<<SPIF)));
}
unsigned char Read_Byte_SPI(void)
{
SPDR = 0xFF;
while (!(SPSR &(1<<SPIF)));
return SPDR;
}
void vs1003_cmd_write(uchar address,uint data)
{
/*==============新增
while(!(PINE&MP3_DATA_REQ)) ;
SPCR = 0x53; //
SPSR = 0x00; //低速度spi
//============== */
MP3_PORTF|=MP3_DATA_CS; //MP3_DATA_CS=1;
MP3_PORT&=~MP3_CMD_CS; //MP3_CMD_CS=0;
Write_Byte_SPI(0x02); //VS1011的写命令
Write_Byte_SPI(address); //地址
Write_Byte_SPI(data>>8);
Write_Byte_SPI(data);
MP3_PORTF|=MP3_CMD_CS; //MP3_CMD_CS=1;
/*==============以下新增
SPCR = 0x50; //
SPSR = 0x01; //高速spi
//========================= */
}
void vs1003_data_write(uchar data)
{
MP3_PORTF&=~MP3_DATA_CS; //MP3_DATA_CS=0;
Write_Byte_SPI(data);
MP3_PORTF|=MP3_DATA_CS; //MP3_DATA_CS=1;
MP3_PORTF|=MP3_CMD_CS; //MP3_CMD_CS=1;
}
uint vs1003_read(uchar address)
{
uchar temp1=0;
uint temp=0;
while(!(PINE&MP3_DATA_REQ)) ;
MP3_PORTF|=MP3_DATA_CS; //MP3_DATA_CS=1;
MP3_PORTF&=~MP3_CMD_CS; //MP3_CMD_CS=0;
Write_Byte_SPI(0x03); //VS1011的读命令
Write_Byte_SPI(address); //地址
temp=Read_Byte_SPI();
temp=temp<<8;
temp1=Read_Byte_SPI();
temp=temp|temp1;
MP3_PORTF|=MP3_CMD_CS; //MP3_CMD_CS=1;
return temp;
}
void ResetDecodeTime(void)
{
vs1003_cmd_write(0x04,0x0000);
vs1003_cmd_write(0x04,0x0000);
}
uint GetDecodeTime(void)
{
return vs1003_read(0x04);
}
void vs1003_init(void)
{
vs1003_cmd_write(0x00,0x0800); //NEW MODE
// vs1003_cmd_write(0x02,0X1fff); //BASS
vs1003_cmd_write(0x03,0X6000); //CLOCK F
vs1003_cmd_write(0x0b,0x2020); //设音量
}
void vs1003_Reset()
{
unsigned char i=0;
while(1){
if(PINE&MP3_DATA_REQ) {
vs1003_data_write(0x00);
if(--i==0) break;
}
}
vs1003_cmd_write(0x00,0x0804);
_delay_ms(1.5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -