分类: LINUX
2012-08-24 09:50:59
由于s3c2440支持两种启动方式nor启动、nand启动,当以nor启动的时候,CPU看到的0地址是在nor flash上,CPU可以直接从nor flash上取指令执行。以nand启动,在启动的时候,在硬件上CPU会将nand flash上的前4k的代码复制到s3c2440内部的片内内存中,但是为了以后的更多的代码能正常运行,那么在这4k的代码中就应该完成以下几项工作:
1.为C语言运行创造条件,故设置栈SP的值。
2.在刚启动芯片的时候,看门狗默认是开着的,但是在裸板程序中我们不需要看门狗,所以应该关掉看门狗,如果不关每隔3s就会使系统复位,自动跳到零地址去运行,你的程序无法正常工作。
3.初始化时钟(对于裸机代码可以不用设置,初始化时钟就是使CPU的运行速度加快,对于裸板代码程序,代码本来就很少,设置与否没有太大关系)。
4.为了让大于4k的代码能正常运行,故应该初始化SDRAM。因为mini2440外接的内存是SDRAM,在使用前必须初始化,即设置内存控制器。
5.重定位:将nand flash中的其他代码复制到SDRAM中,并将PC指针指向SDRAM,跳到SDRAM中去执行(在链接脚本中设置的地址一般为0x30000000,但是刚开始时的代码在0地址处运行,为了程序还能正常运行,故应该使用位置无关码去写代码,就是不要使用全局变量和静态变量,进一步确定该代码是否为位置无关码,可以分析反汇编)。