Chinaunix首页 | 论坛 | 博客
  • 博客访问: 498977
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: 嵌入式

2016-09-26 20:44:19

一、关闭中断
①CPSR 中的I位和F位,置1(关闭IRQ和FIQ)
②中断屏蔽寄存器 S3C2440->14 Interrupt controller

  1. #define pINTMSK 0x4a000008            定义宏地址
  2. disable_interrupt:
  3.     ldr r0, = pINTMSK                   伪指令,取pINITMSK所指向的值
  4.     mvn r1, #0x0                        长度小于8位,可以用mov
  5.     str r1, [r0]                        将r1的值存到r0的值指向的地址
  6.     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

  1. disable_mmu:
  2.     mcr p15,0,r0,c7,c7,0                    ; Invalidate ICache and DCache   这里Rd可以是任意,因为这里什么值对该命令是没有影响的。
  3.     mrc p15,0,r0,c1,c0,0                    ; read control register 从CP15控制寄存器中读取到r0
  4.     bic r0, r0, #0x00000007                 ; 将0、1、2三位清0(关闭D-cache和MMU,第二位是什么顺带了)
  5.     mcr p15,0,r0,c1,c0,0                    ; 再写进寄存器
  6.     mov pc, lr                             ;跳转到bl disable_mmu

阅读(899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~