当前位置: 代码迷 >> 驱动开发 >> s3c2440 ARM汇编简单有关问题
  详细解决方案

s3c2440 ARM汇编简单有关问题

热度:217   发布时间:2016-04-28 10:55:33.0
s3c2440 ARM汇编简单问题
异常向量表

@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 吧。
  相关解决方案