zoukankan      html  css  js  c++  java
  • ARM的启动和中断向量表

    启动的方式

    对于S3C2440而言,启动的方式有两种,一是Nor Flash方式启动,二是Nand Flash方式启动。

    使用Nor Flash方式启动

    Nor Flash的地址范围如下

       0x0000.0000—0x0800.0000 (2M Nor Flash)

       片内的BootSRAM地址被置为

       0x4000.0000—0x4000.DFFF (4K BootSRAM)

    由于可以在Nor Flash直接运行代码,因此BootSRAM被映射到别的地址上去,可作为其他用途。

    程序映像直接存放到NOR FLASH里面,中断向量表存放在0x0000.0000开始的8×4大小的空间中。

    中断产生时,PC被置为相对应的向量地址。如上电或者按Reset键时,PC直接置为0x00,从NOR FLASH的0x00处开始执行。

    使用NAND Flash方式启动

    此时,片内的BootSRAM地址被置为

       0x0000.0000—0x0800.0000 (4K BootSRAM)

       NAND Flash地址接NFCE

    由于NAND Flash中不能运行代码,因此必须复制到内存之中再运行。

          程序映像存放在NAND FLASH中,中断向量表位置在程序映像的最前面。由于NAND FLASH不能运行代码,系统上电或者Reset的时候,内置的NAND FLASH 将访问控制接口,并将中断向量表和引导代码自动加载到内部SRAM(此时该SRAM 定位于起始地址空间0x00000000,容量为4KB),并且置PC值为0x00运行程序(这一切是有芯片内部的硬件逻辑完成的)。之后,SRAM 中的引导程序将操作系统镜像加载到SDRAM 中,操作系统就能够在SDRAM 中运行。启动完毕,4KB 的启动SRAM 就可以用于其他用途。

    中断向量表的设置

    ARM中的异常与中断总共有7种

     

    按响应优先级从高到低

    按中断向量表顺序

    复位

    复位

    数据中止

    未定义指令中断

    FIQ

    SWI

    IRQ

    预取指令中止

    预取指令中止

    数据中止异常

    未定义指令、SWI

    IRQ

     

    FIQ

          ARM要求中断向量表必须放置在从0地址开始,连续8×4字节的空间内(ARM720T和ARM9、ARM10也支持从0xFFFF0000开始的高地址向量表),各异常和中断向量在向量表中的位置如下

     

    地址

    中断

    0x00

    Reset

    0x04

    Undef

    0x08

    SWI

    0x0C

    Prefetch Abort

    0x10

    Data Abort

    0x14

    (Reserved)

    0x18

    IRQ

    0x2C

    FIQ

          当中断产生时ARM处理器强制把PC指针置为中断向量表中相对应的向量地址。因为每个中断向量在向量表中只有一个字节的存储空间,只能存放一条指令,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。

     

    中断向量表的实现程序通常如下

    AREA Boot,CODE,READONLY

    ENTRY

    B Reset_Handler ; Reset_Handler is a label

    B Undef_Handler

    B SWI_Handler

    B PreAbort_Handler

    B DataAbort_Handler

    B ;for reserved interrupt, stop here

    B IRQ_Handler

    B FIQ_Handler

          其中的关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这段代码是冗余代码,将其优化。链接的时候要确保这段代码被连接到0地址处,并且 作为整个程序的入口点(ENTRY并非总是用来设置程序的入口点的,所以通常需要在链接选项里面显式的设置程序入口点)。

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/getyoulove/p/3850370.html
Copyright © 2011-2022 走看看