【OK210试用体验】裸机篇 -- 关闭看门狗和设置栈
在之前的S5PV210启动流程帖子上有说到,在iROM代码运行的时候,系统自动关闭了看门狗和设置了栈指向。现在来学习一下如何自己来设置。
S5PV210中的看门狗和栈的情况
看门狗的作用在于监控CPU的运行,保证在诸如噪音和系统错误等故障干扰的情况下能尽快恢复现场正常的工作。但是对于我们写裸机程序来调试,用处不大。看门狗寄存器的地址为0xE2700000。
在调用C语言函数时,我们常常会去传递一些参数,当参数的个数小于4的时候,我们直接用r0~r3寄存器来完成参数的传递。当传输大于4个的时候,寄存器不够用,所以我们要用到栈来保存现场。
在三星官方的S5PV210的启动流程讲解文档中有这张内存详图,这给我们设置好栈指向的地址做出了指引,我们可以选择指向0XD0037D80,当然也可以选择其他的。
示例程序
简单的汇编程序:关闭看门狗和设置了栈,再调到main函数,其中关闭看门狗只需让其寄存器的值为0,设置栈只需赋予它地址- .global _start
- _start:
- // 关闭看门狗
- ldr r0, =0xE2700000
- mov r1, #0
- str r1, [r0]
- // 设置栈,以便调用c函数
- ldr sp, =0xD0037D80
- // 调用c函数
- bl main
- halt:
- b halt