romfinit.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:1k
源码类别:

DVD

开发平台:

C/C++

  1. extern char _etext[];
  2. extern char _data[];
  3. extern char _edata[];
  4. extern char _bstart[];
  5. extern  char _bend[];
  6. extern char _stextf[];
  7. extern char _textf[];
  8. extern char _etextf[];
  9. #include "config.h"
  10. #include "regmap.h"
  11. #include "global.h"
  12. #include "dma.h"
  13. #include "reset.h"
  14. //#define     ROMFINIT_DBG        1
  15. void rominit(void)
  16. {
  17. char *src = _etext;
  18. char *dst = _data;
  19. /*
  20. ** ROM has initial data at end of text
  21. ** copy from _etext to (_data,_edata) 
  22. */
  23. do {
  24. *dst++ = *src++;
  25. } while (dst<_edata);
  26. /* Zero bss */
  27. dst = _bstart;
  28. do {
  29. *dst++ = 0;
  30. } while (dst<_bend);
  31. /*
  32. ** reset system interface
  33. */
  34. reset_system();
  35. #if 0
  36. /*
  37. ** Copy shadowed rom code to SDRAM.
  38. **
  39. ** ROM has fast-text (in SDRAM) at end of
  40. ** copy from (_stextf,_etext) to _textf
  41. */
  42. {
  43. int i;
  44. int rx = 0;
  45. int ry = 0;
  46. int rw = RBV_W;
  47. src = _stextf;
  48. #ifdef DOWNLOAD_WITH_DMA
  49. do {
  50. for (i=0;i<32;i++)
  51. {
  52. dma_buf.b[i] = *src++;
  53. }
  54. DMA_save(VADDR_MODE_ROMIMAGE, ry, rx, 0, 32);
  55. ADDR_adv_one(rx,ry,rw,32);
  56. DMA_wait();
  57. } while (src<_etextf);
  58. #else
  59. dst = _textf;
  60. do {
  61. *dst++ = *src++;
  62. } while (src<_etextf);
  63. #endif
  64.         }
  65. #endif
  66. }