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并非总是用来设置程序的入口点的,所以通常需要在链接选项里面显式的设置程序入口点)。

ARM的启动和中断向量表

时间: 2025-01-12 08:40:41

ARM的启动和中断向量表的相关文章

arm linux 启动之二:start_kernel到创建1号进程

本文介绍arm linux启动的第二部分,C语言编写,主要讲述start_kernel到1号进程的创建.主要讲述大概过程,以后再对子函数进行讲解. 一.start_kernel start_kernel位于init/main.c,主要完成linux一些子系统的初始化. 1)smp_setup_processor_id() 单CPU位为空. 2)lock_kernel() 锁CPU,linux是支持抢占的,多CPU时调用这个函数防止其他CPU抢占.3)tick_init() 时间相关初始化4)bo

ARM上电启动及Uboot代码分析

注意:由于文档是去年写的,内有多个图片,上传图片很麻烦(需要截图另存插入等等),我把文章的PDF版本上传到了CSDN下载资源中.为了给自己赚点积分,所以标价2分,没有积分的同学可以直接留言跟我要,记得留下邮箱. 以下是文章内容,由于我懒得编辑图片了,所以文章看来会很不爽,强烈推荐点击以上红色链接下载pdf版. 文件编号:DCC01 版本号:1.0 ARM上电启动及Uboot代码分析 部    门:                          作    者:                 

arm linux 启动之一:汇编启动到start_kernel

描述arm linux启动的概要过程,以S5PV210(Cortex A8)为例,本文描述第一个阶段. 一.arm linux的引导 uboot在引导arm linux(uImage镜像)到SDRAM之后,通过bootm命令对uImage镜像的64个字节头进行解释,获取linux的entry入口地址,并赋值给theKernel函数指针(一般该值是0x30008000),并将uboot的环境变量参数(如平台的内存块区域信息.linux启动命令信息bootargs等)按linux要求的tags形式放

linux-3.2.36内核启动1-启动参数(arm平台 启动参数的获取和处理,分析setup_arch)【转】

转自:http://blog.csdn.net/tommy_wxie/article/details/17093297 最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动. 看的过程中总结了一点东西,希望可以帮助大家调试内核. 当我开始看的时候,第一件事是从网上搜集资料,不看不知道,一看吓一跳!牛人太多了,像这种内核启动的上古代码早就被人分析的彻彻底底.这注定我写的只能是烂微博了. 为了此微博有存在的必要,我会显示内核启动打印的代码位置(用绿色表示)及出现错误打印的原因(用红

ARM处理器启动流程

S3C2440: 从nandflash启动的时候,上电之后,硬件自动将nandflash里bootloader的前4K代码复制到stepping stone(0地址)中,这4K的代码除了负责一些硬件初始化,还负责将bootloader剩下的代码复制到内存0x3000 0000中,然后4K运行完之后跳转到内存中继续运行剩下的bootloader,最后引导操作系统启动. S3C6410: s3c6410中零地址是一个映射区域(位于0地址),6410可实现从SDRAM,IROM(包含SD卡启动和nan

[国嵌笔记][029][ARM处理器启动流程分析v2]

2440启动流程 启动方式:nor flash启动.nand flash启动 地址布局: 选择nor flash启动时,SROM(nor flash)地址为0x00000000 选择nand flash启动时,SRAM(SteppingStone)地址为0x00000000 SDRAM(内存)地址为0x30000000 启动流程: 1.第一阶段 首先,处理器复制nand flash的BL1(前4KB)到Steppingstone中,执行BL1(bootloader第一部分).然后,复制BL2(b

【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boot 源码 : http://download.csdn.net/detail/han1202012/8342761 -- S3C2440 文档 : http://download.csdn.net/detail/han1202012/8342701 -- S5PV210_iROM_Applicati

关于ARM CM3的启动文件分析

下面以ARM Cortex_M3裸核的启动代码为例,做一下简单的分析.首先,在启动文件中完成了三项工作: 1.  堆栈以及堆的初始化 2.  定位中断向量表 3.  调用Reset Handler. 在介绍之前,我们先了解一下ARM芯片启动文件中涉及到的一些汇编指令的用法. 补充一下,其中DCD相当于C语言当中的&,定义地址. 1.堆栈以及堆的初始化 1.1 堆栈的初始化 Startup_xxx.s中的堆栈初始化代码 Stack_Size  EQU  0x00000400,这个语句相当于Stac

Arm启动流程解析

谈到arm的启动流程不得不说的是bootloader,但是我这篇文章主要来谈谈arm启动流程的,所以bootloader只是跟大家简介一下就ok.这篇文章我会谈到以下内容: 1.bootloader简介以及其作用 2.2440.6410.210当下比较常见的3款处理器的启动流程进行简单分析,通过这三款处理器的分析希望大家掌握arm处理器的启动分析. Ok我们进入主题 l  Bootloader简介及其作用 在我看来bootloader的作用是初始化必要的硬件,引导内核启动.(当然这是主要作用,今