基于ARM的Bootloader启动流程分析

时间:2012-10-25来源:网络

/*设置时钟控制寄存器*/
ldrr0,=LOCKTIME
ldrr1,=0xfff
strr1,[r0]
.if PLLONSTART
ldrr0,=PLLCON/* 设置PLL */
ldrr1,=((M_DIV12)+(P_DIV4)+S_DIV)/*Fin=8MHz,Fout=64MHz*/
strr1,[r0]
.endif
ldr r0,=CLKCON
ldr r1,=0x7ff8 /*所有单元时钟允许*/
str r1,[r0]
/*为BDMA设置复位值*/
ldr r0,=BDIDES0
ldr r1,=0x40000000 /* BDIDESn 复位值应为 0x40000000 */
str r1,[r0]
ldr r0,=BDIDES1
ldr r1,=0x40000000 /* BDIDESn 复位值应为 0x40000000 */
str r1,[r0]
/*设置存储器控制寄存器,存储器的配置数据都存储在SMRDATA为起始地址的数据表中,下面的代码可以一次将预先配置好的初始化数据存入与存储器控制器相关的13个寄存器,这些寄存器则是以0x01c80000为起始地址的13个连续的32位寄存器*/
ldr r0,=SMRDATA
ldmia r0,{r1-r13}
ldr r0,=0x01c80000 /* BWSCON存储控制寄存器地址 */
stmia r0,{r1-r13}
/*初始化堆栈*/
/* CPU复位后是处于管理模式下的,所以首先要初始化管理模式下的堆栈寄存器*/
ldr sp, =SVCStack
/*由于处理器的每种运行模式都要有自己独立的物理堆栈寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行*/
bl InitStacks/*跳转至其它堆栈初始化程序并返回*/
/*设置IRQ中断处理*/
/*44B0有两种中断模式:一种是没有中断向量表;一种是使用了中断向量表,使用中断向量表只能是IRQ方式。当使用中断向量表的时候,中断发生时由S3C44B0的中断控制器根据中断向量表,利用硬件方式自动跳转到相应的中断处理服务程序所在的位置;不使用中断向量表时按下面的代码,利用软件方式跳转而进行中断处理,因为S3C44B0有30个中断源,所以需要程序判断以确定调用那个中断服务程序*/
ldr r0,=HandleIRQ/*如果在0x18和0x1c地址处无“subs pc,lr,#4”*/
ldr r1,=IsrIRQ/*为了中断正常返回这些语句是必须的 */
str r1,[r0]
/*拷贝读写区域数据/数据区准备,将系统需要读写的数据和变量从ROM拷贝到RAM里。Image_RO_Limit、Image_RW_Base、Image_ZI_Base等这些符号还会在另外的链接脚本文件中出现,这些符号是用来定位程序各个段的参考信息。集成开发环境在编译链接的时候会根据我们编写的程序,把它们转换成用来对各个段定位的地址信息*/
LDR r0, =Image_RO_Limit/*取只读数据区域地址指针*/
LDR r1, =Image_RW_Base/*准备执行拷贝操作*/
LDR r3, =Image_ZI_Base
CMP r0, r1 /*检查是否相同*/
BEQ F1 /*相同则跳过拷贝操作*/
F0:
CMP r1, r3/*执行拷贝操作*/
LDRCC r2, [r0], #4
STRCC r2, [r1], #4
BCC F0
F1:
LDR r1, =Image_ZI_Base/*零数据准备区起始地址*/
MOV r2, #0
F2:
CMP r3, r1 /*执行数据区清零*/
STRCC r2, [r3], #4
BCC F2

MRSr0, CPSR
BICr0, r0, #NOINT /*中断请求允许*/
MSRCPSR_cxsf, r0
/* 跳转到C入口程序 */
BLMain
B.

四.总结:
启动过程中的初始化程序就是初始化CPU内部各个关键的寄存器、配置外围硬件电路相关寄存器、建立中断向量表等,然后跳转到一般由高级语言编写的主函数的应用程序代码去执行,这样就可以利用高级语言来编写完成系统设计所要求的各种功能。初始化的过程对大多数初学者来说,比较难理解的是中断的处理和一些少见的操作符号,这些符号多是一些宏定义或系统用于在内存空间中对各个段的定位标识符号。掌握了S3C44B0的启动代码之后,对系统功能程序设计会起到很大的帮助,是进行下一步程序设计的基础。

参考文献:

[1].ARM7TDMIdatasheethttp://www.dzsc.com/datasheet/ARM7TDMI_139812.html.

1 2

关键词: ARM Bootloader 启动流程

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版