34 #if defined(USB_DEVICE_ROM_DRIVER)
52 #define AUDIO_MAX_SAMPLE_FREQ 48000
54 #define AUDIO_SPEEP_UP_TRIGGER (audio_buffer_size*5/8)
56 #define AUDIO_NORMAL_SPEED_TRIGGER (audio_buffer_size*3/8)
64 #define AUDIO_MAX_PC 10
72 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
89 {0x3F, {0x2D, 0xF7}, {0x02, 0x0B}},
91 {0x3F, {0x40, 0xFF}, {0x01, 0x04}},
95 {0x3F, {0x80, 0xFF}, {0x01, 0x02}},
99 {0x3E, {0xF4, 0xF7}, {0x51, 0x52}},
101 {0x39, {0x62, 0x63}, {0xC3, 0xC5}}
111 uint16_t x_divide = 0, y_divide_down = 0, y_divide_up = 0;
113 uint32_t err, ErrorOptimal_down = 0xFFFF, ErrorOptimal_up = 0xFFFF;
118 for (N = 64; N > 0; N--) {
120 divider = (((uint64_t)(audio_format->
SampleRate) * 2 * (audio_format->
WordWidth) * 2) << 16) * N / pClk;
121 if (divider < (1 << 16)) {
129 for (y = 255; y > 0; y--) {
131 if (x & (0xFF000000)) {
137 err = (0x10000 - dif);
139 if((x & 0x00FF0000) == 0x00FF0000)
continue;
140 if (err < ErrorOptimal_up ) {
141 ErrorOptimal_up = err;
147 if (err < ErrorOptimal_down) {
148 ErrorOptimal_down = err;
154 x_divide = ((uint64_t)y_divide_up * (audio_format->
SampleRate) * 2 * (audio_format->
WordWidth) * N * 2) / pClk;
156 if (x_divide >= 256) {
162 I2S_Config->
RATEUP.
X = x_divide;
163 I2S_Config->
RATEUP.
Y = y_divide_up;
165 x_divide = ((uint64_t)y_divide_down * (audio_format->
SampleRate) * 2 * (audio_format->
WordWidth) * N * 2) / pClk;
166 if (x_divide >= 256) {
180 audio_buffer_count = 0;
181 audio_buffer_wr_index = 0;
182 audio_buffer_rd_index = 0;
187 audio_buffer_wr_index += last_packet_size;
188 audio_buffer_count += last_packet_size;
189 if (audio_buffer_count > audio_buffer_size) {
192 if (audio_buffer_wr_index >= audio_buffer_size) {
200 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
212 NVIC_EnableIRQ(I2S_IRQn);
215 switch (samplefreq) {
217 I2S_SpeedConfig_index = 1;
218 audio_buffer_size = 1764;
221 I2S_SpeedConfig_index = 3;
222 audio_buffer_size = 1764;
225 I2S_SpeedConfig_index = 5;
226 audio_buffer_size = 1764;
230 I2S_SpeedConfig_index = 0;
231 audio_buffer_size = samplefreq * 4 *
AUDIO_MAX_PC / 1000;
234 I2S_SpeedConfig_index = 2;
235 audio_buffer_size = samplefreq * 4 *
AUDIO_MAX_PC / 1000;
238 I2S_SpeedConfig_index = 4;
239 audio_buffer_size = samplefreq * 4 *
AUDIO_MAX_PC / 1000;
242 I2S_SpeedConfig_index = 6;
244 audio_buffer_size = samplefreq * 4 *
AUDIO_MAX_PC / 1000;
249 I2S_SpeedConfig[I2S_SpeedConfig_index].RATEDOWN.
X,
250 I2S_SpeedConfig[I2S_SpeedConfig_index].
RATEDOWN.
Y);
251 audio_buffer_size*=2;
263 NVIC_EnableIRQ(TIMER0_IRQn);
269 audio_buffer_size = 1764;
276 audio_buffer_size = samplefreq * 4 *
AUDIO_MAX_PC / 1000;
284 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
285 NVIC_DisableIRQ(I2S_IRQn);
289 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
293 static bool double_speed =
false;
297 for (i = 0; i < 8 - txlevel; i++) {
298 if (audio_buffer_count >= 4) {
299 audio_buffer_count -= 4;
300 sample = *(
uint32_t *) (audio_buffer + audio_buffer_rd_index);
301 audio_buffer_rd_index += 4;
302 if (audio_buffer_rd_index >= audio_buffer_size) {
309 if(audio_buffer_size != 0)
314 I2S_SpeedConfig[I2S_SpeedConfig_index].RATEUP.
X,
315 I2S_SpeedConfig[I2S_SpeedConfig_index].
RATEUP.
Y);
321 I2S_SpeedConfig[I2S_SpeedConfig_index].RATEDOWN.
X,
322 I2S_SpeedConfig[I2S_SpeedConfig_index].
RATEDOWN.
Y);
323 double_speed =
false;
334 if(audio_buffer_count >= 2)
336 audio_buffer_count -= 2;
337 sample = *(int16_t *)(audio_buffer + audio_buffer_rd_index);
338 audio_buffer_rd_index+=2;
339 if(audio_buffer_rd_index >= audio_buffer_size)
348 if((audio_buffer_size != 0) && (audio_buffer_count >= (audio_buffer_size/2)))
350 audio_buffer_count-=2;
351 audio_buffer_rd_index+=2;
352 if(audio_buffer_rd_index >= audio_buffer_size)
375 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
379 #if defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
392 #if defined(__LPC43XX__ )
398 #if defined(__LPC43XX__ )
406 #if defined(USB_DEVICE_ROM_DRIVER)
411 #if !defined(USB_DEVICE_ROM_DRIVER)
425 #if !defined(USB_DEVICE_ROM_DRIVER)
437 bool ConfigSuccess =
true;
460 const uint8_t EndpointProperty,
462 const uint8_t EndpointControl,
470 switch (EndpointProperty) {
473 if (DataLength !=
NULL) {
488 if (DataLength !=
NULL) {