一、关闭中断
①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
阅读(881) | 评论(0) | 转发(0) |