ARM技术论坛
直播中

张国厚

7年用户 1377经验值
私信 关注
[问答]

怎样去编写ARM汇编配置重启代码呢

Reset:                  
    ldr sp, =4096           @ 设置栈指针,以下都是C函数,调用前需要设好栈
    bl  disable_watch_dog   @ 关闭WATCHDOG,否则CPU会不断重启
    msr cpsr_c, #0xd2       @ 进入中断模式
    ldr sp, =3072           @ 设置中断模式栈指针
    msr cpsr_c, #0xdf       @ 进入系统模式
    ldr sp, =4096           @ 设置系统模式栈指针,
                            @ 其实复位之后,CPU就处于系统模式,
                            @ 前面的“ldr sp, =4096”完成同样的功能,此句可省略
    bl  init_led            @ 初始化LED的GPIO管脚
    bl  init_irq            @ 调用中断初始化函数,在init.c中
    msr cpsr_c, #0x5f       @ 设置I-bit=0,开IRQ中断
    ldr lr, =halt_loop      @ 设置返回地址
    ldr pc, =main           @ 调用main函数
halt_loop:
    b   halt_loop
汇编调用C程序,调用C程序之前必须将执行完C后程序的指针存放在链接寄存器lr中,此处程序进入halt_loop执行死循环(b指令)。
类似这样的语句
stop:
b  stop程序进入stop死循环,可以查看当前寄存器的值。

原作者:syjsyj000

更多回帖

发帖
×
20
完善资料,
赚取积分