



//----- defines -----
#define VS_XTAL				12288000UL

#define CS        0
#define BSYNC	  2
#define DREQ	  3
#define RST       4
#define VS_DDR	DDRF
#define VS_PORT PORTF
#define VS_PIN	PINF

//Opcodes
#define VS_READ 			0x03
#define VS_WRITE 			0x02

//Registers
#define VS_MODE 			0x00 	//Mode control
#define SM_RESET        	(1<<2)	//Soft Reset
#define SM_CANCEL        	(1<<3)	//Cancel Decoding
#define SM_TESTS			0x20	// Test mode
#define SM_STREAM        	(1<<6)	//Stream Mode
#define SM_SDINEW       	0x800	//VS1002 native SPI modes

#define VS_STATUS 			0x01 	//Status
#define VS_BASS 			0x02 	//Built-in bass/treble enhancer

#define VS_CLOCKF 			0x03 	//Clock freq + multiplier
#define SC_MUL_2X			0x2000
#define SC_MUL_4X			0xA000

#define VS_DECODE_TIME 		0x04 	//Decode time in seconds
#define VS_AUDATA 			0x05 	//Misc. audio data
#define VS_WRAM 			0x06 	//RAM write/read
#define VS_WRAMADDR 		0x07 	//Base address for RAM write/read
#define VS_HDAT0 			0x08 	//Stream header data 0
#define VS_HDAT1 			0x09 	//Stream header data 1
#define VS_AIADDR 			0x0A 	//Start address of application
#define VS_VOL 				0x0B 	//Volume control
#define VS_AICTRL0 			0x0C 	//Application control register 0
#define VS_AICTRL1 			0x0D 	//Application control register 1
#define VS_AICTRL2 			0x0E 	//Application control register 2
#define VS_AICTRL3 			0x0F 	//Application control register 3

//VS (VS1053)
#define VS_DREQ_CHECK()		(VS_PIN & (1<<DREQ))
#define VS_RESET_DISABLE()	VS_PORT |=  (1<<RST)
#define VS_RESET_ENABLE()	VS_PORT &= ~(1<<RST)
#define VS_CS_DISABLE()		VS_PORT |=  (1<<CS)
#define VS_CS_ENABLE()		VS_PORT &= ~(1<<CS)
#define VS_DCS_DISABLE()	VS_PORT |=  (1<<BSYNC)
#define VS_DCS_ENABLE()		VS_PORT &= ~(1<<BSYNC)


//----- prototypes -----
unsigned char				vs_getvolume(void);
void 						vs_setvolume(unsigned char vol);
unsigned char 				vs_request(void);
void 						vs_data32(char *data);
void 						vs_data(unsigned char data);
void 						vs_write(unsigned char addr, unsigned int data);
unsigned int				vs_read(unsigned char addr);
void 						vs_spi_write(unsigned char c);
unsigned char 				vs_spi_read(void);
void 						vs_reset(void);
void 						vs_init(void);
void 						vs_sine_test(unsigned char frequency);


