www.pudn.com > DMAjian.rar > 2410SLIB.S


;/* 
;************************************************************************************************************ 
;*									    北京精仪达盛科技有限公司 
;*                                     	      研    发    部 
;* 
;*                                 	    http://www.techshine.com 
;* 
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                       
;* 
;* 文件名称 : 2410slib.s	 
;* 文件功能 : 该文件为2410的CPSR、MMU等的配置(Assembly) 
;* 补充说明 :  
;*-------------------------------------------- 最新版本信息 ------------------------------------------------- 
;* 修改作者 : ARM开发小组 
;* 修改日期 : 2005/08/03 
;* 版本声明 : V1.0.1 
;*-------------------------------------------- 历史版本信息 ------------------------------------------------- 
;* 文件作者 : Shin, On Pil (SOP)(samsung) 
;* 创建日期 : 2002/05/20 
;* 版本声明 : v0.0 
;*----------------------------------------------------------------------------------------------------------- 
;*----------------------------------------------------------------------------------------------------------- 
;************************************************************************************************************ 
;*/ 
 
;//Interrupt, FIQ/IRQ disable 
NOINT   EQU     0xc0    ;//1100 0000   
 
;//Check if tasm.exe(armasm -16 ...@ADS 1.0) is used. 
   GBLL    THUMBCODE 
   [ {CONFIG} = 16  
THUMBCODE SETL  {TRUE} 
        CODE32 
   |    
THUMBCODE SETL  {FALSE} 
   ] 
 
   MACRO 
       MOV_PC_LR 
       [ THUMBCODE 
           bx lr 
       | 
           mov pc,lr 
       ] 
   MEND 
 
   AREA |C$$code|, CODE, READONLY 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  int SET_IF(void) 
;- 函数说明 :  设定I、F位,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  改变的CPSR 
;************************************************************************************************************* 
;*/ 
    EXPORT  SET_IF 
     
SET_IF 
   mrs  r0,cpsr 
   mov  r1,r0 
   orr  r1,r1,#NOINT 
   msr  cpsr_cxsf,r1              
   MOV_PC_LR 
    
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void WR_IF(int cpsrValue) 
;- 函数说明 :  设定CPSR的值,该函数仅在特权模式下起作用 
;- 输入参数 :  cpsrValue 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
 
   EXPORT WR_IF 
    
WR_IF    
   msr  cpsr_cxsf,r0              
   MOV_PC_LR 
    
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void CLR_IF(void) 
;- 函数说明 :  清除CPSR的值,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT  CLR_IF 
    
CLR_IF 
   mrs  r0,cpsr 
   bic  r0,r0,#NOINT 
   msr  cpsr_cxsf,r0              
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  MMU 相关功能的使能、禁止函数 
;************************************************************************************************************* 
;*/ 
 
R1_I    EQU     (1<<12) 
R1_C    EQU     (1<<2) 
R1_A    EQU     (1<<1) 
R1_M    EQU     (1) 
R1_iA   EQU     (1<<31) 
R1_nF   EQU     (1<<30) 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_EnableICache(void) 
;- 函数说明 :  使能指令cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_EnableICache 
    
MMU_EnableICache         
   mrc  p15,0,r0,c1,c0,0 
   orr  r0,r0,#R1_I 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_DisableICache(void) 
;- 函数说明 :  禁止指令cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_DisableICache 
    
MMU_DisableICache        
   mrc  p15,0,r0,c1,c0,0 
   bic  r0,r0,#R1_I 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_EnableDCache(void) 
;- 函数说明 :  使能数据cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_EnableDCache 
    
MMU_EnableDCache         
   mrc  p15,0,r0,c1,c0,0 
   orr  r0,r0,#R1_C 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_DisableDCache(void) 
;- 函数说明 :  禁止数据cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_DisableDCache 
    
MMU_DisableDCache        
   mrc  p15,0,r0,c1,c0,0 
   bic  r0,r0,#R1_C 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_EnableAlignFault(void) 
;- 函数说明 :  使能对齐故障检测,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_EnableAlignFault  
    
MMU_EnableAlignFault 
   mrc  p15,0,r0,c1,c0,0 
   orr  r0,r0,#R1_A 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_DisableAlignFault(void) 
;- 函数说明 :  禁止对齐故障检测,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_DisableAlignFault 
    
MMU_DisableAlignFault 
   mrc  p15,0,r0,c1,c0,0 
   bic  r0,r0,#R1_A 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_EnableMMU(void) 
;- 函数说明 :  使能MMU,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_EnableMMU 
    
MMU_EnableMMU 
   mrc  p15,0,r0,c1,c0,0 
   orr  r0,r0,#R1_M 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_DisableMMU(void) 
;- 函数说明 :  关闭MMU,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_DisableMMU 
    
MMU_DisableMMU 
   mrc  p15,0,r0,c1,c0,0 
   bic  r0,r0,#R1_M 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetFastBusMode(void) 
;- 函数说明 :  设定快总线模式,FCLK:HCLK= 1:1,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
  EXPORT MMU_SetFastBusMode 
   
MMU_SetFastBusMode 
   mrc  p15,0,r0,c1,c0,0 
   bic  r0,r0,#R1_iA:OR:R1_nF 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetAsyncBusMode(void) 
;- 函数说明 :  设定异步总线模式,FCLK:HCLK= 1:2,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetAsyncBusMode 
    
MMU_SetAsyncBusMode 
   mrc  p15,0,r0,c1,c0,0 
   orr  r0,r0,#R1_nF:OR:R1_iA 
   mcr  p15,0,r0,c1,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetTTBase(int base) 
;- 函数说明 :  设定TTB的基址,r0=TTBase,FCLK:HCLK= 1:2,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetTTBase 
    
MMU_SetTTBase 
   mcr  p15,0,r0,c2,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetDomain(int domain) 
;- 函数说明 :  设定域,r0=domain,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetDomain 
    
MMU_SetDomain 
   mcr  p15,0,r0,c3,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  ICache/DCache 相关功能的函数 
;************************************************************************************************************* 
;*/ 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateIDCache(void) 
;- 函数说明 :  无效指令、数据cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateIDCache 
    
MMU_InvalidateIDCache 
   mcr  p15,0,r0,c7,c7,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateICache(void) 
;- 函数说明 :  无效指令cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateICache 
    
MMU_InvalidateICache 
   mcr  p15,0,r0,c7,c5,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateICacheMVA(U32 mva) 
;- 函数说明 :  无效指令cache的被改过的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateICacheMVA 
    
MMU_InvalidateICacheMVA  
   mcr  p15,0,r0,c7,c5,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_PrefetchICacheMVA(U32 mva) 
;- 函数说明 :  有效预取指指令cache的被改过的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/         
   EXPORT MMU_PrefetchICacheMVA 
    
MMU_PrefetchICacheMVA 
   mcr  p15,0,r0,c7,c13,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateDCache(void) 
;- 函数说明 :  无效数据cache,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateDCache 
    
MMU_InvalidateDCache 
   mcr  p15,0,r0,c7,c6,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateDCacheMVA(U32 mva) 
;- 函数说明 :  无效的数据cache内的被改过的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateDCacheMVA 
    
MMU_InvalidateDCacheMVA 
   mcr  p15,0,r0,c7,c6,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_CleanDCacheMVA(U32 mva) 
;- 函数说明 :  清除数据cache的被改过的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_CleanDCacheMVA 
    
MMU_CleanDCacheMVA 
   mcr  p15,0,r0,c7,c10,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_CleanInvalidateDCacheMVA(U32 mva) 
;- 函数说明 :  清除无效的数据cache的被改过的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_CleanInvalidateDCacheMVA 
    
MMU_CleanInvalidateDCacheMVA 
   mcr  p15,0,r0,c7,c14,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_CleanDCacheIndex(U32 index) 
;- 函数说明 :  清除数据cache内的列表,r0=index,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_CleanDCacheIndex 
    
MMU_CleanDCacheIndex 
   mcr  p15,0,r0,c7,c10,2 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_CleanInvalidateDCacheIndex(U32 index) 
;- 函数说明 :  清除无效的数据cache内的列表,r0=index,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 mva 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_CleanInvalidateDCacheIndex 
    
MMU_CleanInvalidateDCacheIndex   
   mcr  p15,0,r0,c7,c14,2 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_WaitForInterrupt(void) 
;- 函数说明 :  等待中断状态,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_WaitForInterrupt 
     
MMU_WaitForInterrupt     
   mcr  p15,0,r0,c7,c0,4 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  TLB 相关功能的函数 
;************************************************************************************************************* 
;*/ 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateTLB(void) 
;- 函数说明 :  无效整个TLB,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateTLB 
    
MMU_InvalidateTLB        
   mcr  p15,0,r0,c8,c7,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateITLB(void) 
;- 函数说明 :  无效指令TLB,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateITLB 
    
MMU_InvalidateITLB       
   mcr  p15,0,r0,c8,c5,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateITLBMVA(U32 mva) 
;- 函数说明 :  无效指令TLB内的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateITLBMVA 
    
MMU_InvalidateITLBMVA 
   mcr  p15,0,r0,c8,c5,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateDTLB(void) 
;- 函数说明 :  无效数据TLB,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateDTLB 
    
MMU_InvalidateDTLB 
   mcr p15,0,r0,c8,c6,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_InvalidateDTLBMVA(U32 mva) 
;- 函数说明 :  无效数据TLB内的虚拟地址,r0=mva,该函数仅在特权模式下起作用 
;- 输入参数 :  无 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_InvalidateDTLBMVA 
     
MMU_InvalidateDTLBMVA 
   mcr p15,0,r0,c8,c6,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  cache锁定相关功能的函数 
;************************************************************************************************************* 
;*/ 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetDCacheLockdownBase(U32 base) 
;- 函数说明 :  设定数据cache的锁定开始数值,r0= victim & lockdown base,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 base 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetDCacheLockdownBase 
     
MMU_SetDCacheLockdownBase 
   mcr  p15,0,r0,c9,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetICacheLockdownBase(U32 base) 
;- 函数说明 :  设定指令cache的锁定开始数值,r0= victim & lockdown base,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 base 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/         
   EXPORT MMU_SetICacheLockdownBase 
    
MMU_SetICacheLockdownBase 
   mcr  p15,0,r0,c9,c0,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  TLB 锁定相关功能的函数 
;************************************************************************************************************* 
;*/ 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetDTLBLockdownBase(U32 baseVictim) 
;- 函数说明 :  设定数据TLB的锁定开始数值,r0= baseVictim,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 baseVictim 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetDTLBLockdown 
    
MMU_SetDTLBLockdown 
   mcr  p15,0,r0,c10,c0,0 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetITLBLockdownBase(U32 baseVictim) 
;- 函数说明 :  设定指令TLB的锁定开始数值,r0= baseVictim,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 baseVictim 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/         
   EXPORT MMU_SetITLBLockdown 
    
MMU_SetITLBLockdown 
   mcr  p15,0,r0,c10,c0,1 
   MOV_PC_LR 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  XXX 
;- 函数说明 :  PID 相关功能的函数 
;************************************************************************************************************* 
;*/ 
 
;/* 
;************************************************************************************************************* 
;- 函数名称 :  void MMU_SetProcessId(U32 pid) 
;- 函数说明 :  设定PID,r0= pid,该函数仅在特权模式下起作用 
;- 输入参数 :  U32 baseVictim 
;- 输出参数 :  无 
;************************************************************************************************************* 
;*/ 
   EXPORT MMU_SetProcessId 
    
MMU_SetProcessId         
   mcr  p15,0,r0,c13,c0,0 
   MOV_PC_LR 
         
   END 
;/* 
;************************************************************************************************************* 
;*-                            				结束文件													    -* 
;************************************************************************************************************* 
;*/