ARM启动代码分析

1228阅读 0评论2012-09-25 wangh0802
分类:嵌入式

    简单讲:NAND FLASH相当于计算机的硬盘,适合存储大量数据,但是无法对其进行直接寻址,也就是说,对NAND FLASH的访问需要有专门的NAND FLASH控制器来产生相应的时序;从NAND FLASH启动就相当于从硬盘启动,这里涉及S3S2440内部的Steping Stone的支持,大小4K,上电后会通过硬件逻辑自动复制NAND FLASH前4K的数据到Steping Stone,然后在Steping Stone中执行。通常引导代码会复制 NAND Flash 的内容到 SDRAM 中。通过使用硬件 ECC,有效地检查 NAND Flash 数据。在复制完成的基础上,将在 SDRAM 中执行主程序。

    NOR FLASH相当于计算机的内存,但是数据掉电后不丢失,CPU可以对其进行直接寻址,因此可以在NOR FLASH中执行程序。

    SDRAM就相当于计算机内存,主要用于执行程序,但是掉电后里面的数据会丢失。NOR FLASH中的数据不会丢失,这是SDRAM与NOR FLASH的主要区别。

    启动代码主要是负责对板级硬件的初始化,以及程序代码的搬移等。编写启动代码需要从具体的硬件配置讲起,总结起来主要有中断控制器、内部时钟电路、存储器控制器,一般还需要了解SDRAM的一些参数,此外还需要对NAND FLASH及NAND FLASH控制器有所了解。

    S3C2440处理器支持4种启动方式,具体采用哪两种启动方式由系统本身的硬件情况决定,OM1和OM2是S3C2440处理器的两个引脚,可以通过开关来改变引脚的电平值,进而实现不同的启动方式选择。因此,具体启动流程为:上电后检测OM1和OM2的引脚电平,根据不同的电平值来选择具体启动方式,0M[1:0]=01,NOR FLASH启动;0M[1:0]=00 NAND FLASH启动。

   启动代码:初学阶段并不需要完完整整地把启动代码写出来,只要能看懂启动代码即可,然后结合自己的理解稍作修改即可。

2440init.s

点击(此处)折叠或打开

  1. //GET为操作,包含三个文件,这三条语句不能顶头写
  2. GET option.inc //主要包含栈地址、中断服务程序基地址以及与系统初始化相关的几个常量定义;
  3. GET memcfg.inc //主要包含了与SDRAM初始化相关的几个参数定义;
  4. GET 2440addr.inc //S3C2440处理特殊功能寄存器的地址的定义。
  5. //主要是将当前程序状态寄存器CPSR中模式控制位进行定义。
  6. USERMODE EQU     0x10
  7. FIQMODE EQU     0x11
  8. IRQMODE EQU     0x12
  9. SVCMODE EQU     0x13
  10. ABORTMODE EQU     0x17
  11. UNDEFMODE EQU     0x1b
  12. MODEMASK EQU     0x1f
  13. NOINT EQU     0xc0
  14. //EQU定义常量时,需要顶格书写


 

   

上一篇:ARM c语言基础
下一篇:NAND FLASH原理与实验