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