异常向量表
@0x00
b reset
@0x18 中断模式的向量地址
b HandleIRQ
HandleIRQ:
sub lr,lr ,#4 这有个问题:此时已经切换到中断模式了lr为什么不是 lr_irq呢
这代码是什么意思??在中断模式下lr不是已经不能在使用了吗,。只能使用lr_irq 啊,
为什么这里是lr呢,,而sub lr,lr,#4是什么意思呢,,
为什么lr不是pc的值呢,,应该是把切换前的下一条指令地址赋给lr吧,,
stmdb sp!, {r0-r12,lr} 保存使用到的寄存器
------解决方案--------------------
sub lr,lr ,#4 为什么是lr不是lr_irq 是因为要考虑分组寄存在进入异常的时候在栈的排列顺序,你的具体代码我不知道 大概猜测是这几个原因,我也是菜鸟一枚。。。以后常交流 呵呵
这个是我用6410的板子做的,你可以参考一下
irq:
mov sp, #0x52000000
mov ip, sp
sub lr, lr, #4
stmfd sp!, {r0-r12, lr}
sub fp, ip, #4
mov r0, #0x52000000
ldr r1, [r0]
blx r1
# ldr r0, =0x7E00400C
# str r1, [r0]
#
# ldr r0, =str_irq
# mrs r1, cpsr
# ldr r2, printf
# blx r2
mov sp, #0x52000000
ldmea sp, {r0-r12, pc}^
------解决方案--------------------
当进入中断模式后,使用lr,就是使用lr_irq
正常模式的时候,使用lr,就是使用lr。
------------------------------
使用lr,是因为lr里面保存了当前子程序的返回地址,
总不能写sub pc,pc ,#4 吧。