asm-mmu.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:4k
源码类别:

uCOS

开发平台:

C/C++

  1. /***************************************************************************
  2. Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
  3. by threewter 2005.2.23
  4. ***************************************************************************/
  5. /***************************************************************************
  6.     #说明: 
  7. ----------------------------------  Bug  --------------------------------------
  8. ----------------------------------  TODO list  --------------------------------------
  9. ----------------------------------修正--------------------------------------
  10. 2005-2-23 创建
  11. ***************************************************************************/
  12. #ifndef __ASM_MMU_H__
  13. #define __ASM_MMU_H__
  14. //====================================
  15. // MMU Cache/TLB/etc on/off functions
  16. //====================================
  17. #define R1_I (1<<12)
  18. #define R1_C (1<<2)
  19. #define R1_A (1<<1)
  20. #define R1_M (1)
  21. #define R1_iA (1u<<31)
  22. #define R1_nF (1<<30)
  23. __inline void MMU_EnableICache(void)
  24. { int tmp;
  25. __asm{
  26. mrc p15,0,tmp,c1,c0,0
  27. orr tmp,tmp,#R1_I
  28. mcr p15,0,tmp,c1,c0,0
  29. }
  30. }
  31. __inline void MMU_DisableICache(void)
  32. { int tmp;
  33. __asm{
  34. mrc p15,0,tmp,c1,c0,0
  35. bic tmp,tmp,#R1_I
  36. mcr p15,0,tmp,c1,c0,0
  37. }
  38. }
  39. __inline void MMU_EnableDCache(void)
  40. { int tmp;
  41. __asm{
  42. mrc p15,0,tmp,c1,c0,0
  43. orr tmp,tmp,#R1_C
  44. mcr p15,0,tmp,c1,c0,0
  45. }
  46. }
  47. __inline void MMU_DisableDCache(void)
  48. { int tmp;
  49. __asm{
  50. mrc p15,0,tmp,c1,c0,0
  51. bic tmp,tmp,#R1_C
  52. mcr p15,0,tmp,c1,c0,0
  53. }
  54. }
  55. __inline void MMU_EnableAlignFault(void)
  56. { int tmp;
  57. __asm{
  58. mrc p15,0,tmp,c1,c0,0
  59. orr tmp,tmp,#R1_A
  60. mcr p15,0,tmp,c1,c0,0
  61. }
  62. }
  63. __inline void MMU_DisableAlignFault(void)
  64. { int tmp;
  65. __asm{
  66. mrc p15,0,tmp,c1,c0,0
  67. bic tmp,tmp,#R1_A
  68. mcr p15,0,tmp,c1,c0,0
  69. }
  70. }
  71. __inline void MMU_EnableMMU(void)
  72. { int tmp;
  73. __asm{
  74. mrc p15,0,tmp,c1,c0,0
  75. orr tmp,tmp,#R1_M
  76. mcr p15,0,tmp,c1,c0,0
  77. }
  78. }
  79. __inline void MMU_DisableMMU(void)
  80. { int tmp;
  81. __asm{
  82. mrc p15,0,tmp,c1,c0,0
  83. bic tmp,tmp,#R1_M
  84. mcr p15,0,tmp,c1,c0,0
  85. }
  86. }
  87. __inline void MMU_SetTTBase(U32 base){__asm{mcr p15,0,base,c2,c0,0}}
  88. __inline void MMU_SetDomain(U32 domain){__asm{mcr p15,0,domain,c3,c0,0}}
  89. __inline void MMU_SetFastBusMode(void)          //GCLK=HCLK
  90. { int tmp;
  91. __asm{
  92. mrc  p15,0,tmp,c1,c0,0
  93. bic  tmp,tmp,#R1_iA|R1_nF
  94. mcr  p15,0,tmp,c1,c0,0
  95. }
  96. }
  97. __inline void MMU_SetAsyncBusMode(void)         //GCLK=FCLK @(FCLK>=HCLK)
  98. { int tmp;
  99. __asm{
  100. mrc  p15,0,tmp,c1,c0,0
  101. orr  tmp,tmp,#R1_iA|R1_nF
  102. mcr  p15,0,tmp,c1,c0,0
  103. }
  104. }
  105. __inline void MMU_InvalidateIDCache(void){__asm{mcr  p15,0,r0,c7,c7,0}}
  106. __inline void MMU_InvalidateICache(void){__asm{mcr  p15,0,r0,c7,c5,0}}
  107. __inline void MMU_InvalidateICacheMVA(U32 mva){__asm{mcr  p15,0,mva,c7,c5,1}}
  108. __inline void MMU_PrefetchICacheMVA(U32 mva){__asm{mcr  p15,0,mva,c7,c13,1}}
  109. __inline void MMU_InvalidateDCache(void){__asm{mcr  p15,0,r0,c7,c6,0}}
  110. __inline void MMU_InvalidateDCacheMVA(U32 mva){__asm{mcr  p15,0,mva,c7,c6,1}}
  111. __inline void MMU_CleanDCacheMVA(U32 mva){__asm{mcr  p15,0,mva,c7,c10,1}}
  112. __inline void MMU_CleanInvalidateDCacheMVA(U32 mva){__asm{mcr  p15,0,mva,c7,c14,1}}
  113. __inline void MMU_CleanDCacheIndex(U32 index){__asm{mcr  p15,0,index,c7,c10,2}}
  114. __inline void MMU_CleanInvalidateDCacheIndex(U32 index){__asm{mcr  p15,0,index,c7,c14,2}}
  115. __inline void MMU_WaitForInterrupt(void){__asm{mcr  p15,0,r0,c7,c0,4}}
  116.         
  117. __inline void MMU_InvalidateTLB(void){__asm{mcr  p15,0,r0,c8,c7,0}}
  118. __inline void MMU_InvalidateITLB(void){__asm{mcr  p15,0,r0,c8,c5,0}}
  119. __inline void MMU_InvalidateITLBMVA(U32 mva){__asm{mcr  p15,0,mva,c8,c5,1}}
  120. __inline void MMU_InvalidateDTLB(void){__asm{mcr p15,0,r0,c8,c6,0}}
  121. __inline void MMU_InvalidateDTLBMVA(U32 mva){__asm{mcr p15,0,mva,c8,c6,1}}
  122. __inline void MMU_SetDCacheLockdownBase(U32 base){__asm{mcr  p15,0,base,c9,c0,0}}
  123. __inline void MMU_SetICacheLockdownBase(U32 base){__asm{mcr  p15,0,base,c9,c0,1}}
  124. __inline void MMU_SetDTLBLockdown(U32 baseVictim){__asm{mcr  p15,0,baseVictim,c10,c0,0}}
  125. __inline void MMU_SetITLBLockdown(U32 baseVictim){__asm{mcr  p15,0,baseVictim,c10,c0,1}}
  126. __inline void MMU_SetProcessId(U32 pid){__asm{mcr  p15,0,pid,c13,c0,0}}
  127. #endif //#ifndef __ASM_MMU_H__