2440slib.s
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:7k
源码类别:

uCOS

开发平台:

C/C++

  1. ;=====================================================================
  2. ; File Name : 2440slib.s
  3. ; Function  : S3C2440  (Assembly)
  4. ; Date      : March 09, 2002
  5. ; Revision : Programming start (February 26,2002) -> SOP
  6. ; Revision : 03.11.2003 ver 0.0 Attatched for 2440
  7. ;=====================================================================
  8. ;Interrupt, FIQ/IRQ disable
  9. NOINT  EQU 0xc0    ; 1100 0000
  10. ;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.
  11.    GBLL    THUMBCODE
  12.    [ {CONFIG} = 16
  13. THUMBCODE SETL  {TRUE}
  14.  CODE32
  15.    |
  16. THUMBCODE SETL  {FALSE}
  17.    ]
  18.    MACRO
  19.      MOV_PC_LR
  20.      [ THUMBCODE
  21.        bx lr
  22.      |
  23.        mov pc,lr
  24.      ]
  25.    MEND
  26.    AREA |C$$code|, CODE, READONLY
  27. ;========================================
  28. ;Workaround of problem between LCD and Framebuffer
  29. ;========================================
  30. EXPORT SDRAMtest
  31. SDRAMtest
  32.      ldr r0,=0x31000000
  33.     ldr r1,=0x80000
  34.     mov r2,#0xf000000f
  35. LB2  str r2,[r0],#4
  36. str r2,[r0],#4
  37.     subs r1,r1,#4
  38.     bne LB2
  39.     mov pc,lr
  40.    
  41. ;==============
  42. ; CPSR I,F bit
  43. ;==============
  44. ;int SET_IF(void);
  45. ;The return value is current CPSR.
  46. EXPORT SET_IF
  47. SET_IF
  48.     ;This function works only if the processor is in previliged mode.
  49.    mrs r0,cpsr
  50.    mov r1,r0
  51.    orr r1,r1,#NOINT
  52.    msr cpsr_cxsf,r1
  53.    MOV_PC_LR
  54. ;void WR_IF(int cpsrValue);
  55.    EXPORT WR_IF
  56. WR_IF
  57.     ;This function works only if the processor is in previliged mode.
  58.    msr cpsr_cxsf,r0
  59.    MOV_PC_LR
  60. ;void CLR_IF(void);
  61.    EXPORT  CLR_IF
  62. CLR_IF
  63.     ;This function works only if the processor is in previliged mode.
  64.    mrs r0,cpsr
  65.    bic r0,r0,#NOINT
  66.    msr cpsr_cxsf,r0
  67.    MOV_PC_LR
  68. ;====================================
  69. ; MMU Cache/TLB/etc on/off functions
  70. ;====================================
  71. R1_I EQU (1<<12)
  72. R1_C EQU (1<<2)
  73. R1_A EQU (1<<1)
  74. R1_M    EQU (1)
  75. R1_iA EQU (1<<31)
  76. R1_nF   EQU (1<<30)
  77. ;void MMU_EnableICache(void)
  78.    EXPORT MMU_EnableICache
  79. MMU_EnableICache
  80.    mrc p15,0,r0,c1,c0,0
  81.    orr r0,r0,#R1_I
  82.    mcr p15,0,r0,c1,c0,0
  83.    MOV_PC_LR
  84. ;void MMU_DisableICache(void)
  85.    EXPORT MMU_DisableICache
  86. MMU_DisableICache
  87.    mrc p15,0,r0,c1,c0,0
  88.    bic r0,r0,#R1_I
  89.    mcr p15,0,r0,c1,c0,0
  90.    MOV_PC_LR
  91. ;void MMU_EnableDCache(void)
  92.    EXPORT MMU_EnableDCache
  93. MMU_EnableDCache
  94.    mrc p15,0,r0,c1,c0,0
  95.    orr r0,r0,#R1_C
  96.    mcr p15,0,r0,c1,c0,0
  97.    MOV_PC_LR
  98. ;void MMU_DisableDCache(void)
  99.    EXPORT MMU_DisableDCache
  100. MMU_DisableDCache
  101.    mrc p15,0,r0,c1,c0,0
  102.    bic r0,r0,#R1_C
  103.    mcr p15,0,r0,c1,c0,0
  104.    MOV_PC_LR
  105. ;void MMU_EnableAlignFault(void)
  106.    EXPORT MMU_EnableAlignFault
  107. MMU_EnableAlignFault
  108.    mrc p15,0,r0,c1,c0,0
  109.    orr r0,r0,#R1_A
  110.    mcr p15,0,r0,c1,c0,0
  111.    MOV_PC_LR
  112. ;void MMU_DisableAlignFault(void)
  113.    EXPORT MMU_DisableAlignFault
  114. MMU_DisableAlignFault
  115.    mrc p15,0,r0,c1,c0,0
  116.    bic r0,r0,#R1_A
  117.    mcr p15,0,r0,c1,c0,0
  118.    MOV_PC_LR
  119. ;void MMU_EnableMMU(void)
  120.    EXPORT MMU_EnableMMU
  121. MMU_EnableMMU
  122.    mrc p15,0,r0,c1,c0,0
  123.    orr r0,r0,#R1_M
  124.    mcr p15,0,r0,c1,c0,0
  125.    MOV_PC_LR
  126. ;void MMU_DisableMMU(void)
  127.    EXPORT MMU_DisableMMU
  128. MMU_DisableMMU
  129.    mrc p15,0,r0,c1,c0,0
  130.    bic r0,r0,#R1_M
  131.    mcr p15,0,r0,c1,c0,0
  132.    MOV_PC_LR
  133. ;void MMU_SetFastBusMode(void)
  134. ; FCLK:HCLK= 1:1
  135.   EXPORT MMU_SetFastBusMode
  136. MMU_SetFastBusMode
  137.    mrc p15,0,r0,c1,c0,0
  138.    bic r0,r0,#R1_iA:OR:R1_nF
  139.    mcr p15,0,r0,c1,c0,0
  140.    MOV_PC_LR
  141. ;void MMU_SetAsyncBusMode(void)
  142. ; FCLK:HCLK= 1:2
  143.    EXPORT MMU_SetAsyncBusMode
  144. MMU_SetAsyncBusMode
  145.    mrc p15,0,r0,c1,c0,0
  146.    orr r0,r0,#R1_nF:OR:R1_iA
  147.    mcr p15,0,r0,c1,c0,0
  148.    MOV_PC_LR
  149. ;=========================
  150. ; Set TTBase
  151. ;=========================
  152. ;void MMU_SetTTBase(int base)
  153.    EXPORT MMU_SetTTBase
  154. MMU_SetTTBase
  155.    ;ro=TTBase
  156.    mcr p15,0,r0,c2,c0,0
  157.    MOV_PC_LR
  158. ;=========================
  159. ; Set Domain
  160. ;=========================
  161. ;void MMU_SetDomain(int domain)
  162.    EXPORT MMU_SetDomain
  163. MMU_SetDomain
  164.    ;ro=domain
  165.    mcr p15,0,r0,c3,c0,0
  166.    MOV_PC_LR
  167. ;=========================
  168. ; ICache/DCache functions
  169. ;=========================
  170. ;void MMU_InvalidateIDCache(void)
  171.    EXPORT MMU_InvalidateIDCache
  172. MMU_InvalidateIDCache
  173.    mcr p15,0,r0,c7,c7,0
  174.    MOV_PC_LR
  175. ;void MMU_InvalidateICache(void)
  176.    EXPORT MMU_InvalidateICache
  177. MMU_InvalidateICache
  178.    mcr p15,0,r0,c7,c5,0
  179.    MOV_PC_LR
  180. ;void MMU_InvalidateICacheMVA(U32 mva)
  181.    EXPORT MMU_InvalidateICacheMVA
  182. MMU_InvalidateICacheMVA
  183.    ;r0=mva
  184.    mcr p15,0,r0,c7,c5,1
  185.    MOV_PC_LR
  186. ;void MMU_PrefetchICacheMVA(U32 mva)
  187.    EXPORT MMU_PrefetchICacheMVA
  188. MMU_PrefetchICacheMVA
  189.    ;r0=mva
  190.    mcr p15,0,r0,c7,c13,1
  191.    MOV_PC_LR
  192. ;void MMU_InvalidateDCache(void)
  193.    EXPORT MMU_InvalidateDCache
  194. MMU_InvalidateDCache
  195.    mcr p15,0,r0,c7,c6,0
  196.    MOV_PC_LR
  197. ;void MMU_InvalidateDCacheMVA(U32 mva)
  198.    EXPORT MMU_InvalidateDCacheMVA
  199. MMU_InvalidateDCacheMVA
  200.    ;r0=mva
  201.    mcr p15,0,r0,c7,c6,1
  202.    MOV_PC_LR
  203. ;void MMU_CleanDCacheMVA(U32 mva)
  204.    EXPORT MMU_CleanDCacheMVA
  205. MMU_CleanDCacheMVA
  206.    ;r0=mva
  207.    mcr p15,0,r0,c7,c10,1
  208.    MOV_PC_LR
  209. ;void MMU_CleanInvalidateDCacheMVA(U32 mva)
  210.    EXPORT MMU_CleanInvalidateDCacheMVA
  211. MMU_CleanInvalidateDCacheMVA
  212.    ;r0=mva
  213.    mcr p15,0,r0,c7,c14,1
  214.    MOV_PC_LR
  215. ;void MMU_CleanDCacheIndex(U32 index)
  216.    EXPORT MMU_CleanDCacheIndex
  217. MMU_CleanDCacheIndex
  218.    ;r0=index
  219.    mcr p15,0,r0,c7,c10,2
  220.    MOV_PC_LR
  221. ;void MMU_CleanInvalidateDCacheIndex(U32 index)
  222.    EXPORT MMU_CleanInvalidateDCacheIndex
  223. MMU_CleanInvalidateDCacheIndex
  224.    ;r0=index
  225.    mcr p15,0,r0,c7,c14,2
  226.    MOV_PC_LR
  227. ;void MMU_WaitForInterrupt(void)
  228.    EXPORT MMU_WaitForInterrupt
  229. MMU_WaitForInterrupt
  230.    mcr p15,0,r0,c7,c0,4
  231.    MOV_PC_LR
  232. ;===============
  233. ; TLB functions
  234. ;===============
  235. ;voic MMU_InvalidateTLB(void)
  236.    EXPORT MMU_InvalidateTLB
  237. MMU_InvalidateTLB
  238.    mcr p15,0,r0,c8,c7,0
  239.    MOV_PC_LR
  240. ;void MMU_InvalidateITLB(void)
  241.    EXPORT MMU_InvalidateITLB
  242. MMU_InvalidateITLB
  243.    mcr p15,0,r0,c8,c5,0
  244.    MOV_PC_LR
  245. ;void MMU_InvalidateITLBMVA(U32 mva)
  246.    EXPORT MMU_InvalidateITLBMVA
  247. MMU_InvalidateITLBMVA
  248.    ;ro=mva
  249.    mcr p15,0,r0,c8,c5,1
  250.    MOV_PC_LR
  251. ;void MMU_InvalidateDTLB(void)
  252. EXPORT MMU_InvalidateDTLB
  253. MMU_InvalidateDTLB
  254. mcr p15,0,r0,c8,c6,0
  255. MOV_PC_LR
  256. ;void MMU_InvalidateDTLBMVA(U32 mva)
  257. EXPORT MMU_InvalidateDTLBMVA
  258. MMU_InvalidateDTLBMVA
  259. ;r0=mva
  260. mcr p15,0,r0,c8,c6,1
  261. MOV_PC_LR
  262. ;=================
  263. ; Cache lock down
  264. ;=================
  265. ;void MMU_SetDCacheLockdownBase(U32 base)
  266.    EXPORT MMU_SetDCacheLockdownBase
  267. MMU_SetDCacheLockdownBase
  268.    ;r0= victim & lockdown base
  269.    mcr p15,0,r0,c9,c0,0
  270.    MOV_PC_LR
  271. ;void MMU_SetICacheLockdownBase(U32 base)
  272.    EXPORT MMU_SetICacheLockdownBase
  273. MMU_SetICacheLockdownBase
  274.    ;r0= victim & lockdown base
  275.    mcr p15,0,r0,c9,c0,1
  276.    MOV_PC_LR
  277. ;=================
  278. ; TLB lock down
  279. ;=================
  280. ;void MMU_SetDTLBLockdown(U32 baseVictim)
  281.    EXPORT MMU_SetDTLBLockdown
  282. MMU_SetDTLBLockdown
  283.    ;r0= baseVictim
  284.    mcr p15,0,r0,c10,c0,0
  285.    MOV_PC_LR
  286. ;void MMU_SetITLBLockdown(U32 baseVictim)
  287.    EXPORT MMU_SetITLBLockdown
  288. MMU_SetITLBLockdown
  289.    ;r0= baseVictim
  290.    mcr p15,0,r0,c10,c0,1
  291.    MOV_PC_LR
  292. ;============
  293. ; Process ID
  294. ;============
  295. ;void MMU_SetProcessId(U32 pid)
  296.    EXPORT MMU_SetProcessId
  297. MMU_SetProcessId
  298.    ;r0= pid
  299.    mcr p15,0,r0,c13,c0,0
  300.    MOV_PC_LR
  301.    END