异常定义:
因为内部或外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件
异常类型:
1.reset
0x00000000
2.undefine instructions
0x00000004
3.software interrupt(swi)
0x00000008
4.prefetch bort(instruction fetch memory abort) 0x0000000C
5.data abort(data access memory abort)
0x00000010
6.irq(interrupt)
0x00000018(注意:0x00000014没有使用)
7.fiq(fast interrup)
0x0000001C
异常向量:
当一种异常发生的时候,arm处理器会跳转到对应异常的固定地址去执行异常处理程序,而这个固定的地址,就称为异常向量
异常向量表:
由七个异常向量及其处理函数跳转关系组成的表叫做异常向量表
代码编写:
1.start.S
/********************************************************************
*名称:iboot
*作者:D
*时间:2015.10.23
*备注:2440引导(bootloader)的第一阶段启动代码(BL1)
********************************************************************/
.text
.global _start
_start:
/********************************************************************
*1.核心初始化
********************************************************************/
/********************************************************************
*1.1设置异常向量表
********************************************************************/
//异常向量跳转表
b reset
ldr pc, _undefine_instrucitions
ldr pc, _software_interrput
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_use
ldr pc, _irq
ldr pc, _frq
//异常向量地址表
_undefine_instrucitions: .word undefine_instrucitions
_software_interrput: .word software_interrput
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_use: .word not_use
_irq: .word irq
_frq: .word frq
//异常向量处理函数
/*
*名称:undefine_instrucitions
*描述:当发生未定义指令异常时的处理函数
*/
undefine_instrucitions:
nop
/*
*名称:software_interrput
*描述:当发生软件中断异常时的处理函数
*/
software_interrput:
nop
/*
*名称:prefetch_abort
*描述:当发生指令预取异常时的处理函数
*/
prefetch_abort:
nop
/*
*名称:data_abort
*描述:当发生数据访问异常时的处理函数
*/
data_abort:
nop
/*
*名称:not_use
*描述:未使用函数,用来占空
*/
not_use:
nop
/*
*名称:irq
*描述:当发生中断异常时的处理函数
*/
irq:
nop
/*
*名称:frq
*描述:当发生快速中断异常时的处理函数
*/
frq:
nop
/*
*名称:reset
*描述:当发生复位时的处理函数
*/
reset:
nop
2.iboot.lds
OUTPUT_ARCH(arm) 输出的架构是arm
ENTRY(_start) 程序的入口在_start
SECTIONS{
. = 0x30008000;
. = ALIGN(4);
.text :
{
start.o(.text)
*(.text)
}
. = ALIGN(4);
.data :
{
*(.data)
}
. = ALIGN(4);
bss_start = .; bss段的起始位置
.bss :
{
*(.bss)
}
bss_end = .; bss段的结束位置
}
3.Makefile
all : start.o
arm-linux-ld -Tiboot.lds $^ -o iboot.elf
arm-linux-objcopy -O binary iboot.elf iboot.bin
%.o : %.S
arm-linux-gcc -g -c $^ -o $@
%.o : %.c
arm-linux-gcc -g -c $^ -o $@
clean:
rm *.o *.elf *.bin
210处理器bootloader需要加头。在BL0阶段把BL1复制到iRAM的时候需要对校验信息进行校验。首先,计算BL1的校验和。然后,和BL1中加头的部分的校验和进行对比。如果相匹配那么复制BL1到iRAM中,否则终止。
上一篇:[国嵌笔记][030][U-Boot工作流程分析]
下一篇:[国嵌笔记][033-034][设置svc模式]
- 热门资源推荐
- 热门放大器推荐
- 基于 Blackfin 数字信号处理器 (DSP) 的 ADZS-BF518F-EZLITE、ADSP-BF518F EZ-Kit Lite 评估系统
- 使用 ON Semiconductor 的 CAT3200Z 的参考设计
- LTC2162 演示板,16 位 65Msps ADC,LVDS 输出,5-140MHz
- 使用 Analog Devices 的 LTC3526BEDC-2 的参考设计
- LT3091HT7 在极低输出电压下低压降操作的典型应用
- 蓝牙协议分析工具nRF52840 MDK USB Dongle
- NCV2902DR2G 维恩桥振荡器运算放大器的典型应用
- LTC4100EGN 演示板,智能电池充电器 DCIN = 15V-20V / 3.5V
- TC78H620FNG 双桥直流有刷电机驱动器评估板
- 带有 DRP w/Try.SRC 和 Type-C 插座的 PTN5110 USB PD 的典型应用

非常经典的关于LLC的杨波博士论文
NJM5532S

1CIS223-04TG3M






京公网安备 11010802033920号