微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440学习笔记五(2440slib.s源程序的分析)

S3C2440学习笔记五(2440slib.s源程序的分析)

时间:11-11 来源:互联网 点击:

位返回1,写入时忽略该位。

C1的第2位:C(bit[2])。当数据和地址处于分开时,本控制位禁止使能数据cache;如果系统中使用统一的指令cache和数据cache时,该控制位禁止使能整个cache。其中0是禁止cache,1是使能cache;如果系统中不含cache,读取时该位返回0,写入时忽略该位。当系统中的cache不能禁止时,读取时该位返回1,写入时忽略该位。

C1的第1位:A(bit)。对于可以选择是否支持内存访问时地址对齐检查的那些系统,本位禁止使能地址对齐检查功能;0是禁止地址对齐检查功能,1是使能对齐检查功能;对齐内存访问时地址对齐检查功能不可选择的那些系统,读取该位时根据系统是否支持地址功能对齐检查功能返回0或者1,写入时忽略该位。

C1的第0位:M(bit[0])。禁止使能MMU或者PU;其中0是禁止地址对齐检查功能,1是使能地址对齐检查功能;如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位。

C1的30位设置快速总线模式

C2的31位模式异步模式

;====================================

; MMU Cache/TLB/etc on/off functions MMU的缓存,快表等的允许和禁止操作

;====================================

R1_I EQU (1<12) ;其实汇编也不想想象中那么汇,有事可以看到C的身影

R1_C EQU (1<2) ;其实C就是构建在这些汇编之上,一看二看三看有种杂交的感觉

R1_A EQU (1<1)

R1_M EQU (1)

R1_iA EQU (1<31)

R1_nF EQU (1<30)

;使能命令Cache
;void MMU_EnableICache(void)

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

;使能数据Cache

;void MMU_EnableDCache(void); 当地址Cache和数据Cache分开时,使能数据Cache,反之使能整个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和数据Cache分开时,禁止数据Cache,反之禁止整个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

;=========================

; Set TTBase C2:地址转换表基地址

;=========================

;void MMU_SetTTBase(int base)

EXPORT MMU_SetTTBase

MMU_SetTTBase

;ro=TTBase

mcr p15,0,r0,c2,c0,0

MOV_PC_LR

;=========================

; Set Domain 域访问控制位

;=========================

;写控制位到C3

;void MMU_SetDomain(int domain)

EXPORT MMU_SetDomain

MMU_SetDomain

;ro=domain

mcr p15,0,r0,c3,c0,0

MOV_PC_LR

;=========================

; ICache/DCache functions

C7控制指令和数据缓存和写缓冲区

它是一个只写的寄存器。使用MRC指令读取该寄存器,将产生不可预知效果。

指令具体格式如下:

MCR P15,0,,,,

,的不同的组合决定指令执行的不同的操作。完成操作将产生的数据写到Rd,然后写到C7。

;=========================

;使无效整个统一的cache

;void MMU_InvalidateIDCache(void)

EXPORT MMU_InvalidateIDCache

MMU_InvalidateIDCache

mcr p15,0,r0,c7,c7,0

MOV_PC_LR

;void MMU_InvalidateICache(void) ;使无效整个指令cache

EXPORT MMU_Invali

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top