2410slib.s
上传用户:mhstny
上传日期:2022-08-05
资源大小:793k
文件大小:7k
源码类别:

微处理器开发

开发平台:

Unix_Linux

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