在嵌入式系统中实现从RAM快速引导技术
来源: 作者: 发布时间:2016-12-30 09:03:45 浏览量:LDR r0, =HandleFiq /*从这里开始进入在RAM中的异常处理程序*/
LDR r0, [r0]
STR r0, [sp, #4]
LDMFD sp!, {r0, pc} /*返回退出FIQ异常处理模式*/
异常处理程序
Sys_Fiq_Handler
IMPORT ISR_FiqHandler /*进入异常处理,保存寄存器,每种模式有自己的分组寄存器(banked registers)*/
STMFD sp!, {r0-r7, lr} /*发生*/
BL ISR_FiqHandler /*进入异常处理程序*/
LDMFD sp!, {r0-r7, lr}
SUBS pc, lr, #4 /*恢复寄存器,退出异常处理模式*/
对比具体的讨论从ROM/RAM启动的实现代码
(说明【1】从RAM启动 【2】从ROM启动)
AREA Init, CODE, READONLY //初始化代码
ENTRY /*设置入口指针*/
/*启动程序首先必须定义入口指针,而且整个应用程序只有一个入口指针
*/
IF :DEF: ROM_AT_ADDRESS_ZERO
B Reset_Handler B Reset_Handler
B **_Handler B sys_**_Handler
建立镜像关系【2】 直接跳转【1】。
ELSE
/*如果不是从ROM在0x0启动,那么必须把直接加载指令拷贝到0x0位置,这是必须使用ldr完成*/
MOV R8, #0
/*ADR伪指令把PC相关的地址装入寄存器*/
ADR R9, Vector_Init_Block
/* 块加载存储指令,IA = 加载后继增*/
LDMIA R9!, {R0-R7}
STMIA R8!, {R0-R7}
LDMIA R9!, {R0-R7}
STMIA R8!, {R0-R7}
把这些指令放在0x0的位置,实现跳转。直接加载相应的处理程序的地址到PC指针。
Vector_Init_Block //如果不是从rom在0x0启动,这里是一组直接加载PC的指令
LDR PC, Reset_Addr /*在执行拷贝过程建立了异常处理,继续执行Reset_Handler*/
。。。。。。。。。。。。。。。。。。
LDR PC, **_Addr
/*定义 地址指针Reset_Addr 其值为reset_Handler*/
1/2 12下一页尾页
Reset_Addr DCD Reset_Handler
。。。。。。。。。。。。。。。。。。。。。。。。
常用板料FR4相关特性介绍Ø常用板料FR4相关特性介绍:1)、板料成分组成:由玻璃布、环氧树脂、铜箔组成;2)、玻璃布分为:普通板料用玻璃布(即玻璃布成圆柱形的)及LDPP用玻璃布(即玻璃布为椭圆形的,便于激
基于LM2596的不间断直流电源设计方案 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费
PCB设计应遵循的原则PCB设计的好坏对电路板抗干扰能力影响很大。因此,在进行PCB设计时,必须遵守PCB设计的一般原则,并应符合抗干扰设计的要求。要使电子线路获得最佳性能,元件的布局及导线的布设是
大电流电感