ARM工作模式和BOOTLOADER -2410

发布者:冰心独语u最新更新时间:2012-11-13 来源: 21ic 关键字:ARM  工作模式  BOOTLOADER 手机看文章 扫描二维码
随时随地手机看文章
    简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 
    Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。 
    
    基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。在系统加电后,CPU 将首先执行 Boot Loader 程序。
大多数 Boot Loader 都包含两种不同的操作模式:“启动加载”模式和“下载”模式 :
启动加载(Boot loading)模式:Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。
下载(Downloading)模式:Boot Loader 将通过串口连接或网络连接等通信手段从主机(HoST)下载文件,比如:下载内核映像和根文件系统映像等。

BOOT的一般步骤为:

        设置中断向量表
        初始化存储设备
        初始化堆栈
        初始化用户执行环境
        呼叫主应用程序

设置中断向量表
    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地址处,并且作为整个程序的入口。? 

初始化存储设备
    存储器端口的接口时序优化是非常重要的,这会影响到整个系统的性能。因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能的快;而同时又要考虑到由此带来的稳定性问题。
在不同的板子上处理芯片、存储设备以及其接口差异很大,应根据不同的情况来配置。

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

   这是一段堆栈初始化的代码示例:
mrs     r0,cpsr  ;读取cpsr寄存器的值
bic     r0,r0,#MODEMASK ;把模式位清零
orr     r1,r0,#UNDEFMODE|NOINT
msr     cpsr_cxsf,r1  UndefMode
ldr     sp,=UndefStack
其他模式的堆栈的初始化也类似。

堆栈地址的定义一般如下:
 ^ (_ISR_STARTADDRESS-0x1400)
    
UserStack # 1024 #=field,定义一个数据域,长度为1024
SVCStack # 1024
UndefStack # 1024 
AbortStack # 1024 
IRQStack # 1024 
FIQStack # 0

初始化用户执行环境
    一个ARM映像文件由RO,RW和ZI三个段组成,其中RO为代码段,RW是已初始化的全局变量,ZI是未初始化的全局变量。映像一开始总是存储在ROM/Flash里面的,其RO部分即可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中执行;而RW和ZI这两部分是必须转移到可写的RAM里去。所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。 
    
    编译器使用下列符号来记录各段的起始和结束地址: 
|Image$$RO$$Base| :RO段起始地址 
|Image$$RO$$Limit| :RO段结束地址加1
|Image$$RW$$Base| :RW段起始地址
|Image$$RW$$Limit| :ZI段结束地址加1
|Image$$ZI$$Base| :ZI段起始地址
|Image$$ZI$$Limit| :ZI段结束地址加1 
    这些标号的值是根据链接器中设置的中ro-base和rw-base的设置来计算的。 
    初始化用户执行环境主要是把RO、RW、ZI三段拷贝到指定的位置。
关键字:ARM  工作模式  BOOTLOADER 引用地址:ARM工作模式和BOOTLOADER -2410

上一篇:基于ARM的智能电网数据采集器设计
下一篇:内嵌ARM9E内核系统级芯片的原型验证方法

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

基于ARM9核的S3C2410芯片和操作系统实现调色板显示系统的设计
对于一个显示设备,数据的更新率正比于画面的像素数和色彩深度的乘积。在嵌入式Linux系统中,受处理器资源配置和运算能力的制约,当使用大分辨率显示时(如在一些屏幕尺寸较大的终端上,往往需要640×480以上),需要降低显示的色彩深度。否则,由于数据处理负担过重会造成画面的抖动和不连贯。这时,调色板技术将发挥重要作用。ARM9内核的S3C2410在国内的嵌入式领域有着广泛的应用,芯片中带有LCD控制器,可支持多种分辨率、多种颜色深度的LCD显示输出。在此,将S3C2410的调色板技术,以及嵌入式Linux系统下调色板显示的实现方法进行分析。 1 S3C2410调色板技术概述 1.1 调色板的概念 在计算机图像技术中,一个像素的颜色
[单片机]
基于<font color='red'>ARM</font>9核的S3C2410芯片和操作系统实现调色板显示系统的设计
英迪芯微发布世界最小尺寸基于ARM核的汽车氛围灯控制芯片iND83212
车规混合信号芯片厂商英迪芯微近日宣布推出面向照明和微马达驱动的全新系统集成芯片-iND83212 该产品是英迪芯微的Realplum家族的最新产品,兼具LIN通讯,算法处理,电源管理和高压IO驱动,非常适合车内照明控制以及微马达控制的应用。 iND83212性能一览 集成ARM M0核 提供64K Flash以及16K SRAM 第三代LIN收发器及控制器 60mA的高压恒流源 支持16位 PWM调光,PN电压检测,温度传感器,12位SAR ADC 提供4路GPIO,可通过GPIO实现外部LED的分时电路控制,以及马达继电器的驱动电路控制 更小尺寸·更高性能
[汽车电子]
英迪芯微发布世界最小尺寸基于<font color='red'>ARM</font>核的汽车氛围灯控制芯片iND83212
搞定ARM指令集(一) --- 数据存储装载指令
ARM指令属于精简计算机指令(RISC),其条数较多,较难记忆,但事物的发展都是有延续性的,尤其是自然科学,其本身就是一种积累,所以她们的发展就必然是建立在某种规律之上的!掌握和熟悉规律之后再去研究细节,往往能达到事半功倍的效果! 最近有需求,也渴望掌握ARM指令集,所以决定挤出时间攻克之! 逻辑运算指令和算数运算指令算是比较简单的,略过一遍,还好,下次看到应该可以推测出她们的意思,没必要花太多的时间去记忆和理解! 接下来就遇到一些存储指令了,这类指令分为读取和存储两类,在这边就先不总结了,摘抄博友的内容如下: http://blog.chinaunix.net/u1/59572/showart_1011361.h
[单片机]
基于ARM硬件的手持机间短消息交互的程序设计
引言 短消息是现代通信的重要形式之一,短信业务让手机成为电报式的解读工具,使视觉文字成为现代通信中传递信息和沟通的一种重要方式。短信这种文字视觉式的信息传输、解析特点,使其他类似的短消息业务广泛应用于具备通信功能的嵌入式手持设备中。 在研制一种基于STM32F107VCT6芯片的互联形嵌入式手持机时,不同的用户之间需要进行文本信息交互。本文基于现实需求,根据短信的基本定义并参考现代手机中短信的功能设计,研究了一套实现短消息功能的方案,以实现短消息的编辑、存储、发送、接收等功能,并在某嵌入式手持设备中获得了应用。 1短消息总体设计 手持机的短消息通信功能是嵌入式通信系统整体设计方案的一部分,不同的嵌入式手持机设备通过网线采用
[单片机]
基于<font color='red'>ARM</font>硬件的手持机间短消息交互的程序设计
STM32/ARM Cortex-M3复位序列
在离开复位状态后,CM3做的第一件事就是读取下列两个32位整数的值: 1)从地址0x0000 0000 处取出MSP的初始值 2)从地址0x0000 0004 处取出PC的初始值——这个值是复位向量,LSB必须是1.然后从这个值所对应的地址处取指,如下图1所示。 图1 请注意,这与传统的ARM架构不同——其实也和其它大多数的单片机不同。传统的ARM架构总是从0地址开始执行第一条指令,并且这是一条跳转指令。在CM3中,在0地址提供的是MSP的初始值,然后紧跟着的是向量表(向量表在以后还可以转移到其它位置)。向量表中的数值是32位的地址,而不是跳转指令。向量表的第一个条目指向复位后应执行的第一条指令。 因为
[单片机]
STM32/<font color='red'>ARM</font> Cortex-M3复位序列
单片机 arm 常用的接口总结
常用的接口有spi,I2c,uart等,他们都有自己的协议规定,下面谈谈它们之间的联系与区别: 1 I2C总线 涉及到I2C的编程主要涉及到两种情况:有专用控制器的arm芯片,无控制器的单片机芯片。有控制器的arm芯片,主要就是依据数据手册,通过设置相应的寄存器(控制寄存器,状态寄存器等)来实现相应的操作;然而对于没有控制器的单片机芯片,只有通过相应的引脚根据I2c协议来予以模拟实现。 首先来谈谈I2c协议。涉及到的信号主要分为三类:开始信号,停止信号,发送数据。既然是协议,就是双方事先约定好的规定,通信双方按照这个标准来进行数据的传输就可以了。保证数据传输的一致性的话,还有在某些时候发送一些附带的检查信息,例如ack信
[单片机]
单片机 <font color='red'>arm</font> 常用的接口总结
arm学习笔记之gcc-3.4.1交叉编译器在redhat9.0下的安装(VMware)
参考 http://blog.csdn.net/wince_man/article/details/6886685 http://blog.sina.com.cn/s/blog_8f396e3701010twv.html 我使用的是第二个链接的方法。 在redhat 9.0 上安装了arm-linux-gcc3.4.1,makefile的libgcc.a库的路径也已更改过来,但在“make”时,链接出来如下问题: arm-linux-ld:171test.lds:13: syntax error make: *** Error 1 arm-linux-gcc和gccc的区别: 同样的C文件,二个编译器,生成的二进制
[单片机]
根据ARM的LCD触摸屏系统设计策略
随着嵌入式系统技术的飞速发展,工业设备产品也越来越现代化,普遍要求可视化操作。LCD触摸屏低耗能.散热小,成本低,纤薄轻巧,外形尺寸小,安装容易。使用LCD触摸屏作为工业设备的输入输出设备既能达到可视化的要求,方便现场操作,又能降低产品的成本。而在产品的整体设计过程中,人机交互界面的设计往往占据着很大一部分工作,这样,不但极大地增加了产品的开发成本瓶且延长了产品的上市周期。本文设计的基于S3C44BOX的人机交互界面是一种可定制、简单易用、性能优良的通用型人机交互界面,能很好地解决上述问题。 1 系统结构 系统主要包括三个部分,分别为PC机、S3C4480X微处理器和LCD触摸屏模块。系统结构框图如图1所示。
[单片机]
根据<font color='red'>ARM</font>的LCD触摸屏系统设计策略
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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