一、关闭中断
①CPSR 中的I位和F位,置1(关闭IRQ和FIQ)
②中断屏蔽寄存器 S3C2440->14 Interrupt controller
#define pINTMSK 0x4a000008 定义宏地址 disable_interrupt
: ldr r0
, = pINTMSK
伪指令,取pINITMSK所指向的值 mvn r1
, #0x0
长度小于8位,可以用mov str r1
, [r0
] 将r1的值存到r0的值指向的地址 mov pc
, lr
跳回bl disable_interrupt
二、关闭MMU
1、ARM存储体系
处理速度:从上到下依次放慢
存储数量:从上到下依次增加
2、Cache
容量小、存取速度非常快的存储器,用于保存最近用到的存储器中数据的拷贝。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。按照功能划分:
I-Cache:指令Cache,用于存放指令
D-Cache:数据Cache,用于存放数据
3、虚拟地址
虚拟地址:程序中使用的地址
物理地址:物理存储单元实际的地址
如果没有虚拟地址:①不同软件之间,地址访问会冲突 ②范围较小
4、MMU的作用
软件-->虚拟地址--MMU-->物理地址
5、关闭MMU
ARM920T(核手册)-->CP15-->control register(CP15中有一个控制寄存器)
关闭MMU:①使I-Cache + D-Cache失效 CP15-->Register 7
②关闭i/d-Cache MMU CP15-->Register 1
disable_mmu: mcr p15
,0
,r0
,c7
,c7
,0
; Invalidate ICache and DCache (这里Rd可以是任意,因为这里什么值对该命令是没有影响的。) mrc p15
,0
,r0
,c1
,c0
,0
; read control register 从CP15控制寄存器中读取到r0 bic r0
, r0
, #0x00000007
; 将0、1、2三位清0(关闭D-cache和MMU,第二位是什么顺带了) mcr p15
,0
,r0
,c1
,c0
,0
; 再写进寄存器 mov pc
, lr
;跳转到bl disable_mmu
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(37) | 评论(0) | 转发(0) |
0
上一篇:Error: invalid constant (6bf) after fixup
下一篇:点亮指路灯
相关热门文章
SHTML是什么_SSI有什么用...
查看linux中某个端口(port)...
卡尔曼滤波的原理说明...
shell中字符串操作
关于java中的“错误:找不到或...
给主人留下些什么吧!~~
评论热议