u-boot分析(四)---设置异常向量表|设置SVC模式
来源:互联网 发布:淘宝店铺在线布局 编辑:程序博客网 时间:2024/05/19 00:37
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模式
l 设置异常向量表
我们知道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//中间多差的一条指令。0x000000148 ldr pc, _irq //0x00000018外部中断异常9 ldr pc, _fiq //0x0000001c快速中断异常
3. 异常向量:
当异常发生的时候,由硬件机制处理器自动的跳到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。
l 设置CPU为SVC模式
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 mode4 */5 mrs r0, cpsr //导入CPSR寄存器的值到R06 bic r0, r0, #0x1f//0b1 1111对M[0-4]清零7 orr r0, r0, #0xd3//0b1 0011对M[0-4]置18 msr cpsr,r0//将R0写入CPSR中
今天有点不舒服,所以就到此为止了,明天继续分析。
内容有点少,大家谅解!!!
- u-boot分析(四)---设置异常向量表|设置SVC模式
- 6、异常向量表的学习---设置SVC模式
- u-boot设置SVC模式
- u-boot异常向量表
- 设置异常向量表
- 核心初始化---异常向量表、svc模式、关闭看门狗、关闭中断、关闭mmu
- 设置SVC模式
- 设置SVC模式
- u-boot的异常向量表,s5pv210的启动机制原理
- 工程添加boot后需要设置----中断向量表的偏移量设置
- 二十四.SVC模式设置
- 设置tiny6410的svc模式
- u-boot环境变量设置
- GT2440--U-Boot分析(四)
- u-boot第一阶段分析(四)
- u-boot第二阶段分析(四)
- 异常向量表
- bootloader 异常向量表
- Java获取properties文件
- 【DeepLearning工具】Fedora下安装theano
- 【java基础】第十条总结-->重要
- 通达OA 对于工作流表单中列表控件数据的数组问题处理
- 异步ztree展现struts2后台数据集
- u-boot分析(四)---设置异常向量表|设置SVC模式
- Jsp+JavaBean+Servlet实现模拟银行账户存取款等功能的网站(实习第4-8天)
- JS事件
- jsp中include文件的方法及建议
- 编写高效的Android代码
- Eclipse下编写C++程序——CDT环境搭建
- Linux AIO基础
- dt.jar和tools.jar calsspath
- 1501102328-蓝桥杯-算法训练 2的次幂表示