ARM的启动过程详解

发布者:Alisallll最新更新时间:2013-12-05 来源: chinaitlab关键字:ARM  启动过程  片上系统 手机看文章 扫描二维码
随时随地手机看文章

      基于arm的芯片多数为复杂的片上系统,这种复杂系统里的多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。一般通用的内容包括:

中断向量表
初始化存储器系统
初始化堆栈
初始化有特殊要求的断口,设备
初始化用户程序执行环境
改变处理器模式
呼叫主应用程序

中断向量表
      arm要求中断向量表必须放置在从0地址开始,连续8X4字节的空间内。
      每当一个中断发生以后,arm处理器便强制把PC指针置为向量表中对应中断类型的地址值。因为每个中断只占据向量表中1个字的存储空间,只能放置一条arm指令,使程序跳转到存储器的其他地方,再执行中断处理。
中断向量表的程序实现通常如下表示:
AREA Boot ,CODE, READONLY
ENTRY
B  ResetHandler
B  UndefHandler
B  SWIHandler
B  PreAbortHandler
B  DataAbortHandler
B
B  IRQHandler
B  FIQHandler
其中关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段亢余代码而加以优化。链接的时候要确保这段代码被链接在0地址处,并且作为整个程序的入口。

初始化存储器系统

存储器类型和时序配置

      通常Flash和SRAM同属于静态存储器类型,可以合用同一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口。

      存储器端口的接口时序优化是非常重要的,这会影响到整个系统的性能。因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能的快;而同时又要考虑到由此带来的稳定性问题。
存储器地址分布

一种典型的情况是启动ROM的地址重映射。

初始化堆栈
因为arm有7种执
行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。因此,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,让后给SP赋值。注意:不要切换到User模式进行User模式的堆栈设置,因为进入User模式后就不能再操作CPSR回到别的模式了,可能会对接下去的程序执行造成影响。

这是一段堆栈初始化的代码示例,其中只定义了三种模式的SP指针:
MRS  R0,CPSR
BIC  R0,R0,#MODEMASK 安全起见,屏蔽模式位以外的其他位
ORR  R1,R0,#IRQMODE
MSR  CPSR_cxfs,R1
LDR  SP,=UndefStack

ORR  R1,R0,#FIQMODE
MSR  CPSR_cxsf,R1
LDR  SP,=FIQStack

ORR  R1,R0,#SVCMODE
MSR  CPSR_cxsf,R1
LDR  SP,=SVCStack

初始化有特殊要求的端口,设备

      初始化应用程序执行环境
      映像一开始总是存储在ROM/Flash里面的,其RO部分即可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中执行;而RW和ZI这两部分是必须转移到可写的RAM里去。所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。

下面是在ADS下,一种常用存储器模型的直接实现:
LDR  r0,=|Image$$RO$$Limit| 得到RW数据源的起始地址
LDR  r1,=|Image$$RW$$Base| RW区在RAM里的执行区起始地址
LDR  r2,=|Image$$ZI$$Base| ZI区在RAM里面的起始地址
CMP  r0,r1         比较它们是否相等
   BEQ  %F1
0   CMP  r1,r3
   LDRCC r2,[r0],#4STRCC r2,[r1],#4
   BCC  %B0
1   LDR  r1,=|Image$$ZI$$Limit|
   MOV  r2,#0
2   CMP  r3,r1
   STRCC r2,[r3],#4
   BCC  %B2
      程序实现了RW数据的拷贝和ZI区域的清零功能。其中引用到的4个符号是由链接器第一输出的。
|Image$$RO$$Limit|:表示RO区末地址后面的地址,即RW数据源的起始地址
|Image$$RW$$Base|:RW区在RAM里的执行区起始地址,也就是编译器选项RW_Base指定的地址
|Image$$ZI$$Base|:ZI区在RAM里面的起始地址
|Image$$ZI$$Limit|:ZI区在RAM里面的结束地址后面的一个地址

      程序先把ROM里|Image$$RO$$Limt|开始的RW初始数据拷贝到RAM里面|Image$$RW$$Base|开始的地址,当RAM这边的目标地址到达|Image$$ZI$$Base|后就表示RW区的结束和ZI区的开始,接下去就对这片ZI区进行清零操作,直到遇到结束地址|Image$$ZI$$Limit|

改变处理器模式
      因为在初始化过程中,许多操作需要在特权模式下才能进行(比如对CPSR的修改),所以要特别注意不能过早的进入用户模式。

      内核级的中断使能也可以考虑在这一步进行。如果系统中另外存在一个专门的中断控制器,这么做总是安全的。

呼叫主应用程序

      当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序。最简单的一种情况是:
IMPORT main


B   main
直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。
在arm ADS环境中,还另外提供了一套系统级的呼叫机制。
IMPORT __main

B   __main
__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()函数

 

关键字:ARM  启动过程  片上系统 引用地址:ARM的启动过程详解

上一篇:ARM开发软件及实用工具介绍
下一篇:32位嵌入式处理器应用开发ABC

推荐阅读最新更新时间:2024-03-16 13:31

解读灿芯半导体与ARM战略合作背后的深意
灿芯半导体(上海)有限公司近日宣布与ARM签署了一份长期协议,将被授权使用ARM的IP工具包,其中包括ARMCortex、ARM9/11和Mali系列处理器,以及CoreSight调试追踪技术和与AMBA兼容的系统设计IP。就本次合作协议,《电子系统设计》记者专访了灿芯半导体CEO职春星和ARM中国区总经理吴雄昂先生,请他们解读这份长期协议背后的深意。 本次合作有什么市场背景和需求? ARM中国区总经理吴雄昂:从ARM角度来看,在后PC时代,特别在中国,各类消费电子产品和各类行业应用对高端的SoC平台需求很大,这个平台上需要很好的服务和应用,对功耗和性能都有很高的要求。但是也存在很大的矛盾,真正的无晶圆IC芯片量很大
[嵌入式]
Arm公布Project Trillium提供业界最具扩展性
   Arm 公司近期宣布了其Project Trillium项目,这是一套包括新的高度可扩展处理器的 Arm  IP组合,这些产品可以提供增强的 机器学习 (ML)和神经网络(NN)功能。当前的技术产品主要针对移动设备市场,将让全新的搭载 机器学习 功能的设备具有先进的计算能力,包括最先进的目标检测功能。下面就随网络通信小编一起来了解一下相关内容吧。    Arm  IP 产品事业部总裁 Rene Haas 表示:“随着人工智能快速部署到终端设备,大量提升计算需求的同时,也要求保持出色的能效表现。 基于这样的需求,Arm宣布推出全新 机器学习 平台Project Trillium。 新的设备需要高性能的机器学习与人工智能能力,这
[网络通信]
基于ARM微处理器LPC2132的智能电动机保护器设计
1 引 言 随着电动机控制中心(MCC)技术的发展,模块化的智能电动机保护器得到了越来越广泛的应用,同时也对电动机保护提出了更高的要求。针对电气监控系统自动化程度越来越高的发展趋势,用低压智能电动机保护控制器作为发电厂低压电动机的保护和测控,是提高电气监控系统运行维护水平的重要手段。 目前传统的8/16位的单片机仍然广泛应用于电气保护中,但是他们仅仅具有基本的测量控制功能,在人机界面、数据查询、监控处理能力比较有限,大部分缺少网络通信功能。在实现自动在线监测领域中,ARM芯片在多目标采集,多层次监测和网络化等方面具有强大的优势。由于LPC2132属于ARM7系列处理器,能对多个采样点进行同时测量,具有强大的数据处理功能。同时,
[应用]
基于ARM的矩阵键盘设计及其linux驱动实现
      1.引言   ARM微处理器已广泛应用于 工业控制 、消费类电子产品、通信系统等领域。矩阵键盘是一种常用的键盘形式,它将按键设计成M行N列,这样共需M+N根信号线,却可驱动M×N个按键,大大节约了I/O资源。本文介绍了一种利用TQ2440开发板的GPIO口扩展5×4矩阵键盘的方法,并将所有按键重新布局成手持终端的键盘形式,方便操作。    2.硬件设计   本设计扩展5行4列的矩阵键盘,如图1所示。其中行线ROW1-ROW5连接S3C2440的中断引脚EINT8,EINT9,EINT11,EINT13,EINT14[1]。这些中断引脚本身连有10kΩ的上拉电阻,把中断引脚电平拉高,确保按键空闲时不会触发中断。列线C
[电源管理]
基于<font color='red'>ARM</font>的矩阵键盘设计及其linux驱动实现
基于ARM7TDMI-S微处理器LPC2142的热敏电阻温度计的设计
  传统的热敏电阻温度计硬件上大多采用普通单片机(MCS-51系列)+A/D转换器以及LED显示模块构成,分立元件多、功耗大、设计复杂且难以调试;软件上也多采用冗长繁琐的汇编语言来实现,设计效率低、可移植性差、性能难以保证。   目前,嵌入式系统的应用已经进入到一个高、低端并行发展的阶段,其标志就是32位微控制器的发展。ARM(Advanced RISC Machines)是嵌入式系统应用比较广泛的一种32位微处理器核,具有体积小、功耗低、集成度高、硬件调试方便和可移植操作系统等优点。为智能仪器向轻便化、智能化、微机一体化等方向发展提供了必要条件。   由于电子技术的飞速发展,电子元器件的性价比不断得到提高。本文采用32位的A
[单片机]
基于ARM7处理器的USB接口与CAN总线的实例
为了更好的将USB的通用性和CAN的专业性结合起来,通过计算机的USB接口接入CAN专业网络,实现系统控制的便利性和应用的高效性,本文讲述了一种基于ARM7处理器实现USB接口与CAN总线的实例,通过其可以在PC实现对CAN总线上设备的监控。 1 硬件系统设计 1.1 处理器简介及其外围电路设计 主控制器选用NXP公司的ARM7核处理器LPC2119。LPC2119是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STM CPU,并带有128 KB嵌入的高速FLASH存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降
[单片机]
基于<font color='red'>ARM</font>7处理器的USB接口与CAN总线的实例
ARM9基础教程lessen2—定时器
上篇I/O控制文章中,程序需要延时时,我们是利用循环语句来实现。这种方法的延时简单,但不是很精确。当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。在这里,我们就介绍一下s3c2440定时器。 ► S3C2440的时钟源 在讲解之前,先介绍一下s3c2440时钟系统。一般来说,MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。 UPLL是给USB提供
[单片机]
<font color='red'>ARM</font>9基础教程lessen2—定时器
ARM中断向量表重定位到片外RAM方法
由于ARM CPU产生中断或者异常后,PC指针自动跳转到0x00地址执行(同时执行一些CPSR寄存器的保存、运行模式的转换等),所以要在0x00地址处存放中断向量表。而如果我们想将中断向量表重定位到片外ram的 话, 有2中方法: 1、启用MMU 将片外RAM空间隐射到0x00处 2、在0x00(片内RAM)地址处存放一份和片外RAM一模一样的中断向量表 标准做法是将程序存放在NAND FLASH里面,S3C2440 CPU启动后,会将程序复制到片内RAM里面,此时中断向量表也复制到了IRAM里 3、有部分CPU支持设置中断向量表的寄存器 这样也可以实现重定位
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved