首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于mini2440 的 bootloader 设计 ---- 2、处理器介绍

基于mini2440 的 bootloader 设计 ---- 2、处理器介绍

开发环境:               电脑系统:RedHat Enterprise Linux6   kernel version : linux-2.6.32
               交叉工具链:arm-linux-xxx4.3.2
               开发板版本:mini2440 S3C2440处理器  64M SDRAM   256M nand flash


       bootloader的工作就是对开发板进行初始化然后加载内核并启动内核。其中对开发板的初始化包括:初始化CPU、初始化板载资源。
而这两项初始化工作都涉及到对CPU的底层操作,即需要用低级语言----汇编 进行初始化CPU,当建立起C语言的运行环境(建立堆栈)以后才能使用C语言对板载资源进行初始化。
一、总体印象

  





S3C2440处理器由一个ARM920T核加上几个总线构成,其中外设的控制器是挂载在总线上的。再在ARM920T_TRM1_S 手册中找到ARM920T 的结构框图:





ARM920T是由一个ARM9TDMI 核加上一些caches、mmu 、协处理器(cp15)组成。


ALU加上相应的寄存器。指令的取指、解释、执行和各种运算都在这里面完成。        总之,S3C2440处理器包含一个ARM920T 的核,而ARM920T 核又包含一个ARM9TDMI 的核,实际意义上的处理器核就是ARM9TDMI,它完成运算和指令的执行(类似8086处理器,仅仅一个逻辑单元和控制单元外加寄存器)。我们编写代码操作CPU 的时候大多是控制ARM920T,当然如果要使用外设,就要控制各种总线上的各种控制器,其上也会有各种寄存器。但是这已经不是核里面的寄存器了,对它们的读写都需要先给出地址信号才行(就像读写内存一样)。
二、ARM 核介绍

这里的ARM核指的是ARM920T,参考资料包括《ARM920T_TRMI_S.PDF》 、《
ARM Architecture Reference Manual》、《ARM9TDMI》。

1、支持数据类型
ARM 核支持如下数据类型:

   Byte -->   8 bits

          halfworld  -->  16 bits
          world      -->  32 bits
2、 处理器工作模式

ARM
核支持以下7种工作模式:

        其中大多数程序运行在usr 模式,Linux内核运行在svc 模式。Mode number 字段表明当处于这种模式下时,CPSR
中的M[4:0]字段的值,因此改变该字段可以切换CPU的工作模式。



3、寄存器
ARM 核共有37个寄存器,其中31个通用寄存器,6个状态寄存器。其中每个操作模式所能访问到的寄存器不同,
带有灰度三角形的寄存器是在相应的操作模式下才能访问到。如svc模式下,除了能访问正常的R0-R15以及CPSR 还能访问R13_svc、R14_svc、CPSR_svc。其他模式能访问到的寄存器以此方法类推。在某种CPU模式下R0-R12都可以作为普通寄存器使用,而R13-R15有特殊含义:
       注意:1、R15作为PC指针使用
            2、R14还有一R13个名称:link register or lr,它除了作为普通通用寄存器使用外,用于储存子程序返回地址,即如果要从子程                 序中返回时,可以直接将其值赋给PC(mv pc,lr)
            3、R13除了作为通用寄存器,还可以作为SP指针使用。
CPSR:程序状态字寄存器,记录当前程序运行的状态。


具体每个字段代表的含义可查询手册。
4、异常
ARM 处理器支持7种异常,其中每种异常的发生都会使得处理器进入一种工作模式,当然处理器的工作模式除了通过异常改变以外,还可以通过软件设置。异常表如下:


Normal address 表示当该异常发生时CP指针的值是多少。因此我们在设置异常向量表时就要根据这个表格设置。通常在该地址存放一个跳转指针,这样就能跳转到相应的代码完成相应的功能。
5、大小端模式
ARM 处理器同时支持大端模式(Big-Endian)和小端模式(Little-Endian)。
       Big-Endian:数据的逻辑地址数放在物理内存的地址处,逻辑地址数放在物理内存的地址处。如程序中出现的                                      0xABCD,A存放在一个world中的最低位,,D放在最高位;
       Little-Endian:数据的逻辑地址数放在物理内存的地址处,逻辑地址数放在物理内存的地址处。如程序中出现的                                      0xABCD,A存放在一个world中的最高位,,D放在最低位。
       到这里,编写Bootloader所需要知道的处理器硬件知识就介绍这么多,以后需要了解的知识在进行补充。
返回列表