2440slib.s
上传用户:jankzhpno
上传日期:2022-08-03
资源大小:4763k
文件大小:7k
源码类别:

Windows CE

开发平台:

Visual 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.    EXPORT EnterCritical
  28. EnterCritical   
  29. mrs r1, cpsr
  30. str r1, [r0]
  31. orr r1, r1, #NOINT
  32. msr cpsr_cxsf, r1
  33. MOV_PC_LR
  34. ;restore cpsr, r0 = address to restore cpsr
  35. EXPORT ExitCritical
  36. ExitCritical
  37. ldr r1, [r0]
  38. msr cpsr_cxsf, r1
  39. MOV_PC_LR
  40. ;==============
  41. ; CPSR I,F bit
  42. ;==============
  43. ;int SET_IF(void);
  44. ;The return value is current CPSR.
  45. EXPORT SET_IF
  46. SET_IF
  47.     ;This function works only if the processor is in previliged mode.
  48.    mrs r0,cpsr
  49.    mov r1,r0
  50.    orr r1,r1,#NOINT
  51.    msr cpsr_cxsf,r1
  52.    MOV_PC_LR
  53. ;void WR_IF(int cpsrValue);
  54.    EXPORT WR_IF
  55. WR_IF
  56.     ;This function works only if the processor is in previliged mode.
  57.    msr cpsr_cxsf,r0
  58.    MOV_PC_LR
  59. ;void CLR_IF(void);
  60.    EXPORT  CLR_IF
  61. CLR_IF
  62.     ;This function works only if the processor is in previliged mode.
  63.    mrs r0,cpsr
  64.    bic r0,r0,#NOINT
  65.    msr cpsr_cxsf,r0
  66.    MOV_PC_LR
  67.    
  68.     EXPORT outportw
  69. outportw strh r0, [r1]
  70. MOV_PC_LR
  71. EXPORT inportw
  72. inportw ldrh r0, [r0]
  73. MOV_PC_LR
  74. ;====================================
  75. ; MMU Cache/TLB/etc on/off functions
  76. ;====================================
  77. R1_I EQU (1<<12)
  78. R1_C EQU (1<<2)
  79. R1_A EQU (1<<1)
  80. R1_M    EQU (1)
  81. R1_iA EQU (1<<31)
  82. R1_nF   EQU (1<<30)
  83. ;void MMU_EnableICache(void)
  84.    EXPORT MMU_EnableICache
  85. MMU_EnableICache
  86.    mrc p15,0,r0,c1,c0,0
  87.    orr r0,r0,#R1_I
  88.    mcr p15,0,r0,c1,c0,0
  89.    MOV_PC_LR
  90. ;void MMU_DisableICache(void)
  91.    EXPORT MMU_DisableICache
  92. MMU_DisableICache
  93.    mrc p15,0,r0,c1,c0,0
  94.    bic r0,r0,#R1_I
  95.    mcr p15,0,r0,c1,c0,0
  96.    MOV_PC_LR
  97. ;void MMU_EnableDCache(void)
  98.    EXPORT MMU_EnableDCache
  99. MMU_EnableDCache
  100.    mrc p15,0,r0,c1,c0,0
  101.    orr r0,r0,#R1_C
  102.    mcr p15,0,r0,c1,c0,0
  103.    MOV_PC_LR
  104. ;void MMU_DisableDCache(void)
  105.    EXPORT MMU_DisableDCache
  106. MMU_DisableDCache
  107.    mrc p15,0,r0,c1,c0,0
  108.    bic r0,r0,#R1_C
  109.    mcr p15,0,r0,c1,c0,0
  110.    MOV_PC_LR
  111. ;void MMU_EnableAlignFault(void)
  112.    EXPORT MMU_EnableAlignFault
  113. MMU_EnableAlignFault
  114.    mrc p15,0,r0,c1,c0,0
  115.    orr r0,r0,#R1_A
  116.    mcr p15,0,r0,c1,c0,0
  117.    MOV_PC_LR
  118. ;void MMU_DisableAlignFault(void)
  119.    EXPORT MMU_DisableAlignFault
  120. MMU_DisableAlignFault
  121.    mrc p15,0,r0,c1,c0,0
  122.    bic r0,r0,#R1_A
  123.    mcr p15,0,r0,c1,c0,0
  124.    MOV_PC_LR
  125. ;void MMU_EnableMMU(void)
  126.    EXPORT MMU_EnableMMU
  127. MMU_EnableMMU
  128.    mrc p15,0,r0,c1,c0,0
  129.    orr r0,r0,#R1_M
  130.    mcr p15,0,r0,c1,c0,0
  131.    MOV_PC_LR
  132. ;void MMU_DisableMMU(void)
  133.    EXPORT MMU_DisableMMU
  134. MMU_DisableMMU
  135.    mrc p15,0,r0,c1,c0,0
  136.    bic r0,r0,#R1_M
  137.    mcr p15,0,r0,c1,c0,0
  138.    MOV_PC_LR
  139. ;void MMU_SetFastBusMode(void)
  140. ; FCLK:HCLK= 1:1
  141.   EXPORT MMU_SetFastBusMode
  142. MMU_SetFastBusMode
  143.    mrc p15,0,r0,c1,c0,0
  144.    bic r0,r0,#R1_iA:OR:R1_nF
  145.    mcr p15,0,r0,c1,c0,0
  146.    MOV_PC_LR
  147. ;void MMU_SetAsyncBusMode(void)
  148. ; FCLK:HCLK= 1:2
  149.    EXPORT MMU_SetAsyncBusMode
  150. MMU_SetAsyncBusMode
  151.    mrc p15,0,r0,c1,c0,0
  152.    orr r0,r0,#R1_nF:OR:R1_iA
  153.    mcr p15,0,r0,c1,c0,0
  154.    MOV_PC_LR
  155. ;=========================
  156. ; Set TTBase
  157. ;=========================
  158. ;void MMU_SetTTBase(int base)
  159.    EXPORT MMU_SetTTBase
  160. MMU_SetTTBase
  161.    ;ro=TTBase
  162.    mcr p15,0,r0,c2,c0,0
  163.    MOV_PC_LR
  164. ;=========================
  165. ; Set Domain
  166. ;=========================
  167. ;void MMU_SetDomain(int domain)
  168.    EXPORT MMU_SetDomain
  169. MMU_SetDomain
  170.    ;ro=domain
  171.    mcr p15,0,r0,c3,c0,0
  172.    MOV_PC_LR
  173. ;=========================
  174. ; ICache/DCache functions
  175. ;=========================
  176. ;void MMU_InvalidateIDCache(void)
  177.    EXPORT MMU_InvalidateIDCache
  178. MMU_InvalidateIDCache
  179.    mcr p15,0,r0,c7,c7,0
  180.    MOV_PC_LR
  181. ;void MMU_InvalidateICache(void)
  182.    EXPORT MMU_InvalidateICache
  183. MMU_InvalidateICache
  184.    mcr p15,0,r0,c7,c5,0
  185.    MOV_PC_LR
  186. ;void MMU_InvalidateICacheMVA(U32 mva)
  187.    EXPORT MMU_InvalidateICacheMVA
  188. MMU_InvalidateICacheMVA
  189.    ;r0=mva
  190.    mcr p15,0,r0,c7,c5,1
  191.    MOV_PC_LR
  192. ;void MMU_PrefetchICacheMVA(U32 mva)
  193.    EXPORT MMU_PrefetchICacheMVA
  194. MMU_PrefetchICacheMVA
  195.    ;r0=mva
  196.    mcr p15,0,r0,c7,c13,1
  197.    MOV_PC_LR
  198. ;void MMU_InvalidateDCache(void)
  199.    EXPORT MMU_InvalidateDCache
  200. MMU_InvalidateDCache
  201.    mcr p15,0,r0,c7,c6,0
  202.    MOV_PC_LR
  203. ;void MMU_InvalidateDCacheMVA(U32 mva)
  204.    EXPORT MMU_InvalidateDCacheMVA
  205. MMU_InvalidateDCacheMVA
  206.    ;r0=mva
  207.    mcr p15,0,r0,c7,c6,1
  208.    MOV_PC_LR
  209. ;void MMU_CleanDCacheMVA(U32 mva)
  210.    EXPORT MMU_CleanDCacheMVA
  211. MMU_CleanDCacheMVA
  212.    ;r0=mva
  213.    mcr p15,0,r0,c7,c10,1
  214.    MOV_PC_LR
  215. ;void MMU_CleanInvalidateDCacheMVA(U32 mva)
  216.    EXPORT MMU_CleanInvalidateDCacheMVA
  217. MMU_CleanInvalidateDCacheMVA
  218.    ;r0=mva
  219.    mcr p15,0,r0,c7,c14,1
  220.    MOV_PC_LR
  221. ;void MMU_CleanDCacheIndex(U32 index)
  222.    EXPORT MMU_CleanDCacheIndex
  223. MMU_CleanDCacheIndex
  224.    ;r0=index
  225.    mcr p15,0,r0,c7,c10,2
  226.    MOV_PC_LR
  227. ;void MMU_CleanInvalidateDCacheIndex(U32 index)
  228.    EXPORT MMU_CleanInvalidateDCacheIndex
  229. MMU_CleanInvalidateDCacheIndex
  230.    ;r0=index
  231.    mcr p15,0,r0,c7,c14,2
  232.    MOV_PC_LR
  233. ;void MMU_WaitForInterrupt(void)
  234.    EXPORT MMU_WaitForInterrupt
  235. MMU_WaitForInterrupt
  236.    mcr p15,0,r0,c7,c0,4
  237.    MOV_PC_LR
  238. ;===============
  239. ; TLB functions
  240. ;===============
  241. ;voic MMU_InvalidateTLB(void)
  242.    EXPORT MMU_InvalidateTLB
  243. MMU_InvalidateTLB
  244.    mcr p15,0,r0,c8,c7,0
  245.    MOV_PC_LR
  246. ;void MMU_InvalidateITLB(void)
  247.    EXPORT MMU_InvalidateITLB
  248. MMU_InvalidateITLB
  249.    mcr p15,0,r0,c8,c5,0
  250.    MOV_PC_LR
  251. ;void MMU_InvalidateITLBMVA(U32 mva)
  252.    EXPORT MMU_InvalidateITLBMVA
  253. MMU_InvalidateITLBMVA
  254.    ;ro=mva
  255.    mcr p15,0,r0,c8,c5,1
  256.    MOV_PC_LR
  257. ;void MMU_InvalidateDTLB(void)
  258. EXPORT MMU_InvalidateDTLB
  259. MMU_InvalidateDTLB
  260. mcr p15,0,r0,c8,c6,0
  261. MOV_PC_LR
  262. ;void MMU_InvalidateDTLBMVA(U32 mva)
  263. EXPORT MMU_InvalidateDTLBMVA
  264. MMU_InvalidateDTLBMVA
  265. ;r0=mva
  266. mcr p15,0,r0,c8,c6,1
  267. MOV_PC_LR
  268. ;=================
  269. ; Cache lock down
  270. ;=================
  271. ;void MMU_SetDCacheLockdownBase(U32 base)
  272.    EXPORT MMU_SetDCacheLockdownBase
  273. MMU_SetDCacheLockdownBase
  274.    ;r0= victim & lockdown base
  275.    mcr p15,0,r0,c9,c0,0
  276.    MOV_PC_LR
  277. ;void MMU_SetICacheLockdownBase(U32 base)
  278.    EXPORT MMU_SetICacheLockdownBase
  279. MMU_SetICacheLockdownBase
  280.    ;r0= victim & lockdown base
  281.    mcr p15,0,r0,c9,c0,1
  282.    MOV_PC_LR
  283. ;=================
  284. ; TLB lock down
  285. ;=================
  286. ;void MMU_SetDTLBLockdown(U32 baseVictim)
  287.    EXPORT MMU_SetDTLBLockdown
  288. MMU_SetDTLBLockdown
  289.    ;r0= baseVictim
  290.    mcr p15,0,r0,c10,c0,0
  291.    MOV_PC_LR
  292. ;void MMU_SetITLBLockdown(U32 baseVictim)
  293.    EXPORT MMU_SetITLBLockdown
  294. MMU_SetITLBLockdown
  295.    ;r0= baseVictim
  296.    mcr p15,0,r0,c10,c0,1
  297.    MOV_PC_LR
  298. ;============
  299. ; Process ID
  300. ;============
  301. ;void MMU_SetProcessId(U32 pid)
  302.    EXPORT MMU_SetProcessId
  303. MMU_SetProcessId
  304.    ;r0= pid
  305.    mcr p15,0,r0,c13,c0,0
  306.    MOV_PC_LR
  307.    END