2440启动步骤
网上有很多文章分析TQ2440的启动文件2440init.s。介绍的很详细,我这里只是把S3C2440上电后的程序流程描述下。
不管在哪种启动方式下,ARM上电启动都是从0X00000000开始运行。下面是复位程序入口。
AREA Init,CODE,READONLY
ENTRY
ResetEntry
b ResetHandler
……
ResetEntry的值在ARM上电运行时是0X00000000,在JTAG仿真时是0X30000000。这个值很关键,在拷贝程序时会用到。
从NAND FLASH启动时,在ARM上电时,ARM会自动把NAND FLASH前4K的内容拷贝到S3C2440内部SRAM中,同时把SRAM的地址映射到0X00000000。ARM上电后会从SRAM处开始运行。
从NOR FLASH启动时,因为NOR FLASH接在bank0。地址映射是0X00000000。所以ARM上电后直接运行NOR FLASH里的程序。此时S3C2440内部SRAM地址为0X40000000。
在ARM上电的情况下,流程如下:
1、 关闭看门狗,关闭所有中断。
2、 设置系统工作频率,FCLK,HCLK,PCLK,UCLK。
3、 初始化内存控制寄存器,初始化参数在段SMRDATA里定义。SDRAM初始化在这里处理。
4、 在开发板上电时,按住接在EINT0脚上的按键会清零64MSDRAM。
5、 初始化堆栈
6、 读OM0,OM1引脚状态,判断是从NAND FLASH启动还是从NOR FLASH启动。如果是从NAND FLASH启动,把NAND FLASH的代码拷贝到SDRAM中,接着程序开始在SDARM中运行。然后初始化数据段,最后跳转到main()函数开始运行。
如果是从NOR FLASH启动,判断ResetEntry值和BaseOfROM值是否相等,BaseOfROM值是在ADS里定义的RO BASE,如果定义为0X30000000,因为ARM上电ResetEntry值为0,所以接下来程序会把NOR FLASH里的程序拷贝到SDRAM中。如果RO BASE定义为0,将直接在NOR FLASH里运行。然后初始化数据段,最后跳转到main()函数开始运行。
2440启动步 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)