博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot-2011.12移植到S3C2440(三序)——MMU Cache/TLB/etc on/off functions
阅读量:2342 次
发布时间:2019-05-10

本文共 5906 字,大约阅读时间需要 19 分钟。

R1_I EQU (1<<12) ;//Cache分开时,1 使能指令Cache,0 禁止使能CacheR1_C EQU (1<<2) ;//禁止/使能数据Cache或整个Cache,1使能 不含Cache返回0,不能禁止Cache返回1R1_A EQU (1<<1) ;//是否支持内存访问时地址对齐检查系统,1使能R1_M    EQU (1)   ;//禁止/使能MMU 1使能R1_iA EQU (1<<31)R1_nF   EQU (1<<30);void MMU_EnableICache(void)   EXPORT MMU_EnableICacheMMU_EnableICache   mrc p15,0,r0,c1,c0,0   ;//mrc:协处理寄存器到ARM寄存器到的数据传送指令,mrc指令将协处理器寄存器中的           ;//数据传送到ARM处理器的寄存器中,若协处理器不能成功地执行该操作,将产生未定义           ;//异常中断,   orr r0,r0,#R1_I   mcr p15,0,r0,c1,c0,0   MOV_PC_LR;void MMU_DisableICache(void)   EXPORT MMU_DisableICacheMMU_DisableICache   mrc p15,0,r0,c1,c0,0   bic r0,r0,#R1_I       ;//将立即数R1_I取反&r0,保存到r0中   mcr p15,0,r0,c1,c0,0   MOV_PC_LR   ;//禁止/使能指令cache;void MMU_EnableDCache(void)   EXPORT MMU_EnableDCacheMMU_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)   EXPORT MMU_DisableDCacheMMU_DisableDCache   mrc p15,0,r0,c1,c0,0   bic r0,r0,#R1_C   mcr p15,0,r0,c1,c0,0   MOV_PC_LR   ;//禁止/使能数据Cache     ;void MMU_EnableAlignFault(void)   EXPORT MMU_EnableAlignFaultMMU_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_DisableAlignFaultMMU_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)   EXPORT MMU_EnableMMUMMU_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)   EXPORT MMU_DisableMMUMMU_DisableMMU   mrc p15,0,r0,c1,c0,0   bic r0,r0,#R1_M   mcr p15,0,r0,c1,c0,0   MOV_PC_LR   ;//使能/禁止MMU   ;//注意:使能/禁止MMU时;//====================================================================================================;//1、在使能MMU之前,要在内存中建立好页表,同时CP15中的各相关寄存器必须完成初始化。;//2、如果使用的不是平板存储模式(物理地址和虚拟地址相等),在禁止/使能MMU时虚拟地;//址和物理地址的对应关系会发生改变,这时应该清楚Cache中的当前地址变换条目。;//3、如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同,则禁止/使能MMU时将造成;//很大麻烦,因此强烈完成禁止/使能MMU的代码的物理地址和虚拟地址最好相同。;void MMU_SetFastBusMode(void); FCLK:HCLK= 1:1EXPORT MMU_SetFastBusModeMMU_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_SetAsyncBusModeMMU_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    ;//C2用于保存页表的在内存中的基地址;//页表中每一行对应一个虚地址页对应的实地址页的地址、该位的方位权限和该页的缓冲特性;//通常把部分页表放在页表缓冲器TLB(translation lookaside buffer)中,换页表时,TLB要清空,因为。。。。;//C8控制清空TLB;//C10用于控制TLB中内容的锁定;=========================; Set TTBase;=========================;void MMU_SetTTBase(int base)   EXPORT MMU_SetTTBaseMMU_SetTTBase   ;ro=TTBase   mcr p15,0,r0,c2,c0,0   MOV_PC_LR;=========================; Set Domain;=========================;void MMU_SetDomain(int domain)   EXPORT MMU_SetDomainMMU_SetDomain   ;ro=domain   mcr p15,0,r0,c3,c0,0   MOV_PC_LR;=========================; ICache/DCache functions;=========================;void MMU_InvalidateIDCache(void)   EXPORT MMU_InvalidateIDCacheMMU_InvalidateIDCache   mcr p15,0,r0,c7,c7,0   MOV_PC_LR;void MMU_InvalidateICache(void)   EXPORT MMU_InvalidateICacheMMU_InvalidateICache   mcr p15,0,r0,c7,c5,0   MOV_PC_LR;void MMU_InvalidateICacheMVA(U32 mva)   EXPORT MMU_InvalidateICacheMVAMMU_InvalidateICacheMVA   ;r0=mva   mcr p15,0,r0,c7,c5,1   MOV_PC_LR;void MMU_PrefetchICacheMVA(U32 mva)   EXPORT MMU_PrefetchICacheMVAMMU_PrefetchICacheMVA   ;r0=mva   mcr p15,0,r0,c7,c13,1   MOV_PC_LR;void MMU_InvalidateDCache(void)   EXPORT MMU_InvalidateDCacheMMU_InvalidateDCache   mcr p15,0,r0,c7,c6,0   MOV_PC_LR;void MMU_InvalidateDCacheMVA(U32 mva)   EXPORT MMU_InvalidateDCacheMVAMMU_InvalidateDCacheMVA   ;r0=mva   mcr p15,0,r0,c7,c6,1   MOV_PC_LR;void MMU_CleanDCacheMVA(U32 mva)   EXPORT MMU_CleanDCacheMVAMMU_CleanDCacheMVA   ;r0=mva   mcr p15,0,r0,c7,c10,1   MOV_PC_LR;void MMU_CleanInvalidateDCacheMVA(U32 mva)   EXPORT MMU_CleanInvalidateDCacheMVAMMU_CleanInvalidateDCacheMVA   ;r0=mva   mcr p15,0,r0,c7,c14,1   MOV_PC_LR;void MMU_CleanDCacheIndex(U32 index)   EXPORT MMU_CleanDCacheIndexMMU_CleanDCacheIndex   ;r0=index   mcr p15,0,r0,c7,c10,2   MOV_PC_LR;void MMU_CleanInvalidateDCacheIndex(U32 index)   EXPORT MMU_CleanInvalidateDCacheIndexMMU_CleanInvalidateDCacheIndex   ;r0=index   mcr p15,0,r0,c7,c14,2   MOV_PC_LR;void MMU_WaitForInterrupt(void)   EXPORT MMU_WaitForInterruptMMU_WaitForInterrupt   mcr p15,0,r0,c7,c0,4   MOV_PC_LR;===============; TLB functions;===============;voic MMU_InvalidateTLB(void)   EXPORT MMU_InvalidateTLBMMU_InvalidateTLB   mcr p15,0,r0,c8,c7,0   MOV_PC_LR;void MMU_InvalidateITLB(void)   EXPORT MMU_InvalidateITLBMMU_InvalidateITLB   mcr p15,0,r0,c8,c5,0   MOV_PC_LR;void MMU_InvalidateITLBMVA(U32 mva)   EXPORT MMU_InvalidateITLBMVAMMU_InvalidateITLBMVA   ;ro=mva   mcr p15,0,r0,c8,c5,1   MOV_PC_LR;void MMU_InvalidateDTLB(void)EXPORT MMU_InvalidateDTLBMMU_InvalidateDTLBmcr p15,0,r0,c8,c6,0MOV_PC_LR;void MMU_InvalidateDTLBMVA(U32 mva)EXPORT MMU_InvalidateDTLBMVAMMU_InvalidateDTLBMVA;r0=mvamcr p15,0,r0,c8,c6,1MOV_PC_LR;=================; Cache lock down;=================;void MMU_SetDCacheLockdownBase(U32 base)   EXPORT MMU_SetDCacheLockdownBaseMMU_SetDCacheLockdownBase   ;r0= victim & lockdown base   mcr p15,0,r0,c9,c0,0   MOV_PC_LR;void MMU_SetICacheLockdownBase(U32 base)   EXPORT MMU_SetICacheLockdownBaseMMU_SetICacheLockdownBase   ;r0= victim & lockdown base   mcr p15,0,r0,c9,c0,1   MOV_PC_LR;=================; TLB lock down;=================;void MMU_SetDTLBLockdown(U32 baseVictim)   EXPORT MMU_SetDTLBLockdownMMU_SetDTLBLockdown   ;r0= baseVictim   mcr p15,0,r0,c10,c0,0   MOV_PC_LR;void MMU_SetITLBLockdown(U32 baseVictim)   EXPORT MMU_SetITLBLockdownMMU_SetITLBLockdown   ;r0= baseVictim   mcr p15,0,r0,c10,c0,1   MOV_PC_LR;============; Process ID;============;void MMU_SetProcessId(U32 pid)   EXPORT MMU_SetProcessIdMMU_SetProcessId   ;r0= pid   mcr p15,0,r0,c13,c0,0   MOV_PC_LR   END

转载地址:http://ahfvb.baihongyu.com/

你可能感兴趣的文章
catkin_make &amp;amp;catkin build
查看>>
Camera和IMU的标定过程之kalibr 源码编译
查看>>
在ubuntu下安装python的numpy和scipy模块
查看>>
Ubuntu下apt-get与pip安装命令的区别
查看>>
linux CMakeLists.txt 语法
查看>>
cmake 简介
查看>>
CMake学习笔记(1)——用CMake编译一个hello world程序
查看>>
cmake使用总结---工程主目录CMakeList文件编写
查看>>
CMake学习之路
查看>>
cmake学习笔记6-catkin的CmakeList.txt讲解
查看>>
cmake手册详解
查看>>
Maplab框架介绍(一)
查看>>
Maplab开源VI-SLAM框架介绍
查看>>
maplab(1):安装
查看>>
陀螺仪随机误差的Allan方差分析
查看>>
Ubuntu 64位安装Adobe Reader 9.5.5
查看>>
Ubuntu 下如何查看已安装的软件
查看>>
Linux 系统下可以注释标注的pdf阅读器安装、比较和推荐
查看>>
福昕阅读器foxit reader Linux版
查看>>
Ubuntu 安装百度云客户端
查看>>