📄 new_download.lst
字号:
237 4 break;
238 4 }
239 3
240 3 dspptr++;
241 3 }
C51 COMPILER V8.08 NEW_DOWNLOAD 08/06/2008 15:58:38 PAGE 5
242 2
243 2 len = *dspptr++;
244 2 }
245 1
246 1 WR_HPIAL = 0x00; // 向地址0x007F写入pc指针加载地址
247 1 WR_HPIAH = 0x7F;
248 1 WR_HPID1L = 0x01; // THE START ADDRESS OF RUN
249 1 WR_HPID1H = 0x00;
250 1
251 1 addr = DSP_READY;
252 1
253 1 WR_HPIAL = addr / 256;
254 1 WR_HPIAH = addr % 256;
255 1
256 1 while(RD_HPID1H != 0x01); // 等待DSP准备好
257 1
258 1 // 第二阶段
259 1 for(i = 0; i < 5; i++) // 初始化所有握手信号为0
260 1 {
261 2 addr = DSP_READY - 1; // HCNTL0 = 0,HCNTL0 = 1,每写1次,HPIA事先增1
262 2
263 2 WR_HPIAL = addr / 256;
264 2 WR_HPIAH = addr % 256;
265 2
266 2 WR_HPID0L = 0x00;
267 2 WR_HPID0H = 0x00;
268 2 }
269 1
270 1 for(app_stage = APP_PROG; app_stage <=APP_DATA; app_stage++)
271 1 {
272 2 if(app_stage == APP_PROG)
273 2 {
274 3 dspptr = dsp_program;
275 3 printf("The second stage:Load DSP application program.\n");
276 3 }
277 2 else if(app_stage == APP_DATA)
278 2 {
279 3 #ifdef DATA
dspptr = dsp_data;
printf("The third stage:Load DSP application data.\n");
#else
283 3 printf("There is no DSP application data to load.\n");
284 3 break;
285 3 #endif
286 3 }
287 2
288 2 len = *dspptr;
289 2
290 2 while(len != 0)
291 2 {
292 3 printf("len = %d\n", len);
293 3
294 3 correct = 1;
295 3 temp = dspptr;
296 3 addr = BOOT_BUF_START - 1;
297 3
298 3 WR_HPIAL = addr / 256;
299 3 WR_HPIAH = addr % 256;
300 3
301 3 for(i = 0; i < len+2; i++)
302 3 {
303 4 WR_HPID0L = *dspptr / 256;
C51 COMPILER V8.08 NEW_DOWNLOAD 08/06/2008 15:58:38 PAGE 6
304 4 WR_HPID0H = *dspptr % 256;
305 4
306 4 dspptr++;
307 4 }
308 3
309 3 dspptr = temp; // 指针回到刚刚写完的len长度数据的首字节,以便读出进行校验
310 3
311 3 addr++; // HCNTL0 = 0,HCNTL0 = 1,每读1次,HPIA事后增1
312 3 WR_HPIAL = addr / 256;
313 3 WR_HPIAH = addr % 256;
314 3
315 3 for (i = 0; i < len+2; i++)
316 3 {
317 4 if (RD_HPID0L != *dspptr / 256) // 写入的数据不等于读出的数据
318 4 {
319 5 dspptr = temp; // 将dspptr指回到该len长度的首字节,以便重新写该len长度的数据
320 5 correct = 0;
321 5 printf("Error occurs!\n");
322 5 break;
323 5 }
324 4
325 4 if (RD_HPID0H != *dspptr % 256)
326 4 {
327 5 dspptr = temp;
328 5 correct = 0;
329 5 printf("Error occurs!\n");
330 5 break;
331 5 }
332 4
333 4 dspptr++;
334 4 }
335 3
336 3 if(correct)
337 3 {
338 4 if(app_stage == APP_PROG)
339 4 {
340 5 addr = PROG_BUF_READY;
341 5 }
342 4 else
343 4 {
344 5 addr = DATA_BUF_READY;
345 5 }
346 4
347 4 WR_HPIAL = addr / 256;
348 4 WR_HPIAH = addr % 256;
349 4
350 4 WR_HPID1L = 0x00;
351 4 WR_HPID1H = 0x01; // 将标志位置1以通知DSP处理
352 4
353 4 printf("waiting...\n");
354 4 //while(RD_HPID1H == 0x01); // 等待DSP完成数据的下载
355 4 do
356 4 {
357 5 delay(0xffff);
358 5 }while(RD_HPID1H == 0x01);
359 4 }
360 3
361 3 len = *dspptr;
362 3 }
363 2 }
364 1
365 1 addr = COPY_DONE;
C51 COMPILER V8.08 NEW_DOWNLOAD 08/06/2008 15:58:38 PAGE 7
366 1
367 1 WR_HPIAL = addr / 256;
368 1 WR_HPIAH = addr % 256;
369 1
370 1 WR_HPID1L = 0x00;
371 1 WR_HPID1H = 0x01;
372 1
373 1 printf("HPI boot ends.\n");
374 1 }
375
376 Timer0() interrupt 1
377 {
378 1 ok = 1;
379 1 ms++;
380 1 }
381
382 void init_51(void)
383 {
384 1 TMOD = 0x21;
385 1 SCON = 0x40;
386 1 REN = 1;
387 1 TH1 = 0xfd;
388 1 TL1 = 0xfd;
389 1 ET1 = 0;
390 1 ES = 0;
391 1 IT0 = 1;
392 1 EX0 = 0;
393 1 ET0 = 1;
394 1 EA = 1;
395 1 TR1 = 1;
396 1 TR0 = 1;
397 1 }
398 /***************************************************************/
399
400 /*
401 unsigned char getDSP()
402 {
403 WR_HPIL_A = 0;
404 WR_HPIH_A = 0x7d;
405 return(RD_HPIH0_D);
406 }
407 */
408 void init_aic23(void)
409 {
410 1 write_aic23(RESET, 0);
411 1 write_aic23(D_INTERFACE_ACT, 0x001);
412 1 write_aic23(POWER_CON, 0);
413 1 //write_aic23(SAMPLE_RATE, 0x022); //44.1k
414 1 //write_aic23(SAMPLE_RATE, 0x062); //22.05k
415 1 write_aic23(SAMPLE_RATE, 0x02e); //8.021k
416 1
417 1 write_aic23(L_LINE_VOLUME, 0x0117);
418 1 write_aic23(L_LINE_VOLUME, 0x0117);
419 1
420 1 volume = 100;
421 1 write_aic23(L_HEADPHONE_VOLUME, 0x0180+volume); //0x1e4
422 1 write_aic23(R_HEADPHONE_VOLUME, 0x0180+volume);
423 1
424 1 //write_aic23(A_AUDIO_PATH, 0x009); //bypass DAC OFF
425 1 //write_aic23(A_AUDIO_PATH, 0x014); //MIC ADC DAC ON 0DB
426 1 //write_aic23(A_AUDIO_PATH, 0x1fc); //bypass MIC ADC DAC ON 0DB sidetone
427 1 write_aic23(A_AUDIO_PATH, 0x07d); //bypass MIC ADC DAC ON 20DB sidetone(-6db)
C51 COMPILER V8.08 NEW_DOWNLOAD 08/06/2008 15:58:38 PAGE 8
428 1 //write_AIC23(A_AUDIO_PATH, 0x011); //LINE ADC DAC ON
429 1
430 1 write_aic23(D_AUDIO_PATH, 0x04);
431 1
432 1 write_aic23(D_AUDIO_INTERFACE, 0x043); //master dsp mode
433 1 }
434
435 void write_aic23(uint8 addr, uint16 dat)
436 {
437 1 uint8 i;
438 1 dat |= addr << 9; // A[15..9]控制地址,A[8..0]控制数据
439 1 CS=0;
440 1 for (i = 0; i < 16; i++) // 模拟SPI时序发送
441 1 {
442 2 SCLK = 0;
443 2 if ((dat << i) & 0x8000)
444 2 SDIN = 1;
445 2 else
446 2 SDIN = 0;
447 2 SCLK = 1;
448 2 }
449 1 SCLK = 0;
450 1 CS = 1;
451 1 }
452 /*
453 unsigned char getkey()
454 {
455 uint8 key;
456 if(RI)
457 {
458 RI = 0;
459 key = SBUF;
460 return(key);
461 }
462 return(255);
463 }
464 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1133 ----
CONSTANT SIZE = 2096 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 13
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -