对于C程序,用户程序通常在main函数开始,而在调用main函数之前,还需要执行一些初始化操作,主要包括软件初始化和硬件初始化两部分。2440的启动文件名为crt0.S。
软件初始化
- 设置栈指针
SP指向某块内存,SRAMSDRAM - 设置返回地址
- 调用main
- 清理工作
硬件初始化
- 关看门狗
- 初始化时钟
- 初始化SDRAM
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************
.text
.global _start
_start:
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop
参考
JZ2440开发板资料