ARM 芯片的启动程序的分析和总结
(2009-02-04 14:35:26)
转载
©标签:分类:ARM
杂谈
1、综述:
目前大多基于ARM芯片的系统都是一个比较复杂的片上系统,多数硬件模块都是可配置 的,可以通过软件来设置速的外设正常通讯和降低功耗(降低外设运行速度使功耗降低),LPC2119又集成了一个额外 的分频器。PLL的激活是由
PLLCON寄存器控制。PLL倍频器和分频器的值由PLLCFG寄 存器控制。对PLLCON或PLLCFG寄存器的更改必须遵循严格的顺序,否则所作更改是无 法生效的(在连续的VPB周期内向PLLFEED寄存器写入OxAA、0x55,在此期间中断必须 是被禁止的。)
中断初始化
ARM7的向量中断控制器(Vectored Interrupt Controller)可以将中断编程为3类:FIQ、 向量IRQ、非向量IRQ。FIQ中断请求的优先级最高,其次是IRQ中断请求,非向量IRQ 的优先级最低。VIC具有32个中断请求输入,但在LPC2219中只占用了 17个中断输入。 对于这17个中断源的IRQ/FIQ选择,由VICIntSelect寄存器控制,当对应位设置位1时, 则此中断为FIQ中断,否则为IRQ中断。若再将IRQ中断设置到向量控制寄存器 (VICVectCntIn)中,则此中断为向量IRQ中断,否则为非向量IRQ中断。FIQ中断是专门用 来处理那些需要及时响应的特殊事件,尽可能地只给FIQ分配一个中断源。
进入 C 应用程序
至此,系统各部分的初始化基本完成,可以直接从启动代码转入到应用程序的 main() 函数入口。从启动代码转入到应用程序的实例代码如下:
IMPORT main
LDR R0, =main
BX R0
2、总结
一个优秀的启动代码将给应用程序的开发提供一个良好的开发平台。本文中较详细的 讨论了启动代码的编写及难点。其中在堆栈初始化过程中要特别的注意两点:
要尽量给堆栈分配快速和高带宽的存储器。
尽量避免过早将处理器切换到用户模式,一般在系统初始化的最后阶段才切换到用户
模式(用户模式没有权限通过修改 CPSR 来进行模式切换)。
嵌入式系统的迅猛发展,使启动代码的编写成为嵌入式系统开发人员应该具备的能力。
本文有助于正在从事嵌入式ARM开发的读者理解启动代码的内涵与编写出适合自己的启动
代码。
启动文件分析(试验总结)
(以下所有完全是我自己在今晚对arm启动代码的所有理解,可能有很大的问题,但目前 为止,我还是能自圆其说,还是另自己信服的,如果高手看出什么低级错误,欢迎指出,共 同学习!)
玩 arm 底层编程也有一个星期,感觉机会成熟,晚上认真把周立功的启动底层代码认真看 了一遍,感觉豁然开朗,呵呵,赶快把学到的写在这里,怕以后忘记。
完全理解这些基础的代码是学习移至uc/os或者uclinux的第一步,所有arm的核,甚至可 以说x86的架构都是很相似的。这里所说的启动文件是没有任何操作系统,没有任何软件的 基础上,去实现 arm 的编程,让程序运行于 arm 之上。简单的说就是 arm 上电复位,首先 执行的代码,相当与x86的BIOS。
如果想透彻了解,下面知识是必备的:c语言,汇编基础,arm的架构(对于arm底层开发, 以及中断处理,假中断避免,调度算法,实时性分析都有很重要的帮助),arm常用指令。 这些东西分别可以从谭浩强、杜春雷的书上找到解决方法。最好还要知道一些可执行文件的 知识(hex和bin,ads产生的axf文件的差别,用utla还是很容易看出ro,rw,zi上的区别,二进 制文件头还是有些不同的)。因为有操作系统和计算机组成原理的知识,所以进入下面一段, 直入主题:
拿周立功 lpc2100 开发板带的启动文件说事,其全部引导相关文件如下:
**************************** 配置文件
lpc2XXX .h************************** 此款芯片的头文件
*************************** 目标头文件
**************************** 堆配置
*************************** 栈配置
***************************** 中断配置
startup s***************************启动文件配置(VIC 等)
*************************分散和加载文件( 类似,以 b 开刀)
面分别分
ARM的启动过程 来自淘豆网m.daumloan.com转载请标明出处.