我们的Linux系统以及bootloader是工作在SVC模式!!怎么把处理器设置为SVC模式呢? CPSR寄存器或者SPSR寄存器最低5位可以设置模式,把该5位设置为0b10011, start.s文件…
[设置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…
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是把通用寄存器的值赋给状态寄存器 .text .global _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq l…
1.关闭cpsr寄存器里面的I(中断)和F(快速中断)位: 2.设置中断屏蔽寄存器. 针对2440: 这是中断处理过程,当有中断源(没有子中断源)来的时候,它会把这个中断记录在SRCPND里面:它还要经过MASK屏蔽寄存器,如果我们对对应位屏蔽了,那么它就无法进入到IRQ这里来处理.对于有子中断源的同理. 其代码: 针对6410: 打开S3C6410X文件,进入到Vectored Interrupt Controller这个章节, 6410和210采用的是向量中断的方式, 在6410要去屏蔽一个…
1.1异常 异常向量: 异常向量表: 代码的编写 start.S文件 gboot.lds链接器脚本文件 makefile工程文件:…
1.ARM存储体系 2.cache 3.虚拟地址 那么谁来完成把虚拟地址转换成物理地址呢? 4.这个工作就由MMU来转换!! 5.关闭MMU和cache 他们都是通过cp15协处理器来控制的!应该在ARM核的手册里面搜索CP15 1.首先要使I/Dcache里面的数据无效 2.关闭I/D cache以及mmu 代码:…
1.看门狗---作用 2.看门狗工作方式 3.原理图 时钟源来自于PCLK经过分频器,经过选择器,输出到作为看门狗定时器,WTDAT为一个预载值,当它计数为零的时候,还没有给WTDAT赋值,那么它会发出一个重启信号RESET. 找到S3C6410X文件,找到里面的watch dog章节, 关闭代码如下: start.s代码:…
1.gboot.lds OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS {    . = 0x30008000; //起始地址        . = ALIGN(4);//4字节对齐    .text : //代码段    {    start.o (.text)//以.o开始执行    *(.text)    }    . = ALIGN(4);    .data : //数据段    {    *(.data)    }        . = ALIGN(4); …
异常向量表:异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件.ARM Architecture Reference Manual p54页.7种异常的类型:Reset异常:突然按下重启键.Undefined Instruction:未定义指令.()software interrup:软中断()Prefetch Abort (instruction fetch memory about):预取中止Data Abort:提取数据失败.IRQ:中断FIQ:快速中…