u-boot分析(四)

通过前三篇的分析,我们对u-boot已经有了整体的认识和掌握,但是我们仍然对于其部分硬件是如何初始化的不太清楚,所以接下来几篇博文我将会对我们在http://www.cnblogs.com/wrjvszq/archive/2015/01/10/4215627.html一文中总结出的u-boot的工作流程中的重要环节,结合文档加以分析。

今天我们会用到的文档:

1.        ARM Architecture Reference Manual:http://download.csdn.net/detail/wrjvszq/8354473

今天我们将会分析以下内容:

1.       设置中断向量表

2.      设置CPU为SVC模式

设置异常向量表

我们知道arm上电后u-boot干的第一件事就是设置异常向量表,那么什么是异常?异常又有什么类型呢?等等一大堆问题,下面我们一一解决。

1.       异常

异常其实是中断的一种,我们的中断按中断事件来源进行分类,主要有两类:

1)        中断:由CPU以外的事件引起的中断,如I/O中断、时钟中断、控制台中断等。

2)      异常:来自CPU的内部事件或程序执行中的事件引起的过程。如由于CPU本身故障、程序故障和请求系统服务的指令引起的中断等。

2.       异常的类型

根据《ARM Architecture Reference Manual》手册中的2.6节我们找到了如下表格,说明我们的arm处理器支持的异常有七种

我们的arm处理器有两种入口地址,默认情况下我们选择Normal address,只有当设置了协处理器CP15的相关寄存器以后,才会启用High vector address。

特别提醒:Data Abort和IRQ这两种异常的入口地址一个为0x00000010一个为0x00000018中间差了4个字节,在arm指令解析一节中我们提到arm的一条指令为4个字节刚好差了一条指令,所以我们看到u-boot这样设置异常向量表。

  1. _start:
  2.     b reset //0x00000000复位异常
  3. ldr pc, _undefined_instruction //0x00000004未定义指令异常
  4. ldr pc, _software_interrupt //0x00000008软中断异常
  5. ldr pc, _prefetch_abort //0x0000000c预取异常
  6. ldr pc, _data_abort //0x00000010数据异常
  7. ldr pc, _not_used//中间多差的一条指令。0x00000014
  8. ldr pc, _irq //0x00000018外部中断异常
  9. ldr pc, _fiq //0x0000001c快速中断异常

3.       异常向量:

当异常发生的时候,由硬件机制处理器自动的跳到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。

设置CPUSVC模式

1.       U-boot工作的模式:

由于我们的u-boot需要执行更多的指令,访问更多的寄存器对芯片进行初始化设置,所以要工作在SVC模式。

注:在http://www.cnblogs.com/wrjvszq/p/4199682.html 一文介绍过arm处理器的工作模式

2.       如何设置CPU工作在SVC模式

同样在http://www.cnblogs.com/wrjvszq/p/4199682.html 一文中我们介绍过通过CPSR寄存器设置处理器的工作模式,其实就是设置CPSR中的M[0-4]为0b10011这也就很容易明白u-boot为什么这么设置了。

  1. reset:
  2. /*
  3. * set the cpu to SVC32 mode
  4. */
  5. mrs r0, cpsr //导入CPSR寄存器的值到R0
  6. bic r0, r0, #0x1f//0b1 1111对M[0-4]清零
  7. orr r0, r0, #0xd3//0b1 0011对M[0-4]置1
  8. msr cpsr,r0//将R0写入CPSR中

今天有点不舒服,所以就到此为止了,明天继续分析。

内容有点少,大家谅解!!!

u-boot分析(四)---设置异常向量表|设置SVC模式的更多相关文章

  1. 关于 uboot 的异常向量表

    ldr r,address 表示将 address 地址中的内容存入 r0 中

  2. Part5核心初始化_lesson1---异常向量表

    1.1异常 异常向量: 异常向量表: 代码的编写 start.S文件 gboot.lds链接器脚本文件 makefile工程文件:

  3. STM32向量表详细分析

    预备知识: DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化.比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为 ...

  4. 【转】busybox分析——arp设置ARP缓存表中的mac地址

    [转]busybox分析——arp设置ARP缓存表中的mac地址 转自:http://blog.chinaunix.net/uid-26009923-id-5098083.html 1. 将arp缓存 ...

  5. CSS 四种引入样式表优缺点分析

    CSS 四种引入样式表 CSS 有四种方式引入样式表,如下: 外部样式表 内部样式表 行内样式表 导入样式表 外部样式表优缺点 优点 实现了结构与表现的代码完全分离 方便复用及维护 因为分离到各自独立 ...

  6. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  7. 设置MySQL数据表主键

    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...

  8. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

  9. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

随机推荐

  1. 10.Find All Anagrams in a String(在一个字符串中发现所有的目标串排列)

    Level:   Easy 题目描述: Given a string s and a non-empty string p, find all the start indices of p's ana ...

  2. CodeForces - 124B-Permutations(DFS)

    You are given n k-digit integers. You have to rearrange the digits in the integers so that the diffe ...

  3. hdu 1556 涂气球 线段树(区间更新~对区间[x,y]更新,求任意节点被更新的次数)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. Linux系统lvm管理

    pv:   物理卷,被pv命令处理过的物理分区vg:物理卷组        被组装到一起的物理卷pe: 物理扩展        lvm设备的最小存储单元    lvm是pe的整数倍lvm:逻辑卷    ...

  5. 练习五十六:for循环

    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 方法一: def o ...

  6. Problem04 分解质因数

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的 ...

  7. py---------面向对象进阶

    一.isinstance 和 issubclass isinstance(obj,cls)检查obj是否是类cls的对象,是则返回True class Foo(object): pass obj = ...

  8. js字符串与数字之间的比较

    //1.纯数字之间比较 console.log(1<3);//true //2.纯字符串比较,先转成ASCII码,按位依次比较 console.log("1"<&quo ...

  9. Cookie和Session入门(一)

    目录一)背景介绍二)Cookie机制三)Session机制四)两者比较五)参考资料链接一)背景介绍Cookie与Session是常用的会话跟踪技术.1.Cookie通过在客户端记录信息确定用户身份,S ...

  10. Django重新整理4---ModelForm-set(批量处理数据)

    1. #引用modelformset from django.forms.models import modelformset_factory #必须继承forms.ModelForm! class ...