Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192563
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 424
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-19 12:41
文章分类

全部博文(38)

文章存档

2017年(2)

2016年(1)

2010年(8)

2009年(27)

我的朋友

分类: 嵌入式

2010-04-28 14:51:39

初始化代码完成的操作与具有的硬件平台相关,但一般包括一下的内容:
--初始化异常向量表(中断向量表)
--初始化存储器系统
--初始化堆栈
--初始化有特殊要求的端口和设备
--初始化应用程序的运行环境
--调用主应用程序
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
2、初始化存储器系统
   主要是对系统存储器控制器(MMU)的初始化。由于存储器控制器并不是ARM架构的一部分,不同芯片的实现方式各不相同。由于运算能力和寻址能力的强大, 基于ARM内核的微处理器系统一般都需要外扩展各种类型的存储器。对于存储器系统的初始化一般包括如下几个方面:
--存储器类型、时序和总线宽度的配置
--存储器地址的配置
(1)存储器类型
   基于ARM微处理系统的存储器一般有如下几类:SARM,DRAM,Flah,同时,即使同类存储器也有访问速度上的不同。其中,SRAM和Flah属于静态存储器,可以共用存储器端口,而DRAM有动态刷新和地址复用等特征,需要专门的存储器端口。
(2)时序
   存储器端口的接口时序优化对系统性能影响非常大,因为系统运行的速度瓶颈一般都存在于存储器的访问,因此希望存储器的访问尽可能快,但又要考虑由此带来的系统稳定性问题。
(3)总线宽度
   ARM微处理器架构支持8/16/32位的数据总线宽度访问存储器和外设,对于特定的存储器来说,需要设定数据总线的宽度。
(4)存储器地址的配置
   ARM微处理器架构理论上可以支持4GB的地址空间,而对于一个实际的系统来说,配置的物理地址远没有这么多,因此,如何配置存储器的地址,也是一个重要的问题。
(5)存储器地址重映射
   存储器地址重映射就是可以通过软件配置来改变一块存储器物理地址的方法,是当前许多先进控制器所具有的功能。
进行地址重映射的原因:提高系统的运行效率。
进行地址重映射的注意:保证程序流程的连续性。
有的ARM处理器不具有地址重映射的功能,可以采样代码搬移加跳转的方式完成上述功能。
3、初始化堆栈
   由于ARM微处理器有7中运行模式,每一种模式的堆栈指针(SP)都是独立的(其中系统模式和用户模式使用相同的SP)。因此,需要对每一种模式的SP进行初始化。
   采用的方法是:改变当前程序状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后初始化SP。但是对用户模式下SP的初始化应该放在最后,因为ARM微处理器进入用户模式之后就无法再切换到其他模式。
   设置堆栈应该注意的问题是:堆栈的大小根据需要确定,要尽可能给堆栈分配高速存储器(例如片内的SRAM)。堆栈性能的提高对提高系统整体性能的影响非常显著。
初始化堆栈的代码如下:
MRS R0, CPSR
BIC R0, R0, #MODEMASK
ORR R1, R0, #IRQMODE
MSR CPSR_c, R1
LDR SP, =IRQStack
BIC R0, R0, #MODEMASK
ORR R1, R0, #FIQMODE
MSR CPSR_c, R1
LDR SP, =FIQStack
.........
4、初始化应用程序和有特殊要求的端口和设备
   该部分的初始化由具体的系统和用户需求决定,一般的外设初始化可以放在系统初始化以后进行。比较典型的应用是驱动一些简单的输出设备,例如LED等,用来 指示系统启动的进程和状态。初始化应用程序的运行环境,就是完成必要的从ROM到RAM的数据传输,初始化有特殊要求的端口、设备和应用程序的运行环境。
5、改变处理器的模式
   ARM微处理器支持7种模式,其中:
超级模式(Supervisor):复位后的缺省模式。
多种特权模式变化:主要完成各模式的堆栈设置,注意不要进入用户模式。
用户模式:用户程序运行模式。
6、调用应用主程序
   当完成所有的系统初始化工作之后,就需要把程序流程转入主应用程序。最常见的操作是:
    IMPORT C_Entry
   ......
   B       C_Entry
阅读(3236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~