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

DVD

开发平台:

C/C++

  1. #include "regdef.h"
  2. #include "regmapa.h"
  3. #include "config.h"
  4. #include "user_init.h"
  5. #ifdef SPHE1000
  6. #define STATUS_ENDIAN_LITTLE    (0<<25)
  7. #define STATUS_SETUP            STATUS_COP0|STATUS_ENDIAN_LITTLE|STATUS_BEV
  8. #endif //#ifdef SPHE1000
  9. .text
  10. .global init_gp_sp
  11. .extern s_gp
  12. .extern _gp
  13. .global _cpu_set_intr_mask
  14. .global _cpu_get_intr_mask
  15. .global _cpu_intr_config
  16. .global _cpu_intr_enable
  17. .global _cpu_intr_disable
  18. .global _cpu_invalidate_dcache
  19. .global _cpu_get_status
  20. .global _cpu_get_cause
  21. .global _cpu_get_epc
  22. .global _cpu_get_badva
  23. .text
  24. .ent init_gp_sp
  25. init_gp_sp:
  26. #ifdef SPHE1000
  27.                 // ENABLE COP0/3
  28.                 mfc0    t1, C0_STATUS
  29.                 li      t0, STATUS_SETUP
  30. //or      t1, t0
  31.                 mtc0    t0, C0_STATUS
  32.                 nop
  33.                 nop
  34.                 nop
  35. #endif //#ifdef SPHE1000
  36. // setup register-file pointer
  37. li s6, RGST_OFFSET
  38. la sp, _stkptr              // set up stack pointer
  39. //lw gp, s_gp // set up GP
  40. la gp, _gp // set up GP
  41. j boot_flash_main
  42. .end init_gp_sp          
  43. /*
  44. ** FUNCTION
  45. ** UINT32 cpu_set_intr_mask(UINT32 mask[7:0]);
  46. **
  47. ** DESCRIPTION
  48. ** set r3k CP0 interrupt mask, 1 to enable.
  49. */
  50. .ent _cpu_set_intr_mask
  51. _cpu_set_intr_mask:
  52.                 mfc0    t0, C0_STATUS /* get STATUS[31:0] in t0 */
  53. andi a0, 0x00ff /* clip a0 (new mask) */
  54. sll a0, 8 /* {IM[7:0], 8'b0} */
  55. andi t1, t0, 0xff00 /* get current IM in t1 */
  56. xor t0, t1 /* toggle mask bits for t0 */
  57. or t0, a0 /* insert new intr_mask to t0 */
  58.                 mtc0    t0, C0_STATUS /* write to STATUS */
  59. srl v0, t1, 8 /* return last IM */
  60. jr ra
  61. .end _cpu_set_intr_mask
  62. /*
  63. ** FUNCION
  64. ** UINT32 cpu_get_intr_mask(void);
  65. **
  66. ** DESCRIPTION
  67. ** get r3k CP0 interrupt mask, 1:enabled, 0:disabled
  68. */
  69. .ent _cpu_get_intr_mask
  70. _cpu_get_intr_mask:
  71. mfc0 v0, C0_STATUS
  72. srl v0, 8
  73. andi v0, 0x00ff
  74. jr ra
  75. .end _cpu_get_intr_mask
  76. /*
  77. ** FUNCION
  78. ** void cpu_intr_disable(void);
  79. **
  80. ** DESCRIPTION
  81. ** disable R3000 interrupt (globally)
  82. */
  83. .ent _cpu_intr_config
  84. _cpu_intr_config:
  85. beqz a0, _cpu_intr_disable
  86. /* fall thru if 1 */
  87. /*
  88. ** FUNCION
  89. ** int cpu_intr_enable(void);
  90. **
  91. ** DESCRIPTIN
  92. ** enable R3000 interrupt (globally) 
  93. */
  94. _cpu_intr_enable:
  95. mfc0 v0, C0_STATUS
  96. ori a0, v0, STATUS_IEc /* enable STATUS_IEc */
  97. _cpu_intr_status_set:
  98. mtc0 a0, C0_STATUS
  99. andi v0, 1 /* get last status */
  100. jr ra
  101. /*
  102. ** FUNCION
  103. ** int cpu_intr_disable(void);
  104. **
  105. ** DESCRIPTION
  106. ** disable R3000 interrupt (globally)
  107. */
  108. _cpu_intr_disable:
  109. mfc0 v0, C0_STATUS
  110. li a0, ~STATUS_IEc
  111. and a0, v0
  112. b _cpu_intr_status_set
  113. .end _cpu_intr_config
  114. /*
  115. ** FUNCTION
  116. ** void cpu_invalidate_dcache
  117. **
  118. ** DESCRIPTION
  119. ** invalidate data cache
  120. */
  121. .global _cpu_invalidate_dcache
  122. .ent _cpu_invalidate_dcache
  123. _cpu_invalidate_dcache:
  124. //
  125. // invalidate/reset cache
  126. //
  127. .set noreorder
  128. mtc0 zero, C0_CCTL //
  129. li v0, CCTL_DIvl // 0 to 1 transition
  130. mtc0 v0, C0_CCTL //
  131. mtc0 zero, C0_CCTL //
  132. .set reorder
  133. nop
  134. nop
  135. nop
  136. nop
  137. jr  ra
  138. .end _cpu_invalidate_dcache
  139. /*
  140. ** cpu_get_status
  141. */
  142. _cpu_get_status:
  143. mfc0 v0, C0_STATUS
  144. jr ra
  145. /*
  146. ** cpu_get_cause
  147. */
  148. _cpu_get_cause:
  149. mfc0 v0, C0_CAUSE
  150. jr ra
  151. /*
  152. ** cpu_get_epc
  153. */
  154. _cpu_get_epc:
  155. mfc0 v0, C0_EPC
  156. jr ra
  157. /*
  158. ** cpu_get_badva
  159. */
  160. _cpu_get_badva:
  161. mfc0 v0, C0_BADVA
  162. jr ra