我们的Linux系统以及bootloader是工作在SVC模式!!怎么把处理器设置为SVC模式呢? CPSR寄存器或者SPSR寄存器最低5位可以设置模式,把该5位设置为0b10011, start.s文件 时间: 2024-10-10 22:47:17
[设置svc模式] 设置CPU为SVC模式 1.因为初始化系统需要有很高的权限,SVC模式具有该权限,所以首先要使系统工作在SVC(0b10011)模式 2.设置cprs为0xd3(0b11010011)表示设置处理器为svc模式,并且屏蔽irq和frq /* *名称:set_cpu_to_svc *描述:设置CPU为SVC模式 */ set_cpu_to_svc: mrs r0, cpsr bic r0, #0x1f orr r0, #0xd3 //F 1,I 1,M[4:0] 10110 m
这是手册的资料,我们看到,要设置svc模式,就是要把我们的cpsr的后五位设置为0b10011即可.Cpsr的结构: 接下来,我们就来把cpsr的后五位设置为0b10011. 设置的思路: 首先把这五位清零(bic指令),使用orr往这五位写入0b10011.当然,这些操作的实现必须借助mrs和msr两个指令来完成(cpsr和spsr不能直接访问). 操作如下: 看运行的结果,设置成功. ? 看门狗实现 看门狗的结构图: 6410的看门狗的资料: 我们通过上面的看门狗的控制寄存器的设置就可以关闭
u-boot分析(四) 通过前三篇的分析,我们对u-boot已经有了整体的认识和掌握,但是我们仍然对于其部分硬件是如何初始化的不太清楚,所以接下来几篇博文我将会对我们在http://www.cnblogs.com/wrjvszq/archive/2015/01/10/4215627.html一文中总结出的u-boot的工作流程中的重要环节,结合文档加以分析. 今天我们会用到的文档: 1. ARM Architecture Reference Manual:http://downlo
清0:bic 置1:orr 访问cpsr和spdr要用到mrs和msr指令 mrs是把状态寄存器的值赋给通用寄存器 msr是把通用寄存器的值赋给状态寄存器 1 .text 2 .global _start 3 _start: 4 b reset 5 ldr pc, _undefined_instruction 6 ldr pc, _software_interrupt 7 ldr pc, _prefetch_abort 8 ldr pc, _data_abort 9 ldr pc, _not_u
1.看门狗---作用 2.看门狗工作方式 3.原理图 时钟源来自于PCLK经过分频器,经过选择器,输出到作为看门狗定时器,WTDAT为一个预载值,当它计数为零的时候,还没有给WTDAT赋值,那么它会发出一个重启信号RESET. 找到S3C6410X文件,找到里面的watch dog章节, 关闭代码如下: start.s代码:
1.核心初始化主要工作 2.设置中断向量表 arm处理器支持7种类型的异常,如下表: 异常向量:当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量. 异常向量表:由七个异常向量及其处理函数跳转关系组成的表即为异常向量表. 3.设置svc模式 通过设置程序状态寄存器Current Program Status Register (CPSR) ,来设置模式. 步骤:先利用mrs将cpsr的值保持到通用寄存器中,清零相应5位(bic),
在看Uboot的start.S文件时候,发现其最开始初始化系统,做的第一件事情,就是将CPU设置为SVC模式,但是S3C2440的CPU的core是ARM920T,其有7种模式,为何非要设置为SVC模式,而不是设置为其他模式呢?对此,经过一些求证,得出如下原因: 首先,先要了解ARM的CPU的7种模式是哪些: http://www.docin.com/p-73665362.html Table 3.1. ARM中CPU的模式 处理器模式 说明 备注 用户(usr) 正常程序工作模式 此模式下程序
要设置系统工作svc特权模式,从前面的学习知道这需要设置CPSR程序状态寄存器. 在ARM Architecture Reference Manual.pdf文档中,2.Programmers' Model的2.5.Program status register. 可以看到CPSR的最后五位:M[4:0],就是来设置系统工作的系统模式. 接下来就是把CPSR的最后五位设置为0b10011,就是完成了设置系统的SVC模式. 实现的思路是: 取得这五位 清零,使用bic位清零指令. 置第0,1,4位