在学习裸机的时候我们知道,异常的触发分为下面几个过程:
1.设置好异常向量表(把异常向量表放在异常向量的位置)
2.写异常处理函数
3.执行异常处理
下面列出简单的代码实现
.text
.global _start
.global __reset_exception
.global __undefined_instruction
.global __software_interrupt
.global __prefetch_abort
.global __data_abort
.global __not_used
.global __irq
.global __fiq
_start:
b __reset_exception
b __undefined_instruction
b __software_interrupt
b __prefetch_abort
b __data_abort
b __not_used
b __irq
b __fiq
.align 4
__reset_exception:
/* 开发板制锁*/
ldr r0, = 0xe010e81c
ldr r1, = 0x301
str r1, [r0]
/* 关闭看门狗 */
ldr r0, = 0xe2700000
mov r1, #0
str r1, [r0]
/* 设置SVC栈地址 */
ldr sp, = 0xd0037d80
/* 设置0x30000000为异常向量表的起始地址 */
ldr r0, = _start
mcr p15,