2440的Nand启动的简略图是这样的
4K的SRAM的启动地址是0x0000000
启动时硬件强制执行
1.强制将Nand Flash前4K的内容拷贝到SRAM中(0地址)
2.CPU从0地址开始执行
所以说 制定代码块从0开始启动
Nand启动软件初始化
1.设置栈
sp指向某块内存,通常情况下指向SRAM(所以通常不用初始化),如果指向SDRAM需要初始化
2.设置main函数的返回地址
3.调用main函数
4.清理工作
Nand启动硬件初始化
1. 关闭看门狗
2.初始化始终(如果速度不强求,可以不设置)
3.初始化SDRAM(没有用到则不需要初始化)
eg:
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************
.text
.global _start
_start:
硬件初始化 关闭看门狗
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
//将0x53000000的值放在r0中
mov r1, #0x0 //将0x0这个值放入r1中
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
//将r1中的值放到r0中存放的地址当中
软件初始化 设置栈
ldr sp, =1024*4 //因为会强制将Nand的前4K放到SRAM中,不过程序占用不了4K的大小,所以将将栈的地址放到SRAM的4K之后
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop