-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOK-STM767_VS1053b.h
159 lines (121 loc) · 5.29 KB
/
OK-STM767_VS1053b.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* ============================================================================ */
/* OK-STM767 V1.0 ????(STM32F767VGT6) VS1053b ??? ???? */
/* ============================================================================ */
/* Programmed by Duck_Yong Yoon in 2016. */
// -------------------------------------------------------------------------------
// ?? ????????? OK-STM767 ?? V1.0?? ???? ??????. ????? ????? ?????????
// ???? ?????? ????????.
// -------------------------------------------------------------------------------
// (1) ????? ??? : 216MHz
// (2) C ??????? : IAR EWARM V7.80.2
// (3) ????? ??? : High/Size
// (4) CSTACK ??? : 0x1000
// (5) ?????? : ?? ??? ???? OK-STM767.h?? ??? ???????? ??.
// -------------------------------------------------------------------------------
void Initialize_VS1053b(void); // initialize VS1053b
void VS1053b_SCI_Write(U08 address, U16 data); // write VS1053b control register
unsigned short VS1053b_SCI_Read(U08 address); // read VS1053b control register
void VS1053b_SCI_Read_Hexadecimal(U08 address); // read and display VS1053b control register
void VS1053b_software_reset(void); // VS1053b software reset to change music file
void VS1053b_SetVolume(U16 volume); // set volume to 5~250(range : 0~254)
void VS1053b_SetBassTreble(U16 bass, S16 treble);// set bass(0~15) and treble(-8 ~ +7)
/* ---------------------------------------------------------------------------- */
unsigned short volume; // volume value 5 ~ 250(range : 0~254)
unsigned short bass; // bass value 0 ~ 15
signed short treble; // treble value -8 ~ +7
/* ---------------------------------------------------------------------------- */
void Initialize_VS1053b(void) /* initialize VS1053b */
{
unsigned short word;
// ���� GPIO ���� ����
GPIOC->MODER &= 0xFFF000FF;
GPIOC->MODER |= 0x00011400;
GPIOC->ODR |= 0x00000160;
// �ϵ���� ����
GPIOC->BSRR = 0x01000000;
Delay_us(10);
GPIOC->BSRR = 0x00000100;
Delay_ms(10);
SPI3_medium_speed();
// �⺻ ��� ����
VS1053b_SCI_Write(0x00, 0x0800); // �Ϲ� ���
Delay_ms(1);
// Native SPI ��� Ȱ��ȭ (WAV ����� �ʿ�)
VS1053b_SCI_Write(0x00, 0x0820);
Delay_ms(1);
// Ŭ�� ����
VS1053b_SCI_Write(0x03, 0xE000); // 5.0x XTALI
Delay_ms(1);
// WAV ����� ���� �߰� ����
VS1053b_SCI_Write(0x05, 0xAC45); // 48kHz ���ø�, ������
VS1053b_SetVolume(200); // �ʱ� ���� ����
VS1053b_SetBassTreble(8, 3); // �⺻ ���� ����
// ���ڵ� ����
VS1053b_SCI_Write(0x07, 0x0020); // ���ڵ� Ÿ�Ӿƿ� ����
SPI3_high_speed();
// VS1053B Ĩ ���� Ȯ�� (������)
word = VS1053b_SCI_Read(0x01);
if((word & 0x00F0) == 0x0040) {
// VS1053 Ȯ�ε�
Delay_ms(1);
}
}
void VS1053b_SCI_Write(U08 address, U16 data) /* write VS1053b control register */
{
GPIOC->BSRR = 0x00200000; // -MP3_CS = 0
SPI3_write(0x02); // write instruction
SPI3_write(address); // write address
SPI3_write(data >> 8); // write control register
SPI3_write(data);
GPIOC->BSRR = 0x00000020; // -MP3_CS = 1
}
unsigned short VS1053b_SCI_Read(U08 address) /* read VS1053b control register */
{
unsigned short HB, LB;
GPIOC->BSRR = 0x00200000; // -MP3_CS = 0
SPI3_write(0x03); // read instruction
SPI3_write(address); // write address
HB = SPI3_write(0xFF); // read control regitser
LB = SPI3_write(0xFF);
GPIOC->BSRR = 0x00000020; // -MP3_CS = 1
return (HB << 8) + LB; // return control register
}
void VS1053b_SCI_Read_Hexadecimal(U08 address) /* read and display VS1053b control register */
{
GPIOC->BSRR = 0x00200000; // -MP3_CS = 0
SPI3_write(0x03); // read instruction
SPI3_write(address); // write address
TFT_hexadecimal(SPI3_write(0xFF),2); // read control regitser
TFT_hexadecimal(SPI3_write(0xFF),2);
GPIOC->BSRR = 0x00000020; // -MP3_CS = 1
}
/* ---------------------------------------------------------------------------- */
void VS1053b_software_reset(void) /* VS1053b software reset to change music file */
{
unsigned short command;
command = 0xFFFF; // wait until HDAT1 = HDAT0 = 0x0000
while(command == 0x0000)
{ command = VS1053b_SCI_Read(0x09);
command |= VS1053b_SCI_Read(0x08);
}
command = VS1053b_SCI_Read(0x00); // software reset
VS1053b_SCI_Write(0x00, command | 0x0004);
Delay_ms(2);
VS1053b_SCI_Write(0x04, 0); // clear decode time
}
void VS1053b_SetVolume(U16 volume) /* set volume(5~250) */
{
unsigned short value;
if(volume > 250) volume = 250; // limit max volume
if(volume < 5) volume = 5; // limit min volume
value = (254 - volume);
VS1053b_SCI_Write(0x0B, (value << 8) | value); // set left and right volume
}
void VS1053b_SetBassTreble(U16 bass, S16 treble) /* set bass(0~15) and treble(-8 ~ +7) */
{
unsigned short value;
value = 0x050A; // treble limit = 5kHz, bass limit = 100Hz
value = value + ((treble << 12) & 0xF000); // treble = -8 ~ +7
value = value + ((bass << 4) & 0x00F0); // bass = 0 ~ 15
VS1053b_SCI_Write(0x02, value); // set bass and treble
}